54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package test
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
)
|
|
|
|
// TempDirMaker can create directories.
|
|
//
|
|
// It is implemented by `ioutil.TempDir`
|
|
type TempDirMaker func(dir, prefix string) (name string, err error)
|
|
|
|
// TempDirRemover can delete directories
|
|
//
|
|
// It is implemented by `os.RemoveAll`
|
|
type TempDirRemover func(dir string) error
|
|
|
|
// NewTempDirManager returns a new manager for creation and deleteion of temporary directories.
|
|
func NewTempDirManager() *TempDirManager {
|
|
return &TempDirManager{
|
|
Maker: ioutil.TempDir,
|
|
Remover: os.RemoveAll,
|
|
}
|
|
}
|
|
|
|
// TempDirManager knows when to call the directory maker and remover and keeps track of created directories.
|
|
type TempDirManager struct {
|
|
Maker TempDirMaker
|
|
Remover TempDirRemover
|
|
dir string
|
|
}
|
|
|
|
// Create knows how to create a temporary directory and how to keep track of it.
|
|
func (t *TempDirManager) Create() (string, error) {
|
|
if t.dir == "" {
|
|
dir, err := t.Maker("", "kube-test-framework-")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
t.dir = dir
|
|
}
|
|
return t.dir, nil
|
|
}
|
|
|
|
// Destroy knows how to destroy a previously created directory.
|
|
func (t *TempDirManager) Destroy() error {
|
|
if t.dir != "" {
|
|
err := t.Remover(t.dir)
|
|
t.dir = ""
|
|
return err
|
|
}
|
|
return nil
|
|
}
|