Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/gitaly-hooks')
-rw-r--r--cmd/gitaly-hooks/hooks_test.go295
1 files changed, 122 insertions, 173 deletions
diff --git a/cmd/gitaly-hooks/hooks_test.go b/cmd/gitaly-hooks/hooks_test.go
index 002957471..bd2c9ffac 100644
--- a/cmd/gitaly-hooks/hooks_test.go
+++ b/cmd/gitaly-hooks/hooks_test.go
@@ -13,18 +13,20 @@ import (
"strings"
"testing"
- log "github.com/sirupsen/logrus"
"github.com/stretchr/testify/require"
"gitlab.com/gitlab-org/gitaly/internal/command"
"gitlab.com/gitlab-org/gitaly/internal/git"
"gitlab.com/gitlab-org/gitaly/internal/git/gittest"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/config"
+ "gitlab.com/gitlab-org/gitaly/internal/gitaly/config/auth"
+ internallog "gitlab.com/gitlab-org/gitaly/internal/gitaly/config/log"
gitalyhook "gitlab.com/gitlab-org/gitaly/internal/gitaly/hook"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/service/hook"
"gitlab.com/gitlab-org/gitaly/internal/gitaly/transaction"
gitalylog "gitlab.com/gitlab-org/gitaly/internal/log"
"gitlab.com/gitlab-org/gitaly/internal/praefect/metadata"
"gitlab.com/gitlab-org/gitaly/internal/testhelper"
+ "gitlab.com/gitlab-org/gitaly/internal/testhelper/testcfg"
"gitlab.com/gitlab-org/gitaly/proto/go/gitalypb"
"google.golang.org/grpc/reflection"
)
@@ -39,8 +41,8 @@ type proxyValues struct {
}
// envForHooks generates a set of environment variables for gitaly hooks
-func envForHooks(t testing.TB, gitlabShellDir string, repo *gitalypb.Repository, glHookValues glHookValues, proxyValues proxyValues, gitPushOptions ...string) []string {
- payload, err := git.NewHooksPayload(config.Config, repo, nil, nil, &git.ReceiveHooksPayload{
+func envForHooks(t testing.TB, cfg config.Cfg, repo *gitalypb.Repository, glHookValues glHookValues, proxyValues proxyValues, gitPushOptions ...string) []string {
+ payload, err := git.NewHooksPayload(cfg, repo, nil, nil, &git.ReceiveHooksPayload{
UserID: glHookValues.GLID,
Username: glHookValues.GLUsername,
Protocol: glHookValues.GLProtocol,
@@ -49,8 +51,8 @@ func envForHooks(t testing.TB, gitlabShellDir string, repo *gitalypb.Repository,
env := append(os.Environ(), []string{
payload,
- "GITALY_BIN_DIR=" + config.Config.BinDir,
- fmt.Sprintf("%s=%s", gitalylog.GitalyLogDirEnvKey, gitlabShellDir),
+ "GITALY_BIN_DIR=" + cfg.BinDir,
+ fmt.Sprintf("%s=%s", gitalylog.GitalyLogDirEnvKey, cfg.Logging.Dir),
}...)
env = append(env, gitPushOptions...)
@@ -83,73 +85,45 @@ func TestMain(m *testing.M) {
func testMain(m *testing.M) int {
defer testhelper.MustHaveNoChildProcess()
-
cleanup := testhelper.Configure()
defer cleanup()
-
- defer func(rubyDir string) {
- config.Config.Ruby.Dir = rubyDir
- }(config.Config.Ruby.Dir)
-
- rubyDir, err := filepath.Abs("../../ruby")
- if err != nil {
- log.Error(err)
- return 1
- }
-
- config.Config.Ruby.Dir = rubyDir
-
- testhelper.ConfigureGitalyHooksBinary(config.Config.BinDir)
- testhelper.ConfigureGitalySSH(config.Config.BinDir)
-
return m.Run()
}
func TestHooksPrePostWithSymlinkedStoragePath(t *testing.T) {
- defer func(cfg config.Cfg) {
- config.Config = cfg
- }(config.Config)
-
tempDir, cleanup := testhelper.TempDir(t)
defer cleanup()
- originalStoragePath := config.Config.Storages[0].Path
+ cfg, repo, repoPath := testcfg.BuildWithRepo(t)
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
+
+ originalStoragePath := cfg.Storages[0].Path
symlinkedStoragePath := filepath.Join(tempDir, "storage")
require.NoError(t, os.Symlink(originalStoragePath, symlinkedStoragePath))
+ cfg.Storages[0].Path = symlinkedStoragePath
- defer func() {
- config.Config.Storages[0].Path = originalStoragePath
- }()
- config.Config.Storages[0].Path = symlinkedStoragePath
-
- testHooksPrePostReceive(t)
+ testHooksPrePostReceive(t, cfg, repo, repoPath)
}
func TestHooksPrePostReceive(t *testing.T) {
- defer func(cfg config.Cfg) {
- config.Config = cfg
- }(config.Config)
-
- testHooksPrePostReceive(t)
+ cfg, repo, repoPath := testcfg.BuildWithRepo(t)
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
+ testHooksPrePostReceive(t, cfg, repo, repoPath)
}
-func testHooksPrePostReceive(t *testing.T) {
- testRepo, testRepoPath, cleanupFn := gittest.CloneRepo(t)
- defer cleanupFn()
-
+func testHooksPrePostReceive(t *testing.T, cfg config.Cfg, repo *gitalypb.Repository, repoPath string) {
secretToken := "secret token"
glID := "key-1234"
glUsername := "iamgitlab"
glProtocol := "ssh"
- tempGitlabShellDir, cleanup := testhelper.TempDir(t)
- defer cleanup()
-
changes := "abc"
gitPushOptions := []string{"gitpushoption1", "gitpushoption2"}
- gitObjectDir := filepath.Join(testRepoPath, "objects", "temp")
- gitAlternateObjectDirs := []string{(filepath.Join(testRepoPath, "objects"))}
+ gitObjectDir := filepath.Join(repoPath, "objects", "temp")
+ gitAlternateObjectDirs := []string{filepath.Join(repoPath, "objects")}
gitlabUser, gitlabPassword := "gitlab_user-1234", "gitlabsecret9887"
httpProxy, httpsProxy, noProxy := "http://test.example.com:8080", "https://test.example.com:8080", "*"
@@ -159,28 +133,22 @@ func testHooksPrePostReceive(t *testing.T) {
Password: gitlabPassword,
SecretToken: secretToken,
GLID: glID,
- GLRepository: testRepo.GetGlRepository(),
+ GLRepository: repo.GetGlRepository(),
Changes: changes,
PostReceiveCounterDecreased: true,
Protocol: "ssh",
GitPushOptions: gitPushOptions,
GitObjectDir: gitObjectDir,
GitAlternateObjectDirs: gitAlternateObjectDirs,
- RepoPath: testRepoPath,
+ RepoPath: repoPath,
}
- serverURL, cleanup := testhelper.NewGitlabTestServer(t, c)
+ gitlabURL, cleanup := testhelper.NewGitlabTestServer(t, c)
defer cleanup()
-
- config.Config.GitlabShell.Dir = tempGitlabShellDir
-
- testhelper.WriteShellSecretFile(t, tempGitlabShellDir, secretToken)
-
- config.Config.Gitlab.URL = serverURL
- config.Config.Gitlab.SecretFile = filepath.Join(tempGitlabShellDir, ".gitlab_shell_secret")
- config.Config.Gitlab.HTTPSettings.User = gitlabUser
- config.Config.Gitlab.HTTPSettings.Password = gitlabPassword
- config.Config.Auth.Token = "abc123"
+ cfg.Gitlab.URL = gitlabURL
+ cfg.Gitlab.SecretFile = testhelper.WriteShellSecretFile(t, cfg.GitlabShell.Dir, secretToken)
+ cfg.Gitlab.HTTPSettings.User = gitlabUser
+ cfg.Gitlab.HTTPSettings.Password = gitlabPassword
gitObjectDirRegex := regexp.MustCompile(`(?m)^GIT_OBJECT_DIRECTORY=(.*)$`)
gitAlternateObjectDirRegex := regexp.MustCompile(`(?m)^GIT_ALTERNATE_OBJECT_DIRECTORIES=(.*)$`)
@@ -189,18 +157,13 @@ func testHooksPrePostReceive(t *testing.T) {
for _, hookName := range hookNames {
t.Run(fmt.Sprintf("hookName: %s", hookName), func(t *testing.T) {
- customHookOutputPath, cleanup := gittest.WriteEnvToCustomHook(t, testRepoPath, hookName)
+ customHookOutputPath, cleanup := gittest.WriteEnvToCustomHook(t, repoPath, hookName)
defer cleanup()
- config.Config.Gitlab.URL = serverURL
- config.Config.Gitlab.SecretFile = filepath.Join(tempGitlabShellDir, ".gitlab_shell_secret")
- config.Config.Gitlab.HTTPSettings.User = gitlabUser
- config.Config.Gitlab.HTTPSettings.Password = gitlabPassword
-
- gitlabAPI, err := gitalyhook.NewGitlabAPI(config.Config.Gitlab, config.Config.TLS)
+ gitlabAPI, err := gitalyhook.NewGitlabAPI(cfg.Gitlab, cfg.TLS)
require.NoError(t, err)
- stop := runHookServiceServerWithAPI(t, gitlabAPI)
+ stop := runHookServiceServerWithAPI(t, cfg, gitlabAPI)
defer stop()
var stderr, stdout bytes.Buffer
@@ -213,8 +176,8 @@ func testHooksPrePostReceive(t *testing.T) {
cmd.Stdin = stdin
cmd.Env = envForHooks(
t,
- tempGitlabShellDir,
- testRepo,
+ cfg,
+ repo,
glHookValues{
GLID: glID,
GLUsername: glUsername,
@@ -232,7 +195,7 @@ func testHooksPrePostReceive(t *testing.T) {
"GIT_PUSH_OPTION_1=gitpushoption2",
)
- cmd.Dir = testRepoPath
+ cmd.Dir = repoPath
require.NoError(t, cmd.Run())
require.Empty(t, stderr.String())
@@ -241,7 +204,7 @@ func testHooksPrePostReceive(t *testing.T) {
output := string(testhelper.MustReadFile(t, customHookOutputPath))
requireContainsOnce(t, output, "GL_USERNAME="+glUsername)
requireContainsOnce(t, output, "GL_ID="+glID)
- requireContainsOnce(t, output, "GL_REPOSITORY="+testRepo.GetGlRepository())
+ requireContainsOnce(t, output, "GL_REPOSITORY="+repo.GetGlRepository())
requireContainsOnce(t, output, "GL_PROTOCOL="+glProtocol)
requireContainsOnce(t, output, "GIT_PUSH_OPTION_COUNT=2")
requireContainsOnce(t, output, "GIT_PUSH_OPTION_0=gitpushoption1")
@@ -269,54 +232,44 @@ func testHooksPrePostReceive(t *testing.T) {
}
func TestHooksUpdate(t *testing.T) {
- defer func(cfg config.Cfg) {
- config.Config = cfg
- }(config.Config)
-
glID := "key-1234"
glUsername := "iamgitlab"
glProtocol := "ssh"
- tempGitlabShellDir, cleanup := testhelper.TempDir(t)
- defer cleanup()
-
customHooksDir, cleanup := testhelper.TempDir(t)
defer cleanup()
- os.Symlink(filepath.Join(config.Config.GitlabShell.Dir, "config.yml"), filepath.Join(tempGitlabShellDir, "config.yml"))
+ cfg := testcfg.Build(t, testcfg.WithBase(config.Cfg{
+ Auth: auth.Config{Token: "abc123"},
+ Hooks: config.Hooks{CustomHooksDir: customHooksDir},
+ }))
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
- testhelper.WriteShellSecretFile(t, tempGitlabShellDir, "the wrong token")
+ os.Symlink(filepath.Join(cfg.GitlabShell.Dir, "config.yml"), filepath.Join(cfg.GitlabShell.Dir, "config.yml"))
- config.Config.GitlabShell.Dir = tempGitlabShellDir
+ cfg.Gitlab.SecretFile = testhelper.WriteShellSecretFile(t, cfg.GitlabShell.Dir, "the wrong token")
- token := "abc123"
- stop := runHookServiceServer(t, token)
+ stop := runHookServiceServer(t, cfg)
defer stop()
- config.Config.Hooks.CustomHooksDir = customHooksDir
-
- testHooksUpdate(t, tempGitlabShellDir, token, glHookValues{
+ testHooksUpdate(t, cfg, glHookValues{
GLID: glID,
GLUsername: glUsername,
GLProtocol: glProtocol,
})
}
-func testHooksUpdate(t *testing.T, gitlabShellDir, token string, glValues glHookValues) {
- defer func(cfg config.Cfg) {
- config.Config = cfg
- }(config.Config)
- config.Config.Auth.Token = token
-
- testRepo, testRepoPath, cleanupFn := gittest.CloneRepo(t)
- defer cleanupFn()
+func testHooksUpdate(t *testing.T, cfg config.Cfg, glValues glHookValues) {
+ repo, repoPath, cleanup := gittest.CloneRepoAtStorage(t, cfg.Storages[0], t.Name())
+ t.Cleanup(cleanup)
refval, oldval, newval := "refval", strings.Repeat("a", 40), strings.Repeat("b", 40)
updateHookPath, err := filepath.Abs("../../ruby/git-hooks/update")
require.NoError(t, err)
cmd := exec.Command(updateHookPath, refval, oldval, newval)
- cmd.Env = envForHooks(t, gitlabShellDir, testRepo, glValues, proxyValues{})
- cmd.Dir = testRepoPath
+ cmd.Env = envForHooks(t, cfg, repo, glValues, proxyValues{})
+ cmd.Dir = repoPath
tempDir, cleanup := testhelper.TempDir(t)
defer cleanup()
@@ -327,18 +280,18 @@ require 'json'
open('%s', 'w') { |f| f.puts(JSON.dump(ARGV)) }
`, customHookArgsPath)
// write a custom hook to path/to/repo.git/custom_hooks/update.d/dumpargsscript which dumps the args into a tempfile
- cleanup = testhelper.WriteExecutable(t, filepath.Join(testRepoPath, "custom_hooks", "update.d", "dumpargsscript"), []byte(dumpArgsToTempfileScript))
+ cleanup = testhelper.WriteExecutable(t, filepath.Join(repoPath, "custom_hooks", "update.d", "dumpargsscript"), []byte(dumpArgsToTempfileScript))
defer cleanup()
// write a custom hook to path/to/repo.git/custom_hooks/update which dumps the env into a tempfile
- customHookOutputPath, cleanup := gittest.WriteEnvToCustomHook(t, testRepoPath, "update")
+ customHookOutputPath, cleanup := gittest.WriteEnvToCustomHook(t, repoPath, "update")
defer cleanup()
var stdout, stderr bytes.Buffer
cmd.Stdout = &stdout
cmd.Stderr = &stderr
- cmd.Dir = testRepoPath
+ cmd.Dir = repoPath
require.NoError(t, cmd.Run())
require.Empty(t, stdout.String())
@@ -356,25 +309,20 @@ open('%s', 'w') { |f| f.puts(JSON.dump(ARGV)) }
output := string(testhelper.MustReadFile(t, customHookOutputPath))
require.Contains(t, output, "GL_USERNAME="+glValues.GLUsername)
require.Contains(t, output, "GL_ID="+glValues.GLID)
- require.Contains(t, output, "GL_REPOSITORY="+testRepo.GetGlRepository())
+ require.Contains(t, output, "GL_REPOSITORY="+repo.GetGlRepository())
require.Contains(t, output, "GL_PROTOCOL="+glValues.GLProtocol)
}
func TestHooksPostReceiveFailed(t *testing.T) {
- defer func(cfg config.Cfg) {
- config.Config = cfg
- }(config.Config)
secretToken := "secret token"
glID := "key-1234"
glUsername := "iamgitlab"
glProtocol := "ssh"
changes := "oldhead newhead"
- tempGitlabShellDir, cleanup := testhelper.TempDir(t)
- defer cleanup()
-
- testRepo, testRepoPath, cleanupFn := gittest.CloneRepo(t)
- defer cleanupFn()
+ cfg, repo, repoPath := testcfg.BuildWithRepo(t, testcfg.WithBase(config.Cfg{Auth: auth.Config{Token: "abc123"}}))
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
// By setting the last parameter to false, the post-receive API call will
// send back {"reference_counter_increased": false}, indicating something went wrong
@@ -386,27 +334,22 @@ func TestHooksPostReceiveFailed(t *testing.T) {
SecretToken: secretToken,
Changes: changes,
GLID: glID,
- GLRepository: testRepo.GetGlRepository(),
+ GLRepository: repo.GetGlRepository(),
PostReceiveCounterDecreased: false,
Protocol: "ssh",
}
serverURL, cleanup := testhelper.NewGitlabTestServer(t, c)
defer cleanup()
+ cfg.Gitlab.URL = serverURL
+ cfg.Gitlab.SecretFile = testhelper.WriteShellSecretFile(t, cfg.GitlabShell.Dir, secretToken)
- testhelper.WriteShellSecretFile(t, tempGitlabShellDir, secretToken)
-
- config.Config.GitlabShell.Dir = tempGitlabShellDir
- config.Config.Gitlab.URL = serverURL
- config.Config.Gitlab.SecretFile = filepath.Join(tempGitlabShellDir, ".gitlab_shell_secret")
- config.Config.Auth.Token = "abc123"
-
- gitlabAPI, err := gitalyhook.NewGitlabAPI(config.Config.Gitlab, config.Config.TLS)
+ gitlabAPI, err := gitalyhook.NewGitlabAPI(cfg.Gitlab, cfg.TLS)
require.NoError(t, err)
- stop := runHookServiceServerWithAPI(t, gitlabAPI)
+ stop := runHookServiceServerWithAPI(t, cfg, gitlabAPI)
defer stop()
- customHookOutputPath, cleanup := gittest.WriteEnvToCustomHook(t, testRepoPath, "post-receive")
+ customHookOutputPath, cleanup := gittest.WriteEnvToCustomHook(t, repoPath, "post-receive")
defer cleanup()
var stdout, stderr bytes.Buffer
@@ -454,8 +397,8 @@ func TestHooksPostReceiveFailed(t *testing.T) {
for _, tc := range testcases {
t.Run(tc.desc, func(t *testing.T) {
hooksPayload, err := git.NewHooksPayload(
- config.Config,
- testRepo,
+ cfg,
+ repo,
&metadata.Transaction{
ID: 1,
Node: "node",
@@ -474,7 +417,7 @@ func TestHooksPostReceiveFailed(t *testing.T) {
).Env()
require.NoError(t, err)
- env := envForHooks(t, tempGitlabShellDir, testRepo, glHookValues{}, proxyValues{})
+ env := envForHooks(t, cfg, repo, glHookValues{}, proxyValues{})
env = append(env, hooksPayload)
cmd := exec.Command(postReceiveHookPath)
@@ -482,7 +425,7 @@ func TestHooksPostReceiveFailed(t *testing.T) {
cmd.Stdout = &stdout
cmd.Stderr = &stderr
cmd.Stdin = bytes.NewBuffer([]byte(changes))
- cmd.Dir = testRepoPath
+ cmd.Dir = repoPath
tc.verify(t, cmd, &stdout, &stderr)
})
@@ -490,28 +433,22 @@ func TestHooksPostReceiveFailed(t *testing.T) {
}
func TestHooksNotAllowed(t *testing.T) {
- defer func(cfg config.Cfg) {
- config.Config = cfg
- }(config.Config)
-
secretToken := "secret token"
glID := "key-1234"
glUsername := "iamgitlab"
glProtocol := "ssh"
changes := "oldhead newhead"
- tempGitlabShellDir, cleanup := testhelper.TempDir(t)
- defer cleanup()
-
- testRepo, testRepoPath, cleanupFn := gittest.CloneRepo(t)
- defer cleanupFn()
+ cfg, repo, repoPath := testcfg.BuildWithRepo(t, testcfg.WithBase(config.Cfg{Auth: auth.Config{Token: "abc123"}}))
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
c := testhelper.GitlabTestServerOptions{
User: "",
Password: "",
SecretToken: secretToken,
GLID: glID,
- GLRepository: testRepo.GetGlRepository(),
+ GLRepository: repo.GetGlRepository(),
Changes: changes,
PostReceiveCounterDecreased: true,
Protocol: "ssh",
@@ -519,20 +456,16 @@ func TestHooksNotAllowed(t *testing.T) {
serverURL, cleanup := testhelper.NewGitlabTestServer(t, c)
defer cleanup()
- testhelper.WriteShellSecretFile(t, tempGitlabShellDir, "the wrong token")
-
- config.Config.GitlabShell.Dir = tempGitlabShellDir
- config.Config.Gitlab.URL = serverURL
- config.Config.Gitlab.SecretFile = filepath.Join(tempGitlabShellDir, ".gitlab_shell_secret")
- config.Config.Auth.Token = "abc123"
+ cfg.Gitlab.URL = serverURL
+ cfg.Gitlab.SecretFile = testhelper.WriteShellSecretFile(t, cfg.GitlabShell.Dir, "the wrong token")
- customHookOutputPath, cleanup := gittest.WriteEnvToCustomHook(t, testRepoPath, "post-receive")
+ customHookOutputPath, cleanup := gittest.WriteEnvToCustomHook(t, repoPath, "post-receive")
defer cleanup()
- gitlabAPI, err := gitalyhook.NewGitlabAPI(config.Config.Gitlab, config.Config.TLS)
+ gitlabAPI, err := gitalyhook.NewGitlabAPI(cfg.Gitlab, cfg.TLS)
require.NoError(t, err)
- stop := runHookServiceServerWithAPI(t, gitlabAPI)
+ stop := runHookServiceServerWithAPI(t, cfg, gitlabAPI)
defer stop()
var stderr, stdout bytes.Buffer
@@ -543,14 +476,14 @@ func TestHooksNotAllowed(t *testing.T) {
cmd.Stderr = &stderr
cmd.Stdout = &stdout
cmd.Stdin = strings.NewReader(changes)
- cmd.Env = envForHooks(t, tempGitlabShellDir, testRepo,
+ cmd.Env = envForHooks(t, cfg, repo,
glHookValues{
GLID: glID,
GLUsername: glUsername,
GLProtocol: glProtocol,
},
proxyValues{})
- cmd.Dir = testRepoPath
+ cmd.Dir = repoPath
require.Error(t, cmd.Run())
require.Equal(t, "GitLab: 401 Unauthorized\n", stderr.String())
@@ -585,7 +518,11 @@ func TestCheckOK(t *testing.T) {
configPath, cleanup := testhelper.WriteTemporaryGitalyConfigFile(t, tempDir, serverURL, user, password, path.Join(gitlabShellDir, ".gitlab_shell_secret"))
defer cleanup()
- cmd := exec.Command(filepath.Join(config.Config.BinDir, "gitaly-hooks"), "check", configPath)
+ cfg := testcfg.Build(t)
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
+
+ cmd := exec.Command(filepath.Join(cfg.BinDir, "gitaly-hooks"), "check", configPath)
var stderr, stdout bytes.Buffer
cmd.Stderr = &stderr
@@ -626,7 +563,11 @@ func TestCheckBadCreds(t *testing.T) {
configPath, cleanup := testhelper.WriteTemporaryGitalyConfigFile(t, tempDir, serverURL, "wrong", password, path.Join(gitlabShellDir, ".gitlab_shell_secret"))
defer cleanup()
- cmd := exec.Command(filepath.Join(config.Config.BinDir, "gitaly-hooks"), "check", configPath)
+ cfg := testcfg.Build(t)
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
+
+ cmd := exec.Command(filepath.Join(cfg.BinDir, "gitaly-hooks"), "check", configPath)
var stderr, stdout bytes.Buffer
cmd.Stderr = &stderr
@@ -637,17 +578,17 @@ func TestCheckBadCreds(t *testing.T) {
require.Regexp(t, `Checking GitLab API access: .* level=error msg="Internal API error" .* error="authorization failed" method=GET status=401 url="http://127.0.0.1:[0-9]+/api/v4/internal/check"\nFAIL`, stdout.String())
}
-func runHookServiceServer(t *testing.T, token string) func() {
- return runHookServiceServerWithAPI(t, gitalyhook.GitlabAPIStub)
+func runHookServiceServer(t *testing.T, cfg config.Cfg) func() {
+ return runHookServiceServerWithAPI(t, cfg, gitalyhook.GitlabAPIStub)
}
-func runHookServiceServerWithAPI(t *testing.T, gitlabAPI gitalyhook.GitlabAPI) func() {
- txManager := transaction.NewManager(config.Config)
- hookManager := gitalyhook.NewManager(config.NewLocator(config.Config), txManager, gitlabAPI, config.Config)
- gitCmdFactory := git.NewExecCommandFactory(config.Config)
- server := testhelper.NewServerWithAuth(t, nil, nil, config.Config.Auth.Token, testhelper.WithInternalSocket(config.Config))
+func runHookServiceServerWithAPI(t *testing.T, cfg config.Cfg, gitlabAPI gitalyhook.GitlabAPI) func() {
+ txManager := transaction.NewManager(cfg)
+ hookManager := gitalyhook.NewManager(config.NewLocator(cfg), txManager, gitlabAPI, cfg)
+ gitCmdFactory := git.NewExecCommandFactory(cfg)
+ server := testhelper.NewServerWithAuth(t, nil, nil, cfg.Auth.Token, testhelper.WithInternalSocket(cfg))
- gitalypb.RegisterHookServiceServer(server.GrpcServer(), hook.NewServer(config.Config, hookManager, gitCmdFactory))
+ gitalypb.RegisterHookServiceServer(server.GrpcServer(), hook.NewServer(cfg, hookManager, gitCmdFactory))
reflection.Register(server.GrpcServer())
server.Start(t)
@@ -678,27 +619,27 @@ func TestFixFilterQuoteBug(t *testing.T) {
}
func TestGitalyHooksPackObjects(t *testing.T) {
- defer func(cfg config.Cfg) {
- config.Config = cfg
- }(config.Config)
-
- config.Config.Auth.Token = "abc123"
- defer runHookServiceServer(t, config.Config.Auth.Token)()
-
- testRepo, testRepoPath, cleanupFn := gittest.CloneRepo(t)
- defer cleanupFn()
-
logDir, err := filepath.Abs("testdata")
require.NoError(t, err)
require.NoError(t, os.MkdirAll(logDir, 0755))
- env := envForHooks(t, logDir, testRepo, glHookValues{}, proxyValues{})
+ cfg, repo, repoPath := testcfg.BuildWithRepo(t, testcfg.WithBase(config.Cfg{
+ Auth: auth.Config{Token: "abc123"},
+ Logging: config.Logging{Config: internallog.Config{Dir: logDir}},
+ }))
+
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
+
+ defer runHookServiceServer(t, cfg)()
+
+ env := envForHooks(t, cfg, repo, glHookValues{}, proxyValues{})
baseArgs := []string{
- config.Config.Git.BinPath,
+ cfg.Git.BinPath,
"clone",
"-u",
- "git -c uploadpack.allowFilter -c uploadpack.packObjectsHook=" + config.Config.BinDir + "/gitaly-hooks upload-pack",
+ "git -c uploadpack.allowFilter -c uploadpack.packObjectsHook=" + cfg.BinDir + "/gitaly-hooks upload-pack",
"--quiet",
"--no-local",
"--bare",
@@ -719,7 +660,7 @@ func TestGitalyHooksPackObjects(t *testing.T) {
defer cleanTempDir()
args := append(baseArgs[1:], tc.extraArgs...)
- args = append(args, testRepoPath, tempDir)
+ args = append(args, repoPath, tempDir)
cmd := exec.Command(baseArgs[0], args...)
cmd.Env = env
cmd.Stderr = os.Stderr
@@ -739,19 +680,27 @@ func TestRequestedHooks(t *testing.T) {
} {
t.Run(hookName, func(t *testing.T) {
t.Run("unrequested hook is ignored", func(t *testing.T) {
- payload, err := git.NewHooksPayload(config.Config, &gitalypb.Repository{}, nil, nil, nil, git.AllHooks&^hook).Env()
+ cfg := testcfg.Build(t)
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
+
+ payload, err := git.NewHooksPayload(cfg, &gitalypb.Repository{}, nil, nil, nil, git.AllHooks&^hook).Env()
require.NoError(t, err)
- cmd := exec.Command(filepath.Join(config.Config.BinDir, "gitaly-hooks"), hookName)
+ cmd := exec.Command(filepath.Join(cfg.BinDir, "gitaly-hooks"), hookName)
cmd.Env = []string{payload}
require.NoError(t, cmd.Run())
})
t.Run("requested hook runs", func(t *testing.T) {
- payload, err := git.NewHooksPayload(config.Config, &gitalypb.Repository{}, nil, nil, nil, hook).Env()
+ cfg := testcfg.Build(t)
+ testhelper.ConfigureGitalyHooksBin(t, cfg)
+ testhelper.ConfigureGitalySSHBin(t, cfg)
+
+ payload, err := git.NewHooksPayload(cfg, &gitalypb.Repository{}, nil, nil, nil, hook).Env()
require.NoError(t, err)
- cmd := exec.Command(filepath.Join(config.Config.BinDir, "gitaly-hooks"), hookName)
+ cmd := exec.Command(filepath.Join(cfg.BinDir, "gitaly-hooks"), hookName)
cmd.Env = []string{payload}
// We simply check that there is an error here as an indicator that