X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/4343e1f1035baaa22f117d119c6e6bc35b1e385b..85f6919fae720c41474e60f5c21710f70e446070:/services/crunch-run/git_mount_test.go diff --git a/services/crunch-run/git_mount_test.go b/services/crunch-run/git_mount_test.go index 4c6ce7f075..4dc95bc3df 100644 --- a/services/crunch-run/git_mount_test.go +++ b/services/crunch-run/git_mount_test.go @@ -22,15 +22,10 @@ type GitMountSuite struct { var _ = check.Suite(&GitMountSuite{}) -func (s *GitMountSuite) SetUpSuite(c *check.C) { - git_client.InstallProtocol("https", git_http.NewClient(arvados.InsecureHTTPClient)) -} - func (s *GitMountSuite) SetUpTest(c *check.C) { - port, err := ioutil.ReadFile("../../tmp/arv-git-httpd-ssl.port") - c.Assert(err, check.IsNil) - discoveryMap["gitUrl"] = "https://localhost:" + string(port) + s.useTestGitServer(c) + var err error s.tmpdir, err = ioutil.TempDir("", "") c.Assert(err, check.IsNil) } @@ -47,7 +42,7 @@ func (s *GitMountSuite) TestextractTree(c *check.C) { UUID: arvadostest.Repository2UUID, Commit: "fd3531f42995344f36c30b79f55f27b502f3d344", } - err := gm.extractTree(&ArvTestClient{}, s.tmpdir) + err := gm.extractTree(&ArvTestClient{}, s.tmpdir, arvadostest.ActiveToken) c.Check(err, check.IsNil) fnm := filepath.Join(s.tmpdir, "dir1/dir2/file with mode 0644") @@ -72,17 +67,22 @@ func (s *GitMountSuite) TestextractTree(c *check.C) { // Ensure there's no extra stuff like a ".git" dir s.checkTmpdirContents(c, []string{"dir1"}) + + // Ensure tmpdir is world-readable and world-executable so the + // UID inside the container can use it. + fi, err = os.Stat(s.tmpdir) + c.Check(err, check.IsNil) + c.Check(fi.Mode()&os.ModePerm, check.Equals, os.FileMode(0755)) } // Commit 5ebfab0 is not the tip of any branch or tag, but is // reachable in branch "crunch-run-non-tip-test". func (s *GitMountSuite) TestExtractNonTipCommit(c *check.C) { gm := gitMount{ - Path: "/", UUID: arvadostest.Repository2UUID, Commit: "5ebfab0522851df01fec11ec55a6d0f4877b542e", } - err := gm.extractTree(&ArvTestClient{}, s.tmpdir) + err := gm.extractTree(&ArvTestClient{}, s.tmpdir, arvadostest.ActiveToken) c.Check(err, check.IsNil) fnm := filepath.Join(s.tmpdir, "file only on testbranch") @@ -97,7 +97,7 @@ func (s *GitMountSuite) TestNonexistentRepository(c *check.C) { UUID: "zzzzz-s0uqq-nonexistentrepo", Commit: "5ebfab0522851df01fec11ec55a6d0f4877b542e", } - err := gm.extractTree(&ArvTestClient{}, s.tmpdir) + err := gm.extractTree(&ArvTestClient{}, s.tmpdir, arvadostest.ActiveToken) c.Check(err, check.NotNil) c.Check(err, check.ErrorMatches, ".*repository not found.*") @@ -110,13 +110,24 @@ func (s *GitMountSuite) TestNonexistentCommit(c *check.C) { UUID: arvadostest.Repository2UUID, Commit: "bb66b6bb6b6bbb6b6b6b66b6b6b6b6b6b6b6b66b", } - err := gm.extractTree(&ArvTestClient{}, s.tmpdir) + err := gm.extractTree(&ArvTestClient{}, s.tmpdir, arvadostest.ActiveToken) c.Check(err, check.NotNil) c.Check(err, check.ErrorMatches, ".*object not found.*") s.checkTmpdirContents(c, []string{}) } +func (s *GitMountSuite) TestGitUrlDiscoveryFails(c *check.C) { + delete(discoveryMap, "gitUrl") + gm := gitMount{ + Path: "/", + UUID: arvadostest.Repository2UUID, + Commit: "5ebfab0522851df01fec11ec55a6d0f4877b542e", + } + err := gm.extractTree(&ArvTestClient{}, s.tmpdir, arvadostest.ActiveToken) + c.Check(err, check.ErrorMatches, ".*gitUrl.*") +} + func (s *GitMountSuite) TestInvalid(c *check.C) { for _, trial := range []struct { gm gitMount @@ -128,7 +139,24 @@ func (s *GitMountSuite) TestInvalid(c *check.C) { UUID: arvadostest.Repository2UUID, Commit: "abc123", }, - matcher: ".*sha1.*", + matcher: ".*SHA1.*", + }, + { + gm: gitMount{ + Path: "/", + UUID: arvadostest.Repository2UUID, + RepositoryName: arvadostest.Repository2Name, + Commit: "5ebfab0522851df01fec11ec55a6d0f4877b542e", + }, + matcher: ".*repository_name.*", + }, + { + gm: gitMount{ + Path: "/", + GitURL: "https://localhost:0/" + arvadostest.Repository2Name + ".git", + Commit: "5ebfab0522851df01fec11ec55a6d0f4877b542e", + }, + matcher: ".*git_url.*", }, { gm: gitMount{ @@ -145,12 +173,21 @@ func (s *GitMountSuite) TestInvalid(c *check.C) { }, matcher: ".*UUID.*", }, + { + gm: gitMount{ + Path: "/", + UUID: arvadostest.Repository2UUID, + Commit: "5ebfab0522851df01fec11ec55a6d0f4877b542e", + Writable: true, + }, + matcher: ".*writable.*", + }, } { - err := trial.gm.extractTree(&ArvTestClient{}, s.tmpdir) + err := trial.gm.extractTree(&ArvTestClient{}, s.tmpdir, arvadostest.ActiveToken) c.Check(err, check.NotNil) s.checkTmpdirContents(c, []string{}) - err := trial.gm.validate() + err = trial.gm.validate() c.Check(err, check.ErrorMatches, trial.matcher) } } @@ -162,3 +199,11 @@ func (s *GitMountSuite) checkTmpdirContents(c *check.C, expect []string) { c.Check(err, check.IsNil) c.Check(names, check.DeepEquals, expect) } + +func (*GitMountSuite) useTestGitServer(c *check.C) { + git_client.InstallProtocol("https", git_http.NewClient(arvados.InsecureHTTPClient)) + + port, err := ioutil.ReadFile("../../tmp/arv-git-httpd-ssl.port") + c.Assert(err, check.IsNil) + discoveryMap["gitUrl"] = "https://localhost:" + string(port) +}