mirror of https://github.com/databricks/cli.git
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package testfile
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// Use this struct to work with files in a github actions test environment
|
|
type TestFile struct {
|
|
mtime time.Time
|
|
fd *os.File
|
|
path string
|
|
// to make close idempotent
|
|
isOpen bool
|
|
}
|
|
|
|
func CreateFile(t *testing.T, path string) *TestFile {
|
|
f, err := os.Create(path)
|
|
assert.NoError(t, err)
|
|
|
|
fileInfo, err := os.Stat(path)
|
|
assert.NoError(t, err)
|
|
|
|
return &TestFile{
|
|
path: path,
|
|
fd: f,
|
|
mtime: fileInfo.ModTime(),
|
|
isOpen: true,
|
|
}
|
|
}
|
|
|
|
func (f *TestFile) Close(t *testing.T) {
|
|
if f.isOpen {
|
|
err := f.fd.Close()
|
|
assert.NoError(t, err)
|
|
f.isOpen = false
|
|
}
|
|
}
|
|
|
|
func (f *TestFile) Overwrite(t *testing.T, s string) {
|
|
err := os.Truncate(f.path, 0)
|
|
assert.NoError(t, err)
|
|
|
|
_, err = f.fd.Seek(0, 0)
|
|
assert.NoError(t, err)
|
|
|
|
_, err = f.fd.WriteString(s)
|
|
assert.NoError(t, err)
|
|
|
|
// We manually update mtime after write because github actions file
|
|
// system does not :')
|
|
err = os.Chtimes(f.path, f.mtime.Add(time.Minute), f.mtime.Add(time.Minute))
|
|
assert.NoError(t, err)
|
|
f.mtime = f.mtime.Add(time.Minute)
|
|
}
|
|
|
|
func (f *TestFile) Remove(t *testing.T) {
|
|
f.Close(t)
|
|
err := os.Remove(f.path)
|
|
assert.NoError(t, err)
|
|
}
|