aboutsummaryrefslogtreecommitdiff
path: root/src/os/os_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/os/os_test.go')
-rw-r--r--src/os/os_test.go91
1 files changed, 51 insertions, 40 deletions
diff --git a/src/os/os_test.go b/src/os/os_test.go
index b1e20b7839..b7300cd38c 100644
--- a/src/os/os_test.go
+++ b/src/os/os_test.go
@@ -1708,51 +1708,62 @@ func TestLongPath(t *testing.T) {
t.Fatalf("RemoveAll failed: %v", err)
}
}(tmpdir)
+
+ // Test the boundary of 247 and fewer bytes (normal) and 248 and more bytes (adjusted).
+ sizes := []int{247, 248, 249, 400}
for len(tmpdir) < 400 {
tmpdir += "/dir3456789"
}
- if err := MkdirAll(tmpdir, 0755); err != nil {
- t.Fatalf("MkdirAll failed: %v", err)
- }
- data := []byte("hello world\n")
- if err := ioutil.WriteFile(tmpdir+"/foo.txt", data, 0644); err != nil {
- t.Fatalf("ioutil.WriteFile() failed: %v", err)
- }
- if err := Rename(tmpdir+"/foo.txt", tmpdir+"/bar.txt"); err != nil {
- t.Fatalf("Rename failed: %v", err)
- }
- mtime := time.Now().Truncate(time.Minute)
- if err := Chtimes(tmpdir+"/bar.txt", mtime, mtime); err != nil {
- t.Fatalf("Chtimes failed: %v", err)
- }
- names := []string{"bar.txt"}
- if testenv.HasSymlink() {
- if err := Symlink(tmpdir+"/bar.txt", tmpdir+"/symlink.txt"); err != nil {
- t.Fatalf("Symlink failed: %v", err)
- }
- names = append(names, "symlink.txt")
- }
- if testenv.HasLink() {
- if err := Link(tmpdir+"/bar.txt", tmpdir+"/link.txt"); err != nil {
- t.Fatalf("Link failed: %v", err)
- }
- names = append(names, "link.txt")
- }
- for _, wantSize := range []int64{int64(len(data)), 0} {
- for _, name := range names {
- path := tmpdir + "/" + name
- dir, err := Stat(path)
- if err != nil {
- t.Fatalf("Stat(%q) failed: %v", path, err)
+ for _, sz := range sizes {
+ t.Run(fmt.Sprintf("length=%d", sz), func(t *testing.T) {
+ sizedTempDir := tmpdir[:sz-1] + "x" // Ensure it does not end with a slash.
+
+ // The various sized runs are for this call to trigger the boundary
+ // condition.
+ if err := MkdirAll(sizedTempDir, 0755); err != nil {
+ t.Fatalf("MkdirAll failed: %v", err)
}
- filesize := size(path, t)
- if dir.Size() != filesize || filesize != wantSize {
- t.Errorf("Size(%q) is %d, len(ReadFile()) is %d, want %d", path, dir.Size(), filesize, wantSize)
+ data := []byte("hello world\n")
+ if err := ioutil.WriteFile(sizedTempDir+"/foo.txt", data, 0644); err != nil {
+ t.Fatalf("ioutil.WriteFile() failed: %v", err)
}
- }
- if err := Truncate(tmpdir+"/bar.txt", 0); err != nil {
- t.Fatalf("Truncate failed: %v", err)
- }
+ if err := Rename(sizedTempDir+"/foo.txt", sizedTempDir+"/bar.txt"); err != nil {
+ t.Fatalf("Rename failed: %v", err)
+ }
+ mtime := time.Now().Truncate(time.Minute)
+ if err := Chtimes(sizedTempDir+"/bar.txt", mtime, mtime); err != nil {
+ t.Fatalf("Chtimes failed: %v", err)
+ }
+ names := []string{"bar.txt"}
+ if testenv.HasSymlink() {
+ if err := Symlink(sizedTempDir+"/bar.txt", sizedTempDir+"/symlink.txt"); err != nil {
+ t.Fatalf("Symlink failed: %v", err)
+ }
+ names = append(names, "symlink.txt")
+ }
+ if testenv.HasLink() {
+ if err := Link(sizedTempDir+"/bar.txt", sizedTempDir+"/link.txt"); err != nil {
+ t.Fatalf("Link failed: %v", err)
+ }
+ names = append(names, "link.txt")
+ }
+ for _, wantSize := range []int64{int64(len(data)), 0} {
+ for _, name := range names {
+ path := sizedTempDir + "/" + name
+ dir, err := Stat(path)
+ if err != nil {
+ t.Fatalf("Stat(%q) failed: %v", path, err)
+ }
+ filesize := size(path, t)
+ if dir.Size() != filesize || filesize != wantSize {
+ t.Errorf("Size(%q) is %d, len(ReadFile()) is %d, want %d", path, dir.Size(), filesize, wantSize)
+ }
+ }
+ if err := Truncate(sizedTempDir+"/bar.txt", 0); err != nil {
+ t.Fatalf("Truncate failed: %v", err)
+ }
+ }
+ })
}
}