func Test_remove(t *testing.T) { cleanup := testutils.Chtemp() defer cleanup() args := RuntimeArgs{ BasicArgs: types.MakeBasicArgs(nil, []types.FuObject{}, nil), } // remove() doesn't care about empty arg list (same reason as mkdir()) result, errs := fn_remove(args) assert.Nil(t, result) assert.Equal(t, 0, len(errs)) // remove() ignores non-existent files args.SetArgs(types.MakeStringList("foo", "bar/bleep/meep", "qux").List()) result, errs = fn_remove(args) assert.Nil(t, result) assert.Equal(t, 0, len(errs)) // remove() removes regular files testutils.TouchFiles("foo", "bar/bleep/meep", "bar/bleep/feep", "qux") args.SetArgs(types.MakeStringList("foo", "bar/bleep/meep", "bogus").List()) result, errs = fn_remove(args) assert.Nil(t, result) assert.Equal(t, 0, len(errs)) assert.Equal(t, []string{"bar", "qux"}, dirContents(".")) assert.Equal(t, []string{"bleep"}, dirContents("bar")) assert.Equal(t, []string{"feep"}, dirContents("bar/bleep")) // remove() removes files and directories too testutils.TouchFiles("foo", "bar/bleep/meep", "qux") args.SetArgs(types.MakeStringList("bogus", "bar", "morebogus", "qux").List()) result, errs = fn_remove(args) assert.Nil(t, result) assert.Equal(t, 0, len(errs)) assert.Equal(t, []string{"foo"}, dirContents(".")) // remove() fails if it tries to delete from an unwriteable directory testutils.TouchFiles("bar/bong", "qux/bip") testutils.ChmodRO("bar") defer testutils.ChmodOwnerAll("bar") args.SetArgs(types.MakeStringList("bar", "qux").List()) result, errs = fn_remove(args) assert.Nil(t, result) assert.Equal(t, "remove bar/bong: permission denied", errs[0].Error()) }
func Test_FileNode_Exists(t *testing.T) { cleanup := testutils.Chtemp() defer cleanup() testutils.TouchFiles("foo.txt", "a/a/a/a/foo.txt", "a/b/unreadable") testutils.ChmodNoAccess("a/b") defer testutils.ChmodOwnerAll("a/b") dag := NewDAG() tests := []struct { name string exists bool err string }{ {"foo.txt", true, ""}, {"a/a/a", false, "stat a/a/a: is a directory, not a regular file"}, {"a/a/a/bogus", false, ""}, {"a/a/a/a/foo.txt", true, ""}, {"a/b/unreadable", false, "stat a/b/unreadable: permission denied"}, } for _, test := range tests { node := MakeFileNode(dag, test.name) exists, err := node.Exists() if test.err != "" { assert.NotNil(t, err) assert.Equal(t, test.err, err.Error()) } if test.exists && !exists { t.Errorf("%v: expected Exists() true, got false", node) } else if !test.exists && exists { t.Errorf("%v: expected Exists() false, got true", node) } } }