func (s *fuseTestSuite) TestDir() { datasetName := "TestDir" str := spec.CreateValueSpecString("ldb", s.LdbDir, datasetName) var testfs pathfs.FileSystem start(str, func(fs pathfs.FileSystem) { testfs = fs }) code := testfs.Mkdir("noms", 0777, nil) assert.Equal(s.T(), fuse.OK, code) assertAttr(s, testfs, "noms", 0777|fuse.S_IFDIR, 0) }
func (s *fuseTestSuite) TestRmdir() { datasetName := "TestRmdir" str := spec.CreateValueSpecString("ldb", s.LdbDir, datasetName) var testfs pathfs.FileSystem start(str, func(fs pathfs.FileSystem) { testfs = fs }) code := testfs.Mkdir("wikileaks", 0755, nil) assert.Equal(s.T(), fuse.OK, code) assertAttr(s, testfs, "", 0777|fuse.S_IFDIR, 1) // 1 means it's there code = testfs.Rmdir("wikileaks", nil) assert.Equal(s.T(), fuse.OK, code) assertAttr(s, testfs, "", 0777|fuse.S_IFDIR, 0) // 0 means no entries }
func (s *fuseTestSuite) TestDirError() { datasetName := "TestDirError" str := spec.CreateValueSpecString("ldb", s.LdbDir, datasetName) var testfs pathfs.FileSystem start(str, func(fs pathfs.FileSystem) { testfs = fs }) code := testfs.Mkdir("foo/bar", 0755, nil) assert.Equal(s.T(), fuse.ENOENT, code) _, code = testfs.Create("foo", uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0644, nil) assert.Equal(s.T(), fuse.OK, code) code = testfs.Mkdir("foo/bar", 0755, nil) assert.Equal(s.T(), fuse.ENOTDIR, code) _, code = testfs.OpenDir("foo", nil) assert.Equal(s.T(), fuse.ENOTDIR, code) }
func (s *fuseTestSuite) TestFileInDir() { datasetName := "TestFile" str := spec.CreateValueSpecString("ldb", s.LdbDir, datasetName) var testfs pathfs.FileSystem start(str, func(fs pathfs.FileSystem) { testfs = fs }) code := testfs.Mkdir("usr", 0555, nil) assert.Equal(s.T(), fuse.OK, code) code = testfs.Mkdir("usr/sbin", 0555, nil) assert.Equal(s.T(), fuse.OK, code) _, code = testfs.Create("usr/sbin/dtrace", uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0555, nil) assert.Equal(s.T(), fuse.OK, code) assertAttr(s, testfs, "usr", 0555|fuse.S_IFDIR, 1) assertAttr(s, testfs, "usr/sbin", 0555|fuse.S_IFDIR, 1) assertAttr(s, testfs, "usr/sbin/dtrace", 0555|fuse.S_IFREG, 0) }
func (s *fuseTestSuite) TestHierarchy() { datasetName := "TestHierarchy" str := spec.CreateValueSpecString("ldb", s.LdbDir, datasetName) var testfs pathfs.FileSystem start(str, func(fs pathfs.FileSystem) { testfs = fs }) hierarchy := []string{ "bin/", "bin/sh", "usr/", "usr/bin/", "usr/bin/cat", "usr/bin/bash", "usr/lib/", "usr/lib/libc.so.1", "usr/dict/", "usr/dict/words", "usr/dict/words2", } for _, path := range hierarchy { if ll := len(path); path[ll-1] == '/' { code := testfs.Mkdir(path[:ll-1], 0555, nil) assert.Equal(s.T(), fuse.OK, code) } else { _, code := testfs.Create(path, uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0444, nil) assert.Equal(s.T(), fuse.OK, code) } } h := find(testfs) sort.Strings(hierarchy) sort.Strings(h) assert.Equal(s.T(), hierarchy, h) }
func (s *fuseTestSuite) TestRenameWhileOpen() { datasetName := "TestRenameWhileOpen" str := spec.CreateValueSpecString("ldb", s.LdbDir, datasetName) var testfs pathfs.FileSystem start(str, func(fs pathfs.FileSystem) { testfs = fs }) code := testfs.Mkdir("foo", 0755, nil) assert.Equal(s.T(), fuse.OK, code) code = testfs.Mkdir("foo/bar", 0755, nil) assert.Equal(s.T(), fuse.OK, code) file, code := testfs.Create("foo/bar/file.txt", uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0644, nil) assert.Equal(s.T(), fuse.OK, code) // Validate renaming a file between opening it and writing to it. code = testfs.Rename("foo/bar/file.txt", "file.txt", nil) assert.Equal(s.T(), fuse.OK, code) n, code := file.Write([]byte("howdy!"), 0) assert.Equal(s.T(), uint32(6), n) assert.Equal(s.T(), fuse.OK, code) assertAttr(s, testfs, "file.txt", 0644|fuse.S_IFREG, 6) }