return
}
-// localTmp returns a local temporary directory not on NFS.
-func localTmp() string {
- switch runtime.GOOS {
- case "android", "ios", "windows":
- return TempDir()
- }
- return "/tmp"
-}
-
-func newFile(testName string, t *testing.T) (f *File) {
- f, err := CreateTemp(localTmp(), "_Go_"+testName)
- if err != nil {
- t.Fatalf("TempFile %s: %s", testName, err)
- }
- return
-}
-
-func newDir(testName string, t *testing.T) (name string) {
- name, err := MkdirTemp(localTmp(), "_Go_"+testName)
+func newFile(t *testing.T) (f *File) {
+ t.Helper()
+ f, err := CreateTemp("", "_Go_"+t.Name())
if err != nil {
- t.Fatalf("TempDir %s: %s", testName, err)
+ t.Fatal(err)
}
+ t.Cleanup(func() {
+ if err := f.Close(); err != nil && !errors.Is(err, ErrClosed) {
+ t.Fatal(err)
+ }
+ if err := Remove(f.Name()); err != nil {
+ t.Fatal(err)
+ }
+ })
return
}
}
t.Parallel()
- f := newFile("TestChmod", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
// Creation mode is read write
fm := FileMode(0456)
func TestFTruncate(t *testing.T) {
t.Parallel()
- f := newFile("TestFTruncate", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
checkSize(t, f, 0)
f.Write([]byte("hello, world\n"))
func TestTruncate(t *testing.T) {
t.Parallel()
- f := newFile("TestTruncate", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
checkSize(t, f, 0)
f.Write([]byte("hello, world\n"))
assertPathError(t, path, err)
}
-// Use TempDir (via newFile) to make sure we're on a local file system,
-// so that timings are not distorted by latency and caching.
-// On NFS, timings can be off due to caching of meta-data on
-// NFS servers (Issue 848).
func TestChtimes(t *testing.T) {
t.Parallel()
- f := newFile("TestChtimes", t)
- defer Remove(f.Name())
+ f := newFile(t)
f.Write([]byte("hello, world\n"))
f.Close()
}
func TestChtimesWithZeroTimes(t *testing.T) {
- file := newFile("chtimes-with-zero", t)
+ file := newFile(t)
_, err := file.Write([]byte("hello, world\n"))
if err != nil {
t.Fatalf("Write: %s", err)
}
fName := file.Name()
- defer Remove(file.Name())
err = file.Close()
if err != nil {
t.Errorf("%v", err)
}
}
-// Use TempDir (via newDir) to make sure we're on a local file system,
-// so that timings are not distorted by latency and caching.
-// On NFS, timings can be off due to caching of meta-data on
-// NFS servers (Issue 848).
func TestChtimesDir(t *testing.T) {
t.Parallel()
- name := newDir("TestChtimes", t)
- defer RemoveAll(name)
-
- testChtimes(t, name)
+ testChtimes(t, t.TempDir())
}
func testChtimes(t *testing.T, name string) {
}
func TestChtimesToUnixZero(t *testing.T) {
- file := newFile("chtimes-to-unix-zero", t)
+ file := newFile(t)
fn := file.Name()
- defer Remove(fn)
if _, err := file.Write([]byte("hi")); err != nil {
t.Fatal(err)
}
func TestSeek(t *testing.T) {
t.Parallel()
- f := newFile("TestSeek", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
const data = "hello, world\n"
io.WriteString(f, data)
func TestReadAt(t *testing.T) {
t.Parallel()
- f := newFile("TestReadAt", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
const data = "hello, world\n"
io.WriteString(f, data)
func TestReadAtOffset(t *testing.T) {
t.Parallel()
- f := newFile("TestReadAtOffset", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
const data = "hello, world\n"
io.WriteString(f, data)
func TestReadAtNegativeOffset(t *testing.T) {
t.Parallel()
- f := newFile("TestReadAtNegativeOffset", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
const data = "hello, world\n"
io.WriteString(f, data)
func TestWriteAt(t *testing.T) {
t.Parallel()
- f := newFile("TestWriteAt", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
const data = "hello, world\n"
io.WriteString(f, data)
func TestWriteAtNegativeOffset(t *testing.T) {
t.Parallel()
- f := newFile("TestWriteAtNegativeOffset", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
n, err := f.WriteAt([]byte("WORLD"), -10)
func TestReadAtEOF(t *testing.T) {
t.Parallel()
- f := newFile("TestReadAtEOF", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
_, err := f.ReadAt(make([]byte, 10), 0)
switch err {
func TestLongPath(t *testing.T) {
t.Parallel()
- tmpdir := newDir("TestLongPath", t)
- defer func(d string) {
- if err := RemoveAll(d); err != nil {
- t.Fatalf("RemoveAll failed: %v", err)
- }
- }(tmpdir)
+ tmpdir := t.TempDir()
// Test the boundary of 247 and fewer bytes (normal) and 248 and more bytes (adjusted).
sizes := []int{247, 248, 249, 400}
}
t.Parallel()
- // Use TempDir() to make sure we're on a local file system,
- // so that the group ids returned by Getgroups will be allowed
- // on the file. On NFS, the Getgroups groups are
- // basically useless.
- f := newFile("TestChown", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
dir, err := f.Stat()
if err != nil {
t.Fatalf("stat %s: %s", f.Name(), err)
}
t.Parallel()
- // Use TempDir() to make sure we're on a local file system,
- // so that the group ids returned by Getgroups will be allowed
- // on the file. On NFS, the Getgroups groups are
- // basically useless.
- f := newFile("TestFileChown", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
dir, err := f.Stat()
if err != nil {
t.Fatalf("stat %s: %s", f.Name(), err)
testenv.MustHaveSymlink(t)
t.Parallel()
- // Use TempDir() to make sure we're on a local file system,
- // so that the group ids returned by Getgroups will be allowed
- // on the file. On NFS, the Getgroups groups are
- // basically useless.
- f := newFile("TestLchown", t)
- defer Remove(f.Name())
- defer f.Close()
+ f := newFile(t)
dir, err := f.Stat()
if err != nil {
t.Fatalf("stat %s: %s", f.Name(), err)
}
return oldStat(name)
}
- dir := newDir("TestReaddirRemoveRace", t)
- defer RemoveAll(dir)
+ dir := t.TempDir()
if err := WriteFile(filepath.Join(dir, "some-file"), []byte("hello"), 0644); err != nil {
t.Fatal(err)
}
t.Parallel()
const umask = 0077
- dir := newDir("TestMkdirStickyUmask", t)
- defer RemoveAll(dir)
+ dir := t.TempDir()
oldUmask := syscall.Umask(umask)
defer syscall.Umask(oldUmask)