github.com/3JoB/vfs@v1.0.0/readonly_test.go (about)

     1  package vfs
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  	"testing"
     7  )
     8  
     9  var (
    10  	errDummy = errors.New("Not implemented")
    11  
    12  	// Complete dummy base
    13  	baseFSDummy = Dummy(errDummy)
    14  	ro          = ReadOnly(baseFSDummy)
    15  )
    16  
    17  func TestROInterface(t *testing.T) {
    18  	_ = Filesystem(ro)
    19  }
    20  
    21  func TestROOpenFileFlags(t *testing.T) {
    22  	_, err := ro.OpenFile("name", os.O_CREATE, 0666)
    23  	if err != ErrReadOnly {
    24  		t.Errorf("Create error expected")
    25  	}
    26  
    27  	_, err = ro.OpenFile("name", os.O_APPEND, 0666)
    28  	if err != ErrReadOnly {
    29  		t.Errorf("Append error expected")
    30  	}
    31  
    32  	_, err = ro.OpenFile("name", os.O_WRONLY, 0666)
    33  	if err != ErrReadOnly {
    34  		t.Errorf("WROnly error expected")
    35  	}
    36  
    37  	_, err = ro.OpenFile("name", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    38  	if err != ErrReadOnly {
    39  		t.Errorf("Error expected")
    40  	}
    41  
    42  	// os.O_RDWR is allowed, dummy error is returned
    43  	_, err = ro.OpenFile("name", os.O_RDWR, 0)
    44  	if err != errDummy {
    45  		t.Errorf("Expected dummy error")
    46  	}
    47  }
    48  
    49  func TestRORemove(t *testing.T) {
    50  	err := ro.Remove("test")
    51  	if err != ErrReadOnly {
    52  		t.Errorf("Remove error expected")
    53  	}
    54  }
    55  
    56  func TestRORename(t *testing.T) {
    57  	err := ro.Rename("old", "new")
    58  	if err != ErrReadOnly {
    59  		t.Errorf("Rename error expected")
    60  	}
    61  }
    62  
    63  func TestMkDir(t *testing.T) {
    64  	err := ro.Mkdir("test", 0777)
    65  	if err != ErrReadOnly {
    66  		t.Errorf("Mkdir error expected")
    67  	}
    68  }
    69  
    70  func TestROSymlink(t *testing.T) {
    71  	err := ro.Symlink("old", "new")
    72  	if err != ErrReadOnly {
    73  		t.Errorf("Symlink error expected")
    74  	}
    75  }
    76  
    77  type writeDummyFS struct {
    78  	Filesystem
    79  }
    80  
    81  // Opens a dummyfile instead of error
    82  func (fs writeDummyFS) OpenFile(name string, flag int, perm os.FileMode) (File, error) {
    83  	return DummyFile(errDummy), nil
    84  }
    85  
    86  func TestROOpenFileWrite(t *testing.T) {
    87  	// Dummy base with mocked OpenFile for write test
    88  	roWriteMock := ReadOnly(writeDummyFS{Filesystem: Dummy(errDummy)})
    89  
    90  	f, err := roWriteMock.OpenFile("name", os.O_RDWR, 0)
    91  	if err != nil {
    92  		t.Errorf("No OpenFile error expected: %s", err)
    93  	}
    94  	written, err := f.Write([]byte("test"))
    95  	if err != ErrReadOnly {
    96  		t.Errorf("Error expected: %s", err)
    97  	}
    98  	if written > 0 {
    99  		t.Errorf("Written expected 0: %d", written)
   100  	}
   101  }