Fix remaining Windows bugs and tests
diff --git a/afero_test.go b/afero_test.go index 91503b5..4c627a1 100644 --- a/afero_test.go +++ b/afero_test.go
@@ -28,27 +28,42 @@ "testing" ) -var testDir = "/tmp/afero" -var testSubDir = "/tmp/afero/we/have/to/go/deeper" var testName = "test.txt" var Fss = []Fs{&MemMapFs{}, &OsFs{}} +var testRegistry map[Fs][]string = make(map[Fs][]string) + +func testDir(fs Fs) string { + name, err := TempDir(fs, "", "afero") + if err != nil { + panic(fmt.Sprint("unable to work with test dir", err)) + } + testRegistry[fs] = append(testRegistry[fs], name) + + return name +} + +func tmpFile(fs Fs) File { + x, err := TempFile(fs, "", "afero") + + if err != nil { + panic(fmt.Sprint("unable to work with temp file", err)) + } + + testRegistry[fs] = append(testRegistry[fs], x.Name()) + + return x +} + //Read with length 0 should not return EOF. func TestRead0(t *testing.T) { for _, fs := range Fss { - path := testDir + "/" + testName - if err := fs.MkdirAll(testDir, 0777); err != nil { - t.Fatal(fs.Name(), "unable to create dir", err) - } - - f, err := fs.Create(path) - if err != nil { - t.Fatal(fs.Name(), "create failed:", err) - } + f := tmpFile(fs) defer f.Close() f.WriteString("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") - b := make([]byte, 0) + var b []byte + // b := make([]byte, 0) n, err := f.Read(b) if n != 0 || err != nil { t.Errorf("%v: Read(0) = %d, %v, want 0, nil", fs.Name(), n, err) @@ -64,10 +79,9 @@ func TestOpenFile(t *testing.T) { for _, fs := range Fss { - path := testDir + "/" + testName - fs.MkdirAll(testDir, 0777) // Just in case. - fs.Remove(path) // Just in case. - defer fs.Remove(path) + tmp := testDir(fs) + path := filepath.Join(tmp, testName) + defer removeAllTestFiles() f, err := fs.OpenFile(path, os.O_RDWR|os.O_CREATE, 0600) if err != nil { @@ -107,7 +121,8 @@ } func TestMemFileRead(t *testing.T) { - f := MemFileCreate("testfile") + f := tmpFile(new(MemMapFs)) + // f := MemFileCreate("testfile") f.WriteString("abcd") f.Seek(0, 0) b := make([]byte, 8) @@ -129,9 +144,9 @@ func TestRename(t *testing.T) { for _, fs := range Fss { - from, to := testDir+"/renamefrom", testDir+"/renameto" - fs.Remove(to) // Just in case. - fs.MkdirAll(testDir, 0777) // Just in case. + tDir := testDir(fs) + from := filepath.Join(tDir, "/renamefrom") + to := filepath.Join(tDir, "/renameto") file, err := fs.Create(from) if err != nil { t.Fatalf("open %q failed: %v", to, err) @@ -143,7 +158,7 @@ if err != nil { t.Fatalf("rename %q, %q failed: %v", to, from, err) } - names, err := readDirNames(fs, testDir) + names, err := readDirNames(fs, tDir) if err != nil { t.Fatalf("readDirNames error: %v", err) } @@ -159,7 +174,8 @@ if !found { t.Error("File was not renamed to renameto") } - defer fs.Remove(to) + + defer removeAllTestFiles() _, err = fs.Stat(to) if err != nil { t.Errorf("stat %q failed: %v", to, err) @@ -169,11 +185,18 @@ func TestRemove(t *testing.T) { for _, fs := range Fss { - path := testDir + "/" + testName - fs.MkdirAll(testDir, 0777) // Just in case. - fs.Create(path) - err := fs.Remove(path) + x, err := TempFile(fs, "", "afero") + if err != nil { + t.Error(fmt.Sprint("unable to work with temp file", err)) + } + + path := x.Name() + x.Close() + + tDir := filepath.Dir(path) + + err = fs.Remove(path) if err != nil { t.Errorf("%v: Remove() failed: %v", fs.Name(), err) continue @@ -191,7 +214,7 @@ t.Errorf("%v: Remove() didn't raise error for non-existent file", fs.Name()) } - f, err := fs.Open(testDir) + f, err := fs.Open(tDir) if err != nil { t.Error("TestDir should still exist:", err) } @@ -211,9 +234,11 @@ func TestTruncate(t *testing.T) { for _, fs := range Fss { - f := newFile("TestTruncate", fs, t) - defer fs.Remove(f.Name()) + // f := newFile("TestTruncate", fs, t) + f := tmpFile(fs) + defer f.Close() + defer removeAllTestFiles() checkSize(t, f, 0) f.Write([]byte("hello, world\n")) @@ -233,9 +258,9 @@ func TestSeek(t *testing.T) { for _, fs := range Fss { - f := newFile("TestSeek", fs, t) - defer fs.Remove(f.Name()) + f := tmpFile(fs) defer f.Close() + defer removeAllTestFiles() const data = "hello, world\n" io.WriteString(f, data) @@ -271,9 +296,9 @@ func TestReadAt(t *testing.T) { for _, fs := range Fss { - f := newFile("TestReadAt", fs, t) - defer fs.Remove(f.Name()) + f := tmpFile(fs) defer f.Close() + defer removeAllTestFiles() const data = "hello, world\n" io.WriteString(f, data) @@ -291,9 +316,10 @@ func TestWriteAt(t *testing.T) { for _, fs := range Fss { - f := newFile("TestWriteAt", fs, t) - defer fs.Remove(f.Name()) + // f := newFile("TestWriteAt", fs, t) + f := tmpFile(fs) defer f.Close() + defer removeAllTestFiles() const data = "hello, world\n" io.WriteString(f, data) @@ -318,50 +344,50 @@ } } -func setupTestDir(t *testing.T) { - for _, fs := range Fss { - err := fs.RemoveAll(testDir) - if err != nil { - t.Fatal(err) - } - err = fs.MkdirAll(testSubDir, 0700) - if err != nil && !os.IsExist(err) { - t.Fatal(err) - } - f, err := fs.Create(filepath.Join(testSubDir, "testfile1")) - if err != nil { - t.Fatal(err) - } - f.WriteString("Testfile 1 content") - f.Close() - - f, err = fs.Create(filepath.Join(testSubDir, "testfile2")) - if err != nil { - t.Fatal(err) - } - f.WriteString("Testfile 2 content") - f.Close() - - f, err = fs.Create(filepath.Join(testSubDir, "testfile3")) - if err != nil { - t.Fatal(err) - } - f.WriteString("Testfile 3 content") - f.Close() - - f, err = fs.Create(filepath.Join(testSubDir, "testfile4")) - if err != nil { - t.Fatal(err) - } - f.WriteString("Testfile 4 content") - f.Close() +func setupTestDir(t *testing.T, fs Fs) string { + x := testDir(fs) + testSubDir := filepath.Join(x, "more", "subdirectories", "for", "testing", "we") + err := fs.MkdirAll(testSubDir, 0700) + if err != nil && !os.IsExist(err) { + t.Fatal(err) } + + f, err := fs.Create(filepath.Join(testSubDir, "testfile1")) + if err != nil { + t.Fatal(err) + } + f.WriteString("Testfile 1 content") + f.Close() + + f, err = fs.Create(filepath.Join(testSubDir, "testfile2")) + if err != nil { + t.Fatal(err) + } + f.WriteString("Testfile 2 content") + f.Close() + + f, err = fs.Create(filepath.Join(testSubDir, "testfile3")) + if err != nil { + t.Fatal(err) + } + f.WriteString("Testfile 3 content") + f.Close() + + f, err = fs.Create(filepath.Join(testSubDir, "testfile4")) + if err != nil { + t.Fatal(err) + } + f.WriteString("Testfile 4 content") + f.Close() + return testSubDir } func TestReaddirnames(t *testing.T) { - setupTestDir(t) + defer removeAllTestFiles() for _, fs := range Fss { - root, err := fs.Open(testDir) + testSubDir := setupTestDir(t, fs) + tDir := filepath.Dir(testSubDir) + root, err := fs.Open(tDir) if err != nil { t.Fatal(err) } @@ -378,13 +404,16 @@ if err != nil { t.Fatal(err) } - findNames(fs, t, namesRoot, namesSub) + findNames(fs, t, tDir, testSubDir, namesRoot, namesSub) } } func TestReaddirSimple(t *testing.T) { + defer removeAllTestFiles() for _, fs := range Fss { - root, err := fs.Open(testDir) + testSubDir := setupTestDir(t, fs) + tDir := filepath.Dir(testSubDir) + root, err := fs.Open(tDir) if err != nil { t.Fatal(err) } @@ -412,10 +441,13 @@ } func TestReaddir(t *testing.T) { + defer removeAllTestFiles() for num := 0; num < 6; num++ { outputs := make([]string, len(Fss)) infos := make([]string, len(Fss)) for i, fs := range Fss { + testSubDir := setupTestDir(t, fs) + //tDir := filepath.Dir(testSubDir) root, err := fs.Open(testSubDir) if err != nil { t.Fatal(err) @@ -459,9 +491,11 @@ } func TestReaddirAll(t *testing.T) { - defer removeTestDir(t) + defer removeAllTestFiles() for _, fs := range Fss { - root, err := fs.Open(testDir) + testSubDir := setupTestDir(t, fs) + tDir := filepath.Dir(testSubDir) + root, err := fs.Open(tDir) if err != nil { t.Fatal(err) } @@ -487,16 +521,16 @@ namesSub = append(namesSub, e.Name()) } - findNames(fs, t, namesRoot, namesSub) + findNames(fs, t, tDir, testSubDir, namesRoot, namesSub) } } -func findNames(fs Fs, t *testing.T, root, sub []string) { +func findNames(fs Fs, t *testing.T, tDir, testSubDir string, root, sub []string) { var foundRoot bool for _, e := range root { - _, err := fs.Open(path.Join(testDir, e)) + _, err := fs.Open(filepath.Join(tDir, e)) if err != nil { - t.Error("Open", e, ":", err) + t.Error("Open", filepath.Join(tDir, e), ":", err) } if equal(e, "we") { foundRoot = true @@ -510,9 +544,9 @@ var found1, found2 bool for _, e := range sub { - _, err := fs.Open(path.Join(testSubDir, e)) + _, err := fs.Open(filepath.Join(testSubDir, e)) if err != nil { - t.Error("Open", e, ":", err) + t.Error("Open", filepath.Join(testSubDir, e), ":", err) } if equal(e, "testfile1") { found1 = true @@ -534,13 +568,13 @@ } } -func removeTestDir(t *testing.T) { - for _, fs := range Fss { - err := fs.RemoveAll(testDir) - if err != nil { - t.Fatal(err) +func removeAllTestFiles() { + for fs, list := range testRegistry { + for _, path := range list { + fs.RemoveAll(path) } } + testRegistry = make(map[Fs][]string) } func newFile(testName string, fs Fs, t *testing.T) (f File) { @@ -562,7 +596,7 @@ func writeFile(t *testing.T, fs Fs, fname string, flag int, text string) string { f, err := fs.OpenFile(fname, flag, 0666) if err != nil { - t.Fatalf("Open: %v", err) + t.Fatalf("Unable to Open file %q for writing: %v", fname, err) } n, err := io.WriteString(f, text) if err != nil {
diff --git a/memfile.go b/memfile.go index f69d2cd..d3d8223 100644 --- a/memfile.go +++ b/memfile.go
@@ -18,7 +18,7 @@ "bytes" "io" "os" - "path" + "path/filepath" "sync" "sync/atomic" ) @@ -112,7 +112,7 @@ fi, err := f.Readdir(n) names = make([]string, len(fi)) for i, f := range fi { - _, names[i] = path.Split(f.Name()) + _, names[i] = filepath.Split(f.Name()) } return names, err } @@ -213,7 +213,7 @@ // Implements os.FileInfo func (s *InMemoryFileInfo) Name() string { - _, name := path.Split(s.file.Name()) + _, name := filepath.Split(s.file.Name()) return name } func (s *InMemoryFileInfo) Mode() os.FileMode { return s.file.mode }
diff --git a/memmap.go b/memmap.go index 06799c6..6ad32e6 100644 --- a/memmap.go +++ b/memmap.go
@@ -47,7 +47,7 @@ // Root should always exist, right? // TODO: what about windows? - m.data["/"] = &InMemoryFile{name: "/", memDir: &MemDirMap{}, dir: true} + m.data[FilePathSeparator] = &InMemoryFile{name: FilePathSeparator, memDir: &MemDirMap{}, dir: true} } return m.data } @@ -104,7 +104,7 @@ f, err := m.lockfreeOpen(fileName) if err != nil { if os.IsNotExist(err) { - log.Println("Open err:", err) + log.Printf("Unable to unregister \"%v\" with Parent, err: %v", fileName, err) } return } @@ -213,9 +213,9 @@ switch path { case ".": - return "/" + return FilePathSeparator case "..": - return "/" + return FilePathSeparator default: return path }
diff --git a/memmap_test.go b/memmap_test.go index 2355122..53ff2af 100644 --- a/memmap_test.go +++ b/memmap_test.go
@@ -9,19 +9,18 @@ } data := []test{ - {".", "/"}, - {".", "/"}, - {"./", "/"}, - {"..", "/"}, - {"../", "/"}, - {"./..", "/"}, - {"./../", "/"}, + {".", FilePathSeparator}, + {"./", FilePathSeparator}, + {"..", FilePathSeparator}, + {"../", FilePathSeparator}, + {"./..", FilePathSeparator}, + {"./../", FilePathSeparator}, } for i, d := range data { cpath := normalizePath(d.input) if d.expected != cpath { - t.Errorf("Test %d failed. Expected %t got %t", i, d.expected, cpath) + t.Errorf("Test %d failed. Expected %q got %q", i, d.expected, cpath) } } }