github.com/gozelle/afero@v0.0.0-20230510083704-09e2ff18f19e/copyOnWriteFs_test.go (about) 1 package afero 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 ) 8 9 func TestCopyOnWrite(t *testing.T) { 10 osFs := NewOsFs() 11 writeDir, err := TempDir(osFs, "", "copy-on-write-test") 12 if err != nil { 13 t.Fatal("error creating tempDir", err) 14 } 15 defer osFs.RemoveAll(writeDir) 16 17 compositeFs := NewCopyOnWriteFs(NewReadOnlyFs(NewOsFs()), osFs) 18 19 dir := filepath.Join(writeDir, "some/path") 20 21 err = compositeFs.MkdirAll(dir, 0o744) 22 if err != nil { 23 t.Fatal(err) 24 } 25 _, err = compositeFs.Create(filepath.Join(dir, "newfile")) 26 if err != nil { 27 t.Fatal(err) 28 } 29 30 // https://github.com/gozelle/afero/issues/189 31 // We want the composite file system to behave like the OS file system 32 // on Mkdir and MkdirAll 33 for _, fs := range []Fs{osFs, compositeFs} { 34 err = fs.Mkdir(dir, 0o744) 35 if err == nil || !os.IsExist(err) { 36 t.Errorf("Mkdir: Got %q for %T", err, fs) 37 } 38 39 // MkdirAll does not return an error when the directory already exists 40 err = fs.MkdirAll(dir, 0o744) 41 if err != nil { 42 t.Errorf("MkdirAll: Got %q for %T", err, fs) 43 } 44 45 } 46 } 47 48 func TestCopyOnWriteFileInMemMapBase(t *testing.T) { 49 base := &MemMapFs{} 50 layer := &MemMapFs{} 51 52 if err := WriteFile(base, "base.txt", []byte("base"), 0o755); err != nil { 53 t.Fatalf("Failed to write file: %s", err) 54 } 55 56 ufs := NewCopyOnWriteFs(base, layer) 57 58 _, err := ufs.Stat("base.txt") 59 if err != nil { 60 t.Fatal(err) 61 } 62 }