diff options
Diffstat (limited to 'src/os/os_test.go')
-rw-r--r-- | src/os/os_test.go | 91 |
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) + } + } + }) } } |