github.com/attic-labs/noms@v0.0.0-20210827224422-e5fa29d95e8b/samples/go/nomsfs/basics_test.go (about) 1 // Copyright 2016 Attic Labs, Inc. All rights reserved. 2 // Licensed under the Apache License, version 2.0: 3 // http://www.apache.org/licenses/LICENSE-2.0 4 5 // +build darwin linux 6 7 package main 8 9 import ( 10 "os" 11 "testing" 12 13 "github.com/attic-labs/noms/go/spec" 14 "github.com/attic-labs/noms/go/util/clienttest" 15 "github.com/stretchr/testify/assert" 16 "github.com/stretchr/testify/suite" 17 18 "github.com/hanwen/go-fuse/fuse" 19 "github.com/hanwen/go-fuse/fuse/pathfs" 20 ) 21 22 type fuseTestSuite struct { 23 clienttest.ClientTestSuite 24 } 25 26 func assertAttr(s *fuseTestSuite, fs pathfs.FileSystem, path string, mode uint32, size uint64) { 27 attr, code := fs.GetAttr(path, nil) 28 assert.Equal(s.T(), fuse.OK, code) 29 if code == fuse.OK { 30 assert.Equal(s.T(), mode, attr.Mode) 31 assert.Equal(s.T(), size, attr.Size) 32 } 33 } 34 35 func TestBasics(t *testing.T) { 36 suite.Run(t, &fuseTestSuite{}) 37 } 38 39 func (s *fuseTestSuite) TestDir() { 40 datasetName := "TestDir" 41 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 42 43 var testfs pathfs.FileSystem 44 45 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 46 47 code := testfs.Mkdir("noms", 0777, nil) 48 assert.Equal(s.T(), fuse.OK, code) 49 assertAttr(s, testfs, "noms", 0777|fuse.S_IFDIR, 0) 50 } 51 52 func (s *fuseTestSuite) TestDirInDir() { 53 datasetName := "TestDirInDir" 54 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 55 56 var testfs pathfs.FileSystem 57 58 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 59 60 code := testfs.Mkdir("opt", 0755, nil) 61 assert.Equal(s.T(), fuse.OK, code) 62 code = testfs.Mkdir("opt/SUNWdtrt", 0755, nil) 63 assert.Equal(s.T(), fuse.OK, code) 64 assertAttr(s, testfs, "opt", 0755|fuse.S_IFDIR, 1) 65 assertAttr(s, testfs, "opt/SUNWdtrt", 0755|fuse.S_IFDIR, 0) 66 } 67 68 func (s *fuseTestSuite) TestFile() { 69 datasetName := "TestFile" 70 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 71 72 var testfs pathfs.FileSystem 73 74 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 75 76 _, code := testfs.Create("pokemon.go", uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0644, nil) 77 assert.Equal(s.T(), fuse.OK, code) 78 assertAttr(s, testfs, "pokemon.go", 0644|fuse.S_IFREG, 0) 79 } 80 81 func (s *fuseTestSuite) TestFileInDir() { 82 datasetName := "TestFile" 83 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 84 85 var testfs pathfs.FileSystem 86 87 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 88 89 code := testfs.Mkdir("usr", 0555, nil) 90 assert.Equal(s.T(), fuse.OK, code) 91 code = testfs.Mkdir("usr/sbin", 0555, nil) 92 assert.Equal(s.T(), fuse.OK, code) 93 _, code = testfs.Create("usr/sbin/dtrace", uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0555, nil) 94 assert.Equal(s.T(), fuse.OK, code) 95 assertAttr(s, testfs, "usr", 0555|fuse.S_IFDIR, 1) 96 assertAttr(s, testfs, "usr/sbin", 0555|fuse.S_IFDIR, 1) 97 assertAttr(s, testfs, "usr/sbin/dtrace", 0555|fuse.S_IFREG, 0) 98 } 99 100 func (s *fuseTestSuite) TestSymlink() { 101 datasetName := "TestSymlink" 102 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 103 104 var testfs pathfs.FileSystem 105 106 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 107 108 code := testfs.Symlink("there", "here", nil) 109 assert.Equal(s.T(), fuse.OK, code) 110 assertAttr(s, testfs, "here", 0755|fuse.S_IFLNK, 0) 111 value, code := testfs.Readlink("here", nil) 112 assert.Equal(s.T(), fuse.OK, code) 113 assert.Equal(s.T(), "there", value) 114 } 115 116 func (s *fuseTestSuite) TestChmod() { 117 datasetName := "TestChmod" 118 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 119 120 var testfs pathfs.FileSystem 121 122 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 123 124 _, code := testfs.Create("passwords.txt", uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0777, nil) 125 assert.Equal(s.T(), fuse.OK, code) 126 code = testfs.Chmod("passwords.txt", 0444, nil) 127 assert.Equal(s.T(), fuse.OK, code) 128 assertAttr(s, testfs, "passwords.txt", 0444|fuse.S_IFREG, 0) 129 } 130 131 func (s *fuseTestSuite) TestRename() { 132 datasetName := "TestRename" 133 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 134 135 var testfs pathfs.FileSystem 136 137 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 138 139 _, code := testfs.Create("prince", uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0644, nil) 140 assert.Equal(s.T(), fuse.OK, code) 141 code = testfs.Rename("prince", "O(+>", nil) 142 assert.Equal(s.T(), fuse.OK, code) 143 assertAttr(s, testfs, "O(+>", 0644|fuse.S_IFREG, 0) 144 } 145 146 func (s *fuseTestSuite) TestUnlink() { 147 datasetName := "TestUnlink" 148 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 149 150 var testfs pathfs.FileSystem 151 152 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 153 154 _, code := testfs.Create("dilma", uint32(os.O_CREATE)|uint32(os.O_WRONLY), 0755, nil) 155 assert.Equal(s.T(), fuse.OK, code) 156 assertAttr(s, testfs, "", 0777|fuse.S_IFDIR, 1) // 1 means it's there 157 code = testfs.Unlink("dilma", nil) 158 assert.Equal(s.T(), fuse.OK, code) 159 assertAttr(s, testfs, "", 0777|fuse.S_IFDIR, 0) // 0 means no entries 160 } 161 162 func (s *fuseTestSuite) TestRmdir() { 163 datasetName := "TestRmdir" 164 str := spec.CreateValueSpecString("nbs", s.DBDir, datasetName) 165 166 var testfs pathfs.FileSystem 167 168 start(str, func(fs pathfs.FileSystem) { testfs = fs }) 169 170 code := testfs.Mkdir("wikileaks", 0755, nil) 171 assert.Equal(s.T(), fuse.OK, code) 172 assertAttr(s, testfs, "", 0777|fuse.S_IFDIR, 1) // 1 means it's there 173 code = testfs.Rmdir("wikileaks", nil) 174 assert.Equal(s.T(), fuse.OK, code) 175 assertAttr(s, testfs, "", 0777|fuse.S_IFDIR, 0) // 0 means no entries 176 }