8 check "gopkg.in/check.v1"
11 var _ = check.Suite(&GitoliteSuite{})
13 // GitoliteSuite tests need an API server, an arv-git-httpd server,
14 // and a repository hosted by gitolite.
15 type GitoliteSuite struct {
16 serverSuite IntegrationSuite
20 func (s *GitoliteSuite) SetUpTest(c *check.C) {
22 s.gitoliteHome, err = ioutil.TempDir("", "arv-git-httpd")
23 c.Assert(err, check.Equals, nil)
25 runGitolite := func(prog string, args ...string) {
26 c.Log(prog, " ", args)
27 cmd := exec.Command(prog, args...)
28 cmd.Dir = s.gitoliteHome
29 cmd.Env = append(os.Environ(), "HOME=" + s.gitoliteHome)
30 diags, err := cmd.CombinedOutput()
32 c.Assert(err, check.Equals, nil)
35 runGitolite("gitolite", "setup", "--admin", "root")
37 s.serverSuite.tmpRepoRoot = s.gitoliteHome + "/repositories"
38 s.serverSuite.Config = &config{
40 GitCommand: "/usr/share/gitolite3/gitolite-shell",
41 Root: s.serverSuite.tmpRepoRoot,
43 s.serverSuite.SetUpTest(c)
45 // Install the gitolite hooks in the bare repo we made in
46 // s.serverSuite.SetUpTest() -- see 2.2.4 at
47 // http://gitolite.com/gitolite/gitolite.html
48 runGitolite("gitolite", "setup")
50 os.Setenv("GITOLITE_HTTP_HOME", s.gitoliteHome)
51 os.Setenv("GL_BYPASS_ACCESS_CHECKS", "1")
54 func (s *GitoliteSuite) TearDownTest(c *check.C) {
55 s.serverSuite.TearDownTest(c)
58 func (s *GitoliteSuite) TestFetch(c *check.C) {
59 err := s.serverSuite.runGit(c, activeToken, "fetch", "active/foo.git")
60 c.Check(err, check.Equals, nil)
63 func (s *GitoliteSuite) TestFetchUnreadable(c *check.C) {
64 err := s.serverSuite.runGit(c, anonymousToken, "fetch", "active/foo.git")
65 c.Check(err, check.ErrorMatches, `.* not found.*`)
68 func (s *GitoliteSuite) TestPush(c *check.C) {
69 err := s.serverSuite.runGit(c, activeToken, "push", "active/foo.git")
70 c.Check(err, check.Equals, nil)
72 // Check that the commit hash appears in the gitolite log, as
73 // assurance that the gitolite hooks really did run.
75 sha1, err := exec.Command("git", "--git-dir", s.serverSuite.tmpWorkdir + "/.git",
76 "log", "-n1", "--format=%H").CombinedOutput()
77 c.Logf("git-log in workdir: %q", string(sha1))
78 c.Assert(err, check.Equals, nil)
79 c.Assert(len(sha1), check.Equals, 41)
81 gitoliteLog, err := exec.Command("grep", "-r", string(sha1[:40]), s.gitoliteHome + "/.gitolite/logs").CombinedOutput()
82 c.Check(err, check.Equals, nil)
83 c.Logf("gitolite log message: %q", string(gitoliteLog))
86 func (s *GitoliteSuite) TestPushUnwritable(c *check.C) {
87 err := s.serverSuite.runGit(c, spectatorToken, "push", "active/foo.git")
88 c.Check(err, check.ErrorMatches, `.*HTTP code = 403.*`)