예제 #1
0
파일: mountfs_test.go 프로젝트: blang/vfs
func TestReadDirMountPoints(t *testing.T) {
	errRoot := errors.New("Rootfs")
	errMount := errors.New("Mount")
	rootFS := &testDummyFS{Filesystem: vfs.Dummy(errRoot)}
	mountFS := &testDummyFS{Filesystem: vfs.Dummy(errMount)}
	fs := Create(rootFS)
	fs.Mount(mountFS, "/tmp")

	// Test selection of correct fs
	fis, err := fs.ReadDir("/")
	if err != nil {
		t.Errorf("Wrong filesystem selected: %s", err)
	}

	if n := rootFS.lastPath; n != "/" {
		t.Errorf("Incorrect inner name: %s", n)
	}

	if l := len(fis); l != 2 {
		t.Fatalf("Expected 2 files, one fake, one mountpoint: %d, %s", l, fis)
	}
	if n := fis[0].Name(); n != "testcontent" {
		t.Errorf("Expected fake file, but got: %s", fis)
	}
	if n := fis[1].Name(); n != "tmp" {
		t.Errorf("Expected mountpoint, but got: %s", fis)
	}
}
예제 #2
0
파일: mountfs_test.go 프로젝트: blang/vfs
func TestRenameBoundaries(t *testing.T) {
	errRoot := errors.New("Rootfs")
	errMount := errors.New("Mount")
	rootFS := vfs.Dummy(errRoot)
	mountFS := vfs.Dummy(errMount)
	fs := Create(rootFS)
	fs.Mount(mountFS, "/tmp")

	// Test selection of correct fs
	err := fs.Rename("/tmp/testfile1", "/testfile2")
	if err != ErrBoundary {
		t.Errorf("Invalid error, should return boundaries error: %s", err)
	}
}
예제 #3
0
파일: mountfs_test.go 프로젝트: blang/vfs
func TestRemove(t *testing.T) {
	errRoot := errors.New("Rootfs")
	errMount := errors.New("Mount")
	rootFS := vfs.Dummy(errRoot)
	mountFS := &testDummyFS{Filesystem: vfs.Dummy(errMount)}
	fs := Create(rootFS)
	fs.Mount(mountFS, "/tmp")

	// Test selection of correct fs
	err := fs.Remove("/tmp/testdir")
	if err != errMount {
		t.Errorf("Wrong filesystem selected: %s", err)
	}
	if n := mountFS.lastPath; n != "/testdir" {
		t.Errorf("Incorrect inner name: %s", n)
	}
}
예제 #4
0
파일: mountfs_test.go 프로젝트: blang/vfs
func TestOpenFile(t *testing.T) {
	errRoot := errors.New("Rootfs")
	errMount := errors.New("Mount")
	rootFS := vfs.Dummy(errRoot)
	mountFS := &testDummyFS{Filesystem: vfs.Dummy(errMount)}
	fs := Create(rootFS)
	fs.Mount(mountFS, "/tmp")

	// Test selection of correct fs
	f, err := fs.OpenFile("/tmp/testfile", os.O_CREATE, 0)
	if err != nil {
		t.Errorf("Unexpected error: %s", err)
	}
	if n := f.Name(); n != "/tmp/testfile" {
		t.Errorf("Unexpected filename: %s", n)
	}
}
예제 #5
0
파일: mountfs_test.go 프로젝트: blang/vfs
func TestCreate(t *testing.T) {
	errRoot := errors.New("Rootfs")
	errMount := errors.New("Mount")
	rootFS := vfs.Dummy(errRoot)
	mountFS := vfs.Dummy(errMount)
	fs := Create(rootFS)
	if err := fs.Mkdir("/dir", 0); err != errRoot {
		t.Errorf("Expected error from rootFS: %s", err)
	}

	fs.Mount(mountFS, "/tmp")
	if err := fs.Mkdir("/tmp/dir", 0); err != errMount {
		t.Errorf("Expected error from mountFS: %s", err)
	}

	// Change rootfs
	fs.Mount(mountFS, "/")
	if err := fs.Mkdir("/dir2", 0); err != errMount {
		t.Errorf("Expected error from mountFS: %s", err)
	}
}
예제 #6
0
파일: mountfs_test.go 프로젝트: blang/vfs
func TestFindMount(t *testing.T) {
	for i, mtest := range mountTests {
		mounts := make(map[string]vfs.Filesystem)
		revmounts := make(map[vfs.Filesystem]string)
		for _, mount := range mtest.mounts {
			fs := vfs.Dummy(nil)
			mounts[mount] = fs
			revmounts[fs] = mount
		}
		fallback := vfs.Dummy(nil)
		for path, expRes := range mtest.results {
			expMountPath := expRes.mountPath
			expInnerPath := expRes.innerPath

			res, resInnerPath := findMount(path, mounts, fallback, "/")
			if res == nil {
				t.Errorf("Got nil")
				continue
			}
			if res == fallback {
				if expMountPath != "/" {
					t.Fatalf("Invalid mount result test case %d, mounts: %q, path: %q, expected: %q, got: %q", i, mtest.mounts, path, expMountPath, "/")
				}
				continue
			}

			if resMountPath, ok := revmounts[res]; ok {
				if resMountPath != expMountPath {
					t.Fatalf("Invalid mount, test case %d, mounts: %q, path: %q, expected: %q, got: %q", i, mtest.mounts, path, expMountPath, resMountPath)
				}
				if resInnerPath != expInnerPath {
					t.Fatalf("Invalid inner path, test case %d, mounts: %q, path: %q, expected: %q, got: %q", i, mtest.mounts, path, expInnerPath, resInnerPath)
				}
				continue
			}
			t.Fatalf("Invalid mount result test case %d, mounts: %q, path: %q, expected: %q, got invalid result", i, mtest.mounts, path, expMountPath)
		}
	}
}
예제 #7
0
파일: mountfs_test.go 프로젝트: blang/vfs
func TestReadDir(t *testing.T) {
	errRoot := errors.New("Rootfs")
	errMount := errors.New("Mount")
	rootFS := vfs.Dummy(errRoot)
	mountFS := &testDummyFS{Filesystem: vfs.Dummy(errMount)}
	fs := Create(rootFS)
	fs.Mount(mountFS, "/tmp")

	// Test selection of correct fs
	fis, err := fs.ReadDir("/tmp")
	if err != nil {
		t.Errorf("Wrong filesystem selected: %s", err)
	}

	if n := mountFS.lastPath; n != "/" {
		t.Errorf("Incorrect inner name: %s", n)
	}

	if len(fis) != 1 || fis[0].Name() != "testcontent" {
		t.Errorf("Expected fake file, but got: %s", fis)
	}
}
예제 #8
0
파일: mountfs_test.go 프로젝트: blang/vfs
func TestLstatMountPoint(t *testing.T) {
	errRoot := errors.New("Rootfs")
	errMount := errors.New("Mount")
	rootFS := vfs.Dummy(errRoot)
	mountFS := &testDummyFS{Filesystem: vfs.Dummy(errMount)}
	fs := Create(rootFS)
	fs.Mount(mountFS, "/tmp")

	// Test selection of correct fs
	fi, err := fs.Lstat("/tmp")
	if err != nil {
		t.Errorf("Wrong filesystem selected: %s", err)
	}

	if n := mountFS.lastPath; n != "/" {
		t.Errorf("Incorrect inner name: %s", n)
	}

	if n := fi.Name(); n != "tmp" {
		t.Errorf("Mountpoint should be return correct name, got instead: %s", n)
	}
}
예제 #9
0
func MyFS() *myFS {
	return &myFS{
		vfs.Dummy(errors.New("Not implemented yet!")),
	}
}