github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/filesystem/fs_test.go (about) 1 // Package filesystem - Content managed by Project Forge, see [projectforge.md] for details. 2 package filesystem_test 3 4 import ( 5 "os" 6 "path" 7 "strings" 8 "testing" 9 10 "github.com/pkg/errors" 11 12 "github.com/kyleu/dbaudit/app/lib/filesystem" 13 "github.com/kyleu/dbaudit/app/lib/log" 14 ) 15 16 const testFile = "foo.txt" 17 18 func TestFileSystem(t *testing.T) { 19 t.Parallel() 20 fixWD() 21 fs, err := filesystem.NewFileSystem("tmp", false, "") 22 if err != nil { 23 t.Errorf("error starting filesystem [tmp]: %+v", err) 24 } 25 err = testFS("test-filesystem", fs, true) 26 if err != nil { 27 t.Errorf("error testing filesystem [%s]: %+v", fs.String(), err) 28 } 29 } 30 31 func testFS(testDir string, fs filesystem.FileLoader, removeWhenDone bool) error { 32 fixWD() 33 logger, _ := log.CreateTestLogger() 34 content := "Hello, test world!" 35 if fs.Exists(testDir) { 36 err := fs.RemoveRecursive(testDir, logger) 37 if err != nil { 38 return errors.Wrapf(err, "error removing test directory [%s] before starting", testDir) 39 } 40 } 41 42 if err := fs.CreateDirectory(testDir); err != nil { 43 return err 44 } 45 46 if err := fs.WriteFile(path.Join(testDir, testFile), []byte(content), filesystem.DefaultMode, false); err != nil { 47 return err 48 } 49 50 if b, err := fs.ReadFile(path.Join(testDir, testFile)); err != nil || string(b) != content { 51 if err != nil { 52 return err 53 } 54 return errors.Errorf("content [%s] didn't match [%s]", string(b), content) 55 } 56 57 files := fs.ListFiles(testDir, nil, logger) 58 if len(files) != 1 { 59 return errors.Errorf("expected [%d] files, observed [%d]", 1, len(files)) 60 } 61 if files[0].Name != testFile { 62 return errors.Errorf("expected [%s] filename, observed [%s]", testFile, files[0].Name) 63 } 64 if files[0].Size != 18 { 65 return errors.Errorf("expected [%d] file size, observed [%d]", 18, files[0].Size) 66 } 67 68 if err := fs.Remove(path.Join(testDir, testFile), logger); err != nil { 69 return err 70 } 71 72 files = fs.ListFiles(testDir, nil, logger) 73 if len(files) != 0 { 74 return errors.Errorf("expected [%d] files, observed [%d]", 0, len(files)) 75 } 76 77 if removeWhenDone { 78 if err := fs.RemoveRecursive(testDir, logger); err != nil { 79 return errors.Wrapf(err, "error removing test directory [%s] after completion", testDir) 80 } 81 } 82 83 return nil 84 } 85 86 func fixWD() { 87 wd, _ := os.Getwd() 88 origwd := wd 89 wd = strings.TrimSuffix(wd, "/filesystem") 90 wd = strings.TrimSuffix(wd, "/lib") 91 wd = strings.TrimSuffix(wd, "/app") 92 if wd != origwd { 93 _ = os.Chdir(wd) 94 } 95 }