Merge branch '16265-security-updates' into dependabot/bundler/apps/workbench/loofah...
[arvados.git] / services / arv-git-httpd / gitolite_test.go
index 84587302c7ac3a4a13c832c68fda36608c49a434..5f3cc608c3a9d360518dda68d47d1cde901cc459 100644 (file)
@@ -1,10 +1,18 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
 package main
 
 import (
+       "io/ioutil"
        "os"
        "os/exec"
-       "io/ioutil"
+       "strings"
 
+       "git.arvados.org/arvados.git/lib/config"
+       "git.arvados.org/arvados.git/sdk/go/arvados"
+       "git.arvados.org/arvados.git/sdk/go/ctxlog"
        check "gopkg.in/check.v1"
 )
 
@@ -26,7 +34,12 @@ func (s *GitoliteSuite) SetUpTest(c *check.C) {
                c.Log(prog, " ", args)
                cmd := exec.Command(prog, args...)
                cmd.Dir = s.gitoliteHome
-               cmd.Env = append(os.Environ(), "HOME=" + s.gitoliteHome)
+               cmd.Env = []string{"HOME=" + s.gitoliteHome}
+               for _, e := range os.Environ() {
+                       if !strings.HasPrefix(e, "HOME=") {
+                               cmd.Env = append(cmd.Env, e)
+                       }
+               }
                diags, err := cmd.CombinedOutput()
                c.Log(string(diags))
                c.Assert(err, check.Equals, nil)
@@ -35,20 +48,24 @@ func (s *GitoliteSuite) SetUpTest(c *check.C) {
        runGitolite("gitolite", "setup", "--admin", "root")
 
        s.tmpRepoRoot = s.gitoliteHome + "/repositories"
-       s.Config = &config{
-               Addr:       ":0",
-               GitCommand: "/usr/share/gitolite3/gitolite-shell",
-               Root:       s.tmpRepoRoot,
-       }
+
+       cfg, err := config.NewLoader(nil, ctxlog.TestLogger(c)).Load()
+       c.Assert(err, check.Equals, nil)
+       s.cluster, err = cfg.GetCluster("")
+       c.Assert(err, check.Equals, nil)
+
+       s.cluster.Services.GitHTTP.InternalURLs = map[arvados.URL]arvados.ServiceInstance{arvados.URL{Host: "localhost:0"}: arvados.ServiceInstance{}}
+       s.cluster.TLS.Insecure = true
+       s.cluster.Git.GitCommand = "/usr/share/gitolite3/gitolite-shell"
+       s.cluster.Git.GitoliteHome = s.gitoliteHome
+       s.cluster.Git.Repositories = s.tmpRepoRoot
+
        s.IntegrationSuite.SetUpTest(c)
 
        // Install the gitolite hooks in the bare repo we made in
        // (*IntegrationTest)SetUpTest() -- see 2.2.4 at
        // http://gitolite.com/gitolite/gitolite.html
        runGitolite("gitolite", "setup")
-
-       os.Setenv("GITOLITE_HTTP_HOME", s.gitoliteHome)
-       os.Setenv("GL_BYPASS_ACCESS_CHECKS", "1")
 }
 
 func (s *GitoliteSuite) TearDownTest(c *check.C) {
@@ -56,6 +73,10 @@ func (s *GitoliteSuite) TearDownTest(c *check.C) {
        // upgrade to Go 1.4.
        os.Setenv("GITOLITE_HTTP_HOME", "")
        os.Setenv("GL_BYPASS_ACCESS_CHECKS", "")
+       if s.gitoliteHome != "" {
+               err := os.RemoveAll(s.gitoliteHome)
+               c.Check(err, check.Equals, nil)
+       }
        s.IntegrationSuite.TearDownTest(c)
 }
 
@@ -70,24 +91,24 @@ func (s *GitoliteSuite) TestFetchUnreadable(c *check.C) {
 }
 
 func (s *GitoliteSuite) TestPush(c *check.C) {
-       err := s.RunGit(c, activeToken, "push", "active/foo.git")
+       err := s.RunGit(c, activeToken, "push", "active/foo.git", "master:gitolite-push")
        c.Check(err, check.Equals, nil)
 
        // Check that the commit hash appears in the gitolite log, as
        // assurance that the gitolite hooks really did run.
 
-       sha1, err := exec.Command("git", "--git-dir", s.tmpWorkdir + "/.git",
+       sha1, err := exec.Command("git", "--git-dir", s.tmpWorkdir+"/.git",
                "log", "-n1", "--format=%H").CombinedOutput()
        c.Logf("git-log in workdir: %q", string(sha1))
        c.Assert(err, check.Equals, nil)
        c.Assert(len(sha1), check.Equals, 41)
 
-       gitoliteLog, err := exec.Command("grep", "-r", string(sha1[:40]), s.gitoliteHome + "/.gitolite/logs").CombinedOutput()
+       gitoliteLog, err := exec.Command("grep", "-r", string(sha1[:40]), s.gitoliteHome+"/.gitolite/logs").CombinedOutput()
        c.Check(err, check.Equals, nil)
        c.Logf("gitolite log message: %q", string(gitoliteLog))
 }
 
 func (s *GitoliteSuite) TestPushUnwritable(c *check.C) {
-       err := s.RunGit(c, spectatorToken, "push", "active/foo.git")
-       c.Check(err, check.ErrorMatches, `.*HTTP code = 403.*`)
+       err := s.RunGit(c, spectatorToken, "push", "active/foo.git", "master:gitolite-push-fail")
+       c.Check(err, check.ErrorMatches, `.*HTTP (code = )?403.*`)
 }