github.com/maxnasonov/afero@v1.8.4/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  	var dir = filepath.Join(writeDir, "some/path")
    20  
    21  	err = compositeFs.MkdirAll(dir, 0744)
    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/spf13/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, 0744)
    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, 0744)
    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"), 0755); 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  }