8442: Adding --submit support with --crunch2. General refactoring into more/smaller...
[arvados.git] / services / arv-git-httpd / gitolite_test.go
index 9596ecd96dd5531e52dc27da3b5819605ebe196e..20bdae7ec13a5534ebd4f69248869d4980688fa7 100644 (file)
@@ -1,9 +1,10 @@
 package main
 
 import (
+       "io/ioutil"
        "os"
        "os/exec"
-       "io/ioutil"
+       "strings"
 
        check "gopkg.in/check.v1"
 )
@@ -13,7 +14,7 @@ var _ = check.Suite(&GitoliteSuite{})
 // GitoliteSuite tests need an API server, an arv-git-httpd server,
 // and a repository hosted by gitolite.
 type GitoliteSuite struct {
-       serverSuite  IntegrationSuite
+       IntegrationSuite
        gitoliteHome string
 }
 
@@ -26,7 +27,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)
@@ -34,16 +40,16 @@ func (s *GitoliteSuite) SetUpTest(c *check.C) {
 
        runGitolite("gitolite", "setup", "--admin", "root")
 
-       s.serverSuite.tmpRepoRoot = s.gitoliteHome + "/repositories"
-       s.serverSuite.Config = &config{
+       s.tmpRepoRoot = s.gitoliteHome + "/repositories"
+       s.Config = &config{
                Addr:       ":0",
                GitCommand: "/usr/share/gitolite3/gitolite-shell",
-               Root:       s.serverSuite.tmpRepoRoot,
+               Root:       s.tmpRepoRoot,
        }
-       s.serverSuite.SetUpTest(c)
+       s.IntegrationSuite.SetUpTest(c)
 
        // Install the gitolite hooks in the bare repo we made in
-       // s.serverSuite.SetUpTest() -- see 2.2.4 at
+       // (*IntegrationTest)SetUpTest() -- see 2.2.4 at
        // http://gitolite.com/gitolite/gitolite.html
        runGitolite("gitolite", "setup")
 
@@ -52,38 +58,42 @@ func (s *GitoliteSuite) SetUpTest(c *check.C) {
 }
 
 func (s *GitoliteSuite) TearDownTest(c *check.C) {
-       s.serverSuite.TearDownTest(c)
+       // We really want Unsetenv here, but it's not worth forcing an
+       // upgrade to Go 1.4.
+       os.Setenv("GITOLITE_HTTP_HOME", "")
+       os.Setenv("GL_BYPASS_ACCESS_CHECKS", "")
+       s.IntegrationSuite.TearDownTest(c)
 }
 
 func (s *GitoliteSuite) TestFetch(c *check.C) {
-       err := s.serverSuite.runGit(c, activeToken, "fetch", "active/foo.git")
+       err := s.RunGit(c, activeToken, "fetch", "active/foo.git")
        c.Check(err, check.Equals, nil)
 }
 
 func (s *GitoliteSuite) TestFetchUnreadable(c *check.C) {
-       err := s.serverSuite.runGit(c, anonymousToken, "fetch", "active/foo.git")
+       err := s.RunGit(c, anonymousToken, "fetch", "active/foo.git")
        c.Check(err, check.ErrorMatches, `.* not found.*`)
 }
 
 func (s *GitoliteSuite) TestPush(c *check.C) {
-       err := s.serverSuite.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.serverSuite.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.serverSuite.runGit(c, spectatorToken, "push", "active/foo.git")
+       err := s.RunGit(c, spectatorToken, "push", "active/foo.git", "master:gitolite-push-fail")
        c.Check(err, check.ErrorMatches, `.*HTTP code = 403.*`)
 }