X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/e23f03950b82e72de23c4c44112785a9e92ea235..6ddd57f1da6139b76db95ad16cccbb95eab01e5d:/sdk/go/arvados/fs_project_test.go diff --git a/sdk/go/arvados/fs_project_test.go b/sdk/go/arvados/fs_project_test.go index 8943513271..d3dac7a14f 100644 --- a/sdk/go/arvados/fs_project_test.go +++ b/sdk/go/arvados/fs_project_test.go @@ -7,9 +7,9 @@ package arvados import ( "bytes" "encoding/json" + "errors" "io" "os" - "path/filepath" "strings" check "gopkg.in/check.v1" @@ -101,14 +101,16 @@ func (s *SiteFSSuite) TestFilterGroup(c *check.C) { func (s *SiteFSSuite) TestCurrentUserHome(c *check.C) { s.fs.MountProject("home", "") - s.testHomeProject(c, "/home") + s.testHomeProject(c, "/home", "home") } func (s *SiteFSSuite) TestUsersDir(c *check.C) { - s.testHomeProject(c, "/users/active") + // /users/active is a hardlink to a dir whose name is the UUID + // of the active user + s.testHomeProject(c, "/users/active", fixtureActiveUserUUID) } -func (s *SiteFSSuite) testHomeProject(c *check.C, path string) { +func (s *SiteFSSuite) testHomeProject(c *check.C, path, expectRealName string) { f, err := s.fs.Open(path) c.Assert(err, check.IsNil) fis, err := f.Readdir(-1) @@ -129,8 +131,7 @@ func (s *SiteFSSuite) testHomeProject(c *check.C, path string) { fi, err := f.Stat() c.Assert(err, check.IsNil) c.Check(fi.IsDir(), check.Equals, true) - _, basename := filepath.Split(path) - c.Check(fi.Name(), check.Equals, basename) + c.Check(fi.Name(), check.Equals, expectRealName) f, err = s.fs.Open(path + "/A Project/A Subproject") c.Assert(err, check.IsNil) @@ -262,14 +263,10 @@ func (s *SiteFSSuite) TestProjectUpdatedByOther(c *check.C) { err = project.Sync() c.Check(err, check.IsNil) - _, err = s.fs.Open("/home/A Project/oob/test.txt") - c.Check(err, check.IsNil) - - // Sync again to mark the project dir as stale, so the - // collection gets reloaded from the controller on next - // lookup. - err = project.Sync() - c.Check(err, check.IsNil) + f, err = s.fs.Open("/home/A Project/oob/test.txt") + if c.Check(err, check.IsNil) { + f.Close() + } // Ensure collection was flushed by Sync var latest Collection @@ -287,10 +284,17 @@ func (s *SiteFSSuite) TestProjectUpdatedByOther(c *check.C) { }) c.Assert(err, check.IsNil) + // Sync again to reload collection. + err = project.Sync() + c.Check(err, check.IsNil) + + // Check test.txt deletion is reflected in fs. _, err = s.fs.Open("/home/A Project/oob/test.txt") c.Check(err, check.NotNil) - _, err = s.fs.Open("/home/A Project/oob") - c.Check(err, check.IsNil) + f, err = s.fs.Open("/home/A Project/oob") + if c.Check(err, check.IsNil) { + f.Close() + } err = s.client.RequestAndDecode(nil, "DELETE", "arvados/v1/collections/"+oob.UUID, nil, nil) c.Assert(err, check.IsNil) @@ -311,17 +315,37 @@ func (s *SiteFSSuite) TestProjectUnsupportedOperations(c *check.C) { s.fs.MountProject("home", "") _, err := s.fs.OpenFile("/home/A Project/newfilename", os.O_CREATE|os.O_RDWR, 0) - c.Check(err, check.ErrorMatches, "invalid argument") + c.Check(err, ErrorIs, ErrInvalidOperation) err = s.fs.Mkdir("/home/A Project/newdirname", 0) - c.Check(err, check.ErrorMatches, "invalid argument") + c.Check(err, ErrorIs, ErrInvalidOperation) err = s.fs.Mkdir("/by_id/newdirname", 0) - c.Check(err, check.ErrorMatches, "invalid argument") + c.Check(err, ErrorIs, ErrInvalidOperation) err = s.fs.Mkdir("/by_id/"+fixtureAProjectUUID+"/newdirname", 0) - c.Check(err, check.ErrorMatches, "invalid argument") + c.Check(err, ErrorIs, ErrInvalidOperation) _, err = s.fs.OpenFile("/home/A Project", 0, 0) c.Check(err, check.IsNil) } + +type errorIsChecker struct { + *check.CheckerInfo +} + +var ErrorIs check.Checker = errorIsChecker{ + &check.CheckerInfo{Name: "ErrorIs", Params: []string{"value", "target"}}, +} + +func (checker errorIsChecker) Check(params []interface{}, names []string) (result bool, errStr string) { + err, ok := params[0].(error) + if !ok { + return false, "" + } + target, ok := params[1].(error) + if !ok { + return false, "" + } + return errors.Is(err, target), "" +}