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  }