0 | 0 |
package afero
|
1 | 1 |
|
2 | |
import "testing"
|
|
2 |
import (
|
|
3 |
"os"
|
|
4 |
"path/filepath"
|
|
5 |
"testing"
|
|
6 |
)
|
3 | 7 |
|
4 | 8 |
func TestCopyOnWrite(t *testing.T) {
|
5 | |
var fs Fs
|
6 | |
var err error
|
7 | |
base := NewOsFs()
|
8 | |
roBase := NewReadOnlyFs(base)
|
9 | |
ufs := NewCopyOnWriteFs(roBase, NewMemMapFs())
|
|
9 |
osFs := NewOsFs()
|
|
10 |
writeDir, err := TempDir(osFs, "", "copy-on-write-test")
|
|
11 |
if err != nil {
|
|
12 |
t.Fatal("error creating tempDir", err)
|
|
13 |
}
|
|
14 |
defer osFs.RemoveAll(writeDir)
|
10 | 15 |
|
11 | |
fs = ufs
|
12 | |
err = fs.MkdirAll("nonexistent/directory/", 0744)
|
|
16 |
compositeFs := NewCopyOnWriteFs(NewReadOnlyFs(NewOsFs()), osFs)
|
|
17 |
|
|
18 |
var dir = filepath.Join(writeDir, "some/path")
|
|
19 |
|
|
20 |
err = compositeFs.MkdirAll(dir, 0744)
|
13 | 21 |
if err != nil {
|
14 | |
t.Error(err)
|
15 | |
return
|
|
22 |
t.Fatal(err)
|
16 | 23 |
}
|
17 | |
_, err = fs.Create("nonexistent/directory/newfile")
|
|
24 |
_, err = compositeFs.Create(filepath.Join(dir, "newfile"))
|
18 | 25 |
if err != nil {
|
19 | |
t.Error(err)
|
20 | |
return
|
|
26 |
t.Fatal(err)
|
21 | 27 |
}
|
22 | 28 |
|
|
29 |
// https://github.com/spf13/afero/issues/189
|
|
30 |
// We want the composite file system to behave like the OS file system
|
|
31 |
// on Mkdir and MkdirAll
|
|
32 |
for _, fs := range []Fs{osFs, compositeFs} {
|
|
33 |
err = fs.Mkdir(dir, 0744)
|
|
34 |
if err == nil || !os.IsExist(err) {
|
|
35 |
t.Errorf("Mkdir: Got %q for %T", err, fs)
|
|
36 |
}
|
|
37 |
|
|
38 |
// MkdirAll does not return an error when the directory already exists
|
|
39 |
err = fs.MkdirAll(dir, 0744)
|
|
40 |
if err != nil {
|
|
41 |
t.Errorf("MkdirAll: Got %q for %T", err, fs)
|
|
42 |
}
|
|
43 |
|
|
44 |
}
|
23 | 45 |
}
|
24 | 46 |
|
25 | 47 |
func TestCopyOnWriteFileInMemMapBase(t *testing.T) {
|