13111: Access projects via /by_id/$uuid/.
authorTom Clegg <tclegg@veritasgenetics.com>
Mon, 23 Apr 2018 13:05:39 +0000 (09:05 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Mon, 23 Apr 2018 13:23:09 +0000 (09:23 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

sdk/go/arvados/fs_site.go
sdk/go/arvados/fs_site_test.go
sdk/go/arvadostest/fixtures.go

index b5daf7b88381f952caaffd4de186624e19dbeb73..82114e2ea9ed54ac89cc94dd387d73711efae561 100644 (file)
@@ -6,6 +6,7 @@ package arvados
 
 import (
        "os"
+       "strings"
        "sync"
        "time"
 )
@@ -60,7 +61,7 @@ func (fs *customFileSystem) MountByID(mount string) {
                                        mode:    0755 | os.ModeDir,
                                },
                        },
-                       create: fs.mountCollection,
+                       create: fs.mountByID,
                }, nil
        })
 }
@@ -123,6 +124,16 @@ func (fs *customFileSystem) newNode(name string, perm os.FileMode, modTime time.
        return nil, ErrInvalidOperation
 }
 
+func (fs *customFileSystem) mountByID(parent inode, id string) inode {
+       if strings.Contains(id, "-4zz18-") || pdhRegexp.MatchString(id) {
+               return fs.mountCollection(parent, id)
+       } else if strings.Contains(id, "-j7d0g-") {
+               return fs.newProjectNode(fs.root, id, id)
+       } else {
+               return nil
+       }
+}
+
 func (fs *customFileSystem) mountCollection(parent inode, id string) inode {
        var coll Collection
        err := fs.RequestAndDecode(&coll, "GET", "arvados/v1/collections/"+id, nil, nil)
index e35ae4897ea4a3378018c24d6521d0efbaee42ca..371eab27134dee360ba7ac9507b645cf3e86897d 100644 (file)
@@ -45,7 +45,7 @@ func (s *SiteFSSuite) TestByIDEmpty(c *check.C) {
        c.Check(len(fis), check.Equals, 0)
 }
 
-func (s *SiteFSSuite) TestByUUID(c *check.C) {
+func (s *SiteFSSuite) TestByUUIDAndPDH(c *check.C) {
        f, err := s.fs.Open("/by_id")
        c.Assert(err, check.IsNil)
        fis, err := f.Readdir(-1)
@@ -58,14 +58,29 @@ func (s *SiteFSSuite) TestByUUID(c *check.C) {
        f, err = s.fs.Open("/by_id/" + arvadostest.NonexistentCollection)
        c.Assert(err, check.Equals, os.ErrNotExist)
 
-       f, err = s.fs.Open("/by_id/" + arvadostest.FooCollection)
+       for _, path := range []string{
+               arvadostest.FooCollection,
+               arvadostest.FooPdh,
+               arvadostest.AProjectUUID + "/" + arvadostest.FooCollectionName,
+       } {
+               f, err = s.fs.Open("/by_id/" + path)
+               c.Assert(err, check.IsNil)
+               fis, err = f.Readdir(-1)
+               var names []string
+               for _, fi := range fis {
+                       names = append(names, fi.Name())
+               }
+               c.Check(names, check.DeepEquals, []string{"foo"})
+       }
+
+       f, err = s.fs.Open("/by_id/" + arvadostest.AProjectUUID + "/A Subproject/baz_file")
        c.Assert(err, check.IsNil)
        fis, err = f.Readdir(-1)
        var names []string
        for _, fi := range fis {
                names = append(names, fi.Name())
        }
-       c.Check(names, check.DeepEquals, []string{"foo"})
+       c.Check(names, check.DeepEquals, []string{"baz"})
 
        _, err = s.fs.OpenFile("/by_id/"+arvadostest.NonexistentCollection, os.O_RDWR|os.O_CREATE, 0755)
        c.Check(err, check.Equals, ErrInvalidOperation)
index 5fccfb3aa21d5cd348b2ccf309639cd9789ac881..a434690775089c38a092499ae79f7fa0fcdec0e0 100644 (file)
@@ -16,6 +16,7 @@ const (
        FederatedActiveUserUUID = "zbbbb-tpzed-xurymjxw79nv3jz"
        SpectatorUserUUID       = "zzzzz-tpzed-l1s2piq4t4mps8r"
        UserAgreementCollection = "zzzzz-4zz18-uukreo9rbgwsujr" // user_agreement_in_anonymously_accessible_project
+       FooCollectionName       = "zzzzz-4zz18-fy296fx3hot09f7 added sometime"
        FooCollection           = "zzzzz-4zz18-fy296fx3hot09f7"
        FooCollectionPDH        = "1f4b0bc7583c2a7f9102c395f4ffc5e3+45"
        NonexistentCollection   = "zzzzz-4zz18-totallynotexist"