...
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
31
32
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
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 }
63
View as plain text