defer chtmpdir(t)()
path := "no-such-file"
- Remove(path) // Just in case
fi, err := Stat(path)
if err == nil {
testenv.MustHaveSymlink(t)
link := "symlink"
- Remove(link) // Just in case
err = Symlink(path, link)
if err != nil {
t.Fatal(err)
}
- defer Remove(link)
fi, err = Stat(link)
if err == nil {
defer chtmpdir(t)()
from, to := "hardlinktestfrom", "hardlinktestto"
- Remove(from) // Just in case.
file, err := Create(to)
if err != nil {
t.Fatalf("open %q failed: %v", to, err)
}
- defer Remove(to)
if err = file.Close(); err != nil {
t.Errorf("close %q failed: %v", to, err)
}
t.Errorf("link %q, %q failed to return a valid error", none, none)
}
- defer Remove(from)
tostat, err := Stat(to)
if err != nil {
t.Fatalf("stat %q failed: %v", to, err)
}
// chtmpdir changes the working directory to a new temporary directory and
-// provides a cleanup function. Used when PWD is read-only.
+// provides a cleanup function.
func chtmpdir(t *testing.T) func() {
- if runtime.GOOS != "darwin" || (runtime.GOARCH != "arm" && runtime.GOARCH != "arm64") {
- return func() {} // only needed on darwin/arm{,64}
- }
oldwd, err := Getwd()
if err != nil {
t.Fatalf("chtmpdir: %v", err)
defer chtmpdir(t)()
from, to := "symlinktestfrom", "symlinktestto"
- Remove(from) // Just in case.
file, err := Create(to)
if err != nil {
t.Fatalf("Create(%q) failed: %v", to, err)
}
- defer Remove(to)
if err = file.Close(); err != nil {
t.Errorf("Close(%q) failed: %v", to, err)
}
if err != nil {
t.Fatalf("Symlink(%q, %q) failed: %v", to, from, err)
}
- defer Remove(from)
tostat, err := Lstat(to)
if err != nil {
t.Fatalf("Lstat(%q) failed: %v", to, err)
// Long, but not too long: a common limit is 255.
s = s + s + s + s + s + s + s + s + s + s + s + s + s + s + s
from := "longsymlinktestfrom"
- Remove(from) // Just in case.
err := Symlink(s, from)
if err != nil {
t.Fatalf("symlink %q, %q failed: %v", s, from, err)
}
- defer Remove(from)
r, err := Readlink(from)
if err != nil {
t.Fatalf("readlink %q failed: %v", from, err)
func TestRename(t *testing.T) {
defer chtmpdir(t)()
from, to := "renamefrom", "renameto"
- // Ensure we are not testing the overwrite case here.
- Remove(from)
- Remove(to)
file, err := Create(from)
if err != nil {
if err != nil {
t.Fatalf("rename %q, %q failed: %v", to, from, err)
}
- defer Remove(to)
_, err = Stat(to)
if err != nil {
t.Errorf("stat %q failed: %v", to, err)
func TestRenameOverwriteDest(t *testing.T) {
defer chtmpdir(t)()
from, to := "renamefrom", "renameto"
- // Just in case.
- Remove(from)
- Remove(to)
toData := []byte("to")
fromData := []byte("from")
if err != nil {
t.Fatalf("rename %q, %q failed: %v", to, from, err)
}
- defer Remove(to)
_, err = Stat(from)
if err == nil {
func TestRenameFailed(t *testing.T) {
defer chtmpdir(t)()
from, to := "renamefrom", "renameto"
- // Ensure we are not testing the overwrite case here.
- Remove(from)
- Remove(to)
err := Rename(from, to)
switch err := err.(type) {
}
case nil:
t.Errorf("rename %q, %q: expected error, got nil", from, to)
-
- // cleanup whatever was placed in "renameto"
- Remove(to)
default:
t.Errorf("rename %q, %q: expected %T, got %T %v", from, to, new(LinkError), err, err)
}
from, to := "doesnt-exist", "dest"
Mkdir(to, 0777)
- defer Remove(to)
if err := Rename(from, to); !IsNotExist(err) {
t.Errorf("Rename(%q, %q) = %v; want an IsNotExist error", from, to, err)
defer chtmpdir(t)()
from, to := "renamefrom", "renameto"
- Remove(from)
- Remove(to)
Mkdir(from, 0777)
Mkdir(to, 0777)
- defer Remove(from)
- defer Remove(to)
err := Rename(from, to)
switch err := err.(type) {
}
case nil:
t.Errorf("rename %q, %q: expected error, got nil", from, to)
-
- // cleanup whatever was placed in "renameto"
- Remove(to)
default:
t.Errorf("rename %q, %q: expected %T, got %T %v", from, to, new(LinkError), err, err)
}
func TestAppend(t *testing.T) {
defer chtmpdir(t)()
const f = "append.txt"
- defer Remove(f)
s := writeFile(t, f, O_CREATE|O_TRUNC|O_RDWR, "new")
if s != "new" {
t.Fatalf("writeFile: have %q want %q", s, "new")
if err != nil {
t.Fatalf("Create(a): %v", err)
}
- defer Remove(fa.Name())
fa.Close()
fb, err := Create("b")
if err != nil {
t.Fatalf("Create(b): %v", err)
}
- defer Remove(fb.Name())
fb.Close()
ia1, err := Stat("a")