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:
authorJohn Cai <jcai@gitlab.com>2020-05-13 23:05:10 +0300
committerJohn Cai <jcai@gitlab.com>2020-06-02 00:13:02 +0300
commit14f336ba80a96b993b0c2e637f900549508b48f7 (patch)
treea184c8fe7060d7683acf7b1e57335f3adf85fa66
parent3b0d832d1d7162528d35171516969509beee7ead (diff)
Deprecate usage of gitlab shell yml
Since we are now passing values from gitaly's config.toml to gitlab shell hooks through an environment variable, we can deprecate usage of the legacy yml file.
-rw-r--r--changelogs/unreleased/jc-deprecate-gitlab-shell-yml.yml5
-rw-r--r--cmd/gitaly-hooks/hooks_test.go30
-rw-r--r--go.mod2
-rw-r--r--internal/gitlabshell/env.go9
-rw-r--r--internal/gitlabshell/env_test.go1
-rw-r--r--internal/service/operations/squash_test.go13
-rw-r--r--internal/service/smarthttp/receive_pack_test.go15
-rw-r--r--internal/service/ssh/receive_pack_test.go2
-rw-r--r--internal/testhelper/testserver.go29
-rw-r--r--ruby/gitlab-shell/lib/gitlab_config.rb58
-rw-r--r--ruby/gitlab-shell/lib/gitlab_init.rb8
-rw-r--r--ruby/gitlab-shell/spec/gitlab_config_spec.rb177
-rw-r--r--ruby/gitlab-shell/spec/gitlab_custom_hook_spec.rb20
-rw-r--r--ruby/gitlab-shell/spec/support/gitlab_shell_setup.rb2
14 files changed, 95 insertions, 276 deletions
diff --git a/changelogs/unreleased/jc-deprecate-gitlab-shell-yml.yml b/changelogs/unreleased/jc-deprecate-gitlab-shell-yml.yml
new file mode 100644
index 000000000..2ff28a27d
--- /dev/null
+++ b/changelogs/unreleased/jc-deprecate-gitlab-shell-yml.yml
@@ -0,0 +1,5 @@
+---
+title: Remove usage of gitlab shell yml
+merge_request: 2168
+author:
+type: deprecated
diff --git a/cmd/gitaly-hooks/hooks_test.go b/cmd/gitaly-hooks/hooks_test.go
index bf13a4707..2d7fd82f3 100644
--- a/cmd/gitaly-hooks/hooks_test.go
+++ b/cmd/gitaly-hooks/hooks_test.go
@@ -93,16 +93,6 @@ func TestHooksPrePostReceive(t *testing.T) {
config.Config.GitlabShell.Dir = tempGitlabShellDir
- testhelper.WriteTemporaryGitlabShellConfigFile(t,
- tempGitlabShellDir,
- testhelper.GitlabShellConfig{
- GitlabURL: ts.URL,
- HTTPSettings: testhelper.HTTPSettings{
- User: gitlabUser,
- Password: gitlabPassword,
- },
- })
-
testhelper.WriteShellSecretFile(t, tempGitlabShellDir, secretToken)
gitObjectDirRegex := regexp.MustCompile(`(?m)^GIT_OBJECT_DIRECTORY=(.*)$`)
@@ -202,9 +192,8 @@ func TestHooksUpdate(t *testing.T) {
customHooksDir, cleanup := testhelper.TempDir(t)
defer cleanup()
- testhelper.WriteTemporaryGitlabShellConfigFile(t, tempGitlabShellDir, testhelper.GitlabShellConfig{GitlabURL: "http://www.example.com", CustomHooksDir: customHooksDir})
-
- os.Symlink(filepath.Join(config.Config.GitlabShell.Dir, "config.yml"), filepath.Join(tempGitlabShellDir, "config.yml"))
+ config.Config.Gitlab.URL = "http://www.example.com"
+ config.Config.Hooks.CustomHooksDir = customHooksDir
testhelper.WriteShellSecretFile(t, tempGitlabShellDir, "the wrong token")
@@ -219,9 +208,7 @@ func TestHooksUpdate(t *testing.T) {
for _, featureSet := range featureSets {
t.Run(fmt.Sprintf("enabled features: %v", featureSet), func(t *testing.T) {
- if featureSet.IsEnabled("use_gitaly_gitlabshell_config") {
- config.Config.Hooks.CustomHooksDir = customHooksDir
- }
+ config.Config.Hooks.CustomHooksDir = customHooksDir
testHooksUpdate(t, tempGitlabShellDir, socket, token, testhelper.GlHookValues{
GLID: glID,
@@ -418,12 +405,11 @@ func TestHooksNotAllowed(t *testing.T) {
ts := testhelper.NewGitlabTestServer(c)
defer ts.Close()
- testhelper.WriteTemporaryGitlabShellConfigFile(t, tempGitlabShellDir, testhelper.GitlabShellConfig{GitlabURL: ts.URL})
- testhelper.WriteShellSecretFile(t, tempGitlabShellDir, "the wrong token")
-
- config.Config.GitlabShell.Dir = tempGitlabShellDir
config.Config.Gitlab.URL = ts.URL
config.Config.Gitlab.SecretFile = filepath.Join(tempGitlabShellDir, ".gitlab_shell_secret")
+ config.Config.GitlabShell.Dir = tempGitlabShellDir
+
+ testhelper.WriteShellSecretFile(t, tempGitlabShellDir, "the wrong token")
customHookOutputPath, cleanup := testhelper.WriteEnvToCustomHook(t, testRepoPath, "post-receive")
defer cleanup()
@@ -490,9 +476,6 @@ func TestCheckOK(t *testing.T) {
require.NoError(t, os.Symlink(filepath.Join(cwd, "../../ruby/gitlab-shell/bin/check"), filepath.Join(binDir, "check")))
testhelper.WriteShellSecretFile(t, gitlabShellDir, "the secret")
- testhelper.WriteTemporaryGitlabShellConfigFile(t,
- gitlabShellDir,
- testhelper.GitlabShellConfig{GitlabURL: ts.URL, HTTPSettings: testhelper.HTTPSettings{User: user, Password: password}})
configPath, cleanup := testhelper.WriteTemporaryGitalyConfigFile(t, tempDir, ts.URL, user, password)
defer cleanup()
@@ -538,7 +521,6 @@ func TestCheckBadCreds(t *testing.T) {
require.NoError(t, err)
require.NoError(t, os.Symlink(filepath.Join(cwd, "../../ruby/gitlab-shell/bin/check"), filepath.Join(binDir, "check")))
- testhelper.WriteTemporaryGitlabShellConfigFile(t, gitlabShellDir, testhelper.GitlabShellConfig{GitlabURL: ts.URL, HTTPSettings: testhelper.HTTPSettings{User: user + "wrong", Password: password}})
testhelper.WriteShellSecretFile(t, gitlabShellDir, "the secret")
configPath, cleanup := testhelper.WriteTemporaryGitalyConfigFile(t, tempDir, ts.URL, "wrong", password)
diff --git a/go.mod b/go.mod
index c9581053b..d209f9350 100644
--- a/go.mod
+++ b/go.mod
@@ -23,7 +23,7 @@ require (
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1
google.golang.org/grpc v1.24.0
- gopkg.in/yaml.v2 v2.2.8
+ gopkg.in/yaml.v2 v2.2.8 // indirect
)
go 1.13
diff --git a/internal/gitlabshell/env.go b/internal/gitlabshell/env.go
index 9165932ab..8e601270e 100644
--- a/internal/gitlabshell/env.go
+++ b/internal/gitlabshell/env.go
@@ -14,13 +14,13 @@ func Env() ([]string, error) {
}
type Config struct {
+ GitlabDir string `json:"dir"`
CustomHooksDir string `json:"custom_hooks_dir"`
GitlabURL string `json:"gitlab_url"`
HTTPSettings config.HTTPSettings `json:"http_settings"`
LogFormat string `json:"log_format"`
LogLevel string `json:"log_level"`
LogPath string `json:"log_path"`
- RootPath string `json:"root_path"`
SecretFile string `json:"secret_file"`
}
@@ -30,10 +30,10 @@ func EnvFromConfig(cfg config.Cfg) ([]string, error) {
CustomHooksDir: cfg.Hooks.CustomHooksDir,
GitlabURL: cfg.Gitlab.URL,
HTTPSettings: cfg.Gitlab.HTTPSettings,
+ GitlabDir: cfg.GitlabShell.Dir,
LogFormat: cfg.Logging.Format,
LogLevel: cfg.Logging.Level,
LogPath: cfg.Logging.Dir,
- RootPath: cfg.GitlabShell.Dir, //GITLAB_SHELL_DIR has been deprecated
SecretFile: cfg.Gitlab.SecretFile,
}
@@ -43,11 +43,6 @@ func EnvFromConfig(cfg config.Cfg) ([]string, error) {
}
return []string{
- //TODO: remove GITALY_GITLAB_SHELL_DIR: https://gitlab.com/gitlab-org/gitaly/-/issues/2679
- "GITALY_GITLAB_SHELL_DIR=" + cfg.GitlabShell.Dir,
- "GITALY_LOG_DIR=" + cfg.Logging.Dir,
- "GITALY_LOG_FORMAT=" + cfg.Logging.Format,
- "GITALY_LOG_LEVEL=" + cfg.Logging.Level,
"GITALY_BIN_DIR=" + cfg.BinDir,
"GITALY_RUBY_DIR=" + cfg.Ruby.Dir,
"GITALY_GITLAB_SHELL_CONFIG=" + string(gitlabShellConfigString),
diff --git a/internal/gitlabshell/env_test.go b/internal/gitlabshell/env_test.go
index 9eac8f076..8dc8309f4 100644
--- a/internal/gitlabshell/env_test.go
+++ b/internal/gitlabshell/env_test.go
@@ -65,6 +65,7 @@ func TestGitHooksConfig(t *testing.T) {
require.Equal(t, config.Config.Gitlab.SecretFile, rubyConfigMap["secret_file"])
require.Equal(t, config.Config.Hooks.CustomHooksDir, rubyConfigMap["custom_hooks_dir"])
require.Equal(t, config.Config.Gitlab.URL, rubyConfigMap["gitlab_url"])
+ require.Equal(t, config.Config.GitlabShell.Dir, rubyConfigMap["gitlab_shell_dir"])
// HTTP Settings
httpSettings, ok := rubyConfigMap["http_settings"].(map[string]interface{})
diff --git a/internal/service/operations/squash_test.go b/internal/service/operations/squash_test.go
index 6787bfe48..a8dd78131 100644
--- a/internal/service/operations/squash_test.go
+++ b/internal/service/operations/squash_test.go
@@ -21,6 +21,7 @@ var (
author = &gitalypb.User{
Name: []byte("John Doe"),
Email: []byte("johndoe@gitlab.com"),
+ GlId: testhelper.GlID,
}
branchName = "not-merged-branch"
startSha = "b83d6e391c22777fca1ed3012fce84f633d7fed0"
@@ -281,7 +282,7 @@ func TestFailedUserSquashRequestDueToValidations(t *testing.T) {
Repository: nil,
User: testhelper.TestUser,
SquashId: "1",
- Author: testhelper.TestUser,
+ Author: author,
CommitMessage: commitMessage,
StartSha: startSha,
EndSha: endSha,
@@ -294,7 +295,7 @@ func TestFailedUserSquashRequestDueToValidations(t *testing.T) {
Repository: testRepo,
User: nil,
SquashId: "1",
- Author: testhelper.TestUser,
+ Author: author,
CommitMessage: commitMessage,
StartSha: startSha,
EndSha: endSha,
@@ -307,7 +308,7 @@ func TestFailedUserSquashRequestDueToValidations(t *testing.T) {
Repository: testRepo,
User: testhelper.TestUser,
SquashId: "",
- Author: testhelper.TestUser,
+ Author: author,
CommitMessage: commitMessage,
StartSha: startSha,
EndSha: endSha,
@@ -320,7 +321,7 @@ func TestFailedUserSquashRequestDueToValidations(t *testing.T) {
Repository: testRepo,
User: testhelper.TestUser,
SquashId: "1",
- Author: testhelper.TestUser,
+ Author: author,
CommitMessage: commitMessage,
StartSha: "",
EndSha: endSha,
@@ -333,7 +334,7 @@ func TestFailedUserSquashRequestDueToValidations(t *testing.T) {
Repository: testRepo,
User: testhelper.TestUser,
SquashId: "1",
- Author: testhelper.TestUser,
+ Author: author,
CommitMessage: commitMessage,
StartSha: startSha,
EndSha: "",
@@ -359,7 +360,7 @@ func TestFailedUserSquashRequestDueToValidations(t *testing.T) {
Repository: testRepo,
User: testhelper.TestUser,
SquashId: "1",
- Author: testhelper.TestUser,
+ Author: author,
CommitMessage: nil,
StartSha: startSha,
EndSha: endSha,
diff --git a/internal/service/smarthttp/receive_pack_test.go b/internal/service/smarthttp/receive_pack_test.go
index 35a83d23f..fd3f8bf5c 100644
--- a/internal/service/smarthttp/receive_pack_test.go
+++ b/internal/service/smarthttp/receive_pack_test.go
@@ -68,7 +68,6 @@ func TestSuccessfulReceivePackRequest(t *testing.T) {
"GL_ID=user-123",
"GL_REPOSITORY=project-456",
"GL_PROTOCOL=http",
- "GITALY_GITLAB_SHELL_DIR=" + "/foo/bar/gitlab-shell",
} {
require.Contains(t, strings.Split(string(envData), "\n"), env)
}
@@ -395,7 +394,6 @@ func testPostReceivePackToHooks(t *testing.T, callRPC bool) {
})
defer ts.Close()
- testhelper.WriteTemporaryGitlabShellConfigFile(t, tempGitlabShellDir, testhelper.GitlabShellConfig{GitlabURL: ts.URL})
testhelper.WriteShellSecretFile(t, tempGitlabShellDir, secretToken)
testhelper.WriteCustomHook(testRepoPath, "pre-receive", []byte(testhelper.CheckNewObjectExists))
@@ -497,15 +495,10 @@ func TestPostReceiveWithTransactions(t *testing.T) {
gitlabShellDir, cleanup := testhelper.CreateTemporaryGitlabShellDir(t)
defer cleanup()
config.Config.GitlabShell.Dir = gitlabShellDir
- testhelper.WriteTemporaryGitlabShellConfigFile(t,
- gitlabShellDir,
- testhelper.GitlabShellConfig{
- GitlabURL: gitlabServer.URL,
- HTTPSettings: testhelper.HTTPSettings{
- User: gitlabUser,
- Password: gitlabPassword,
- },
- })
+ config.Config.Gitlab.URL = gitlabServer.URL
+ config.Config.Gitlab.HTTPSettings.User = gitlabUser
+ config.Config.Gitlab.HTTPSettings.Password = gitlabPassword
+
testhelper.WriteShellSecretFile(t, gitlabShellDir, secretToken)
gitalyServer := testhelper.NewServerWithAuth(t, nil, nil, config.Config.Auth.Token)
diff --git a/internal/service/ssh/receive_pack_test.go b/internal/service/ssh/receive_pack_test.go
index a72cdbd5e..a9fd11bdb 100644
--- a/internal/service/ssh/receive_pack_test.go
+++ b/internal/service/ssh/receive_pack_test.go
@@ -102,7 +102,6 @@ func TestReceivePackPushSuccess(t *testing.T) {
"GL_ID=user-123",
fmt.Sprintf("GL_REPOSITORY=%s", glRepository),
"GL_PROTOCOL=ssh",
- "GITALY_GITLAB_SHELL_DIR=" + "/foo/bar/gitlab-shell",
} {
require.Contains(t, strings.Split(string(envData), "\n"), env)
}
@@ -240,7 +239,6 @@ func TestSSHReceivePackToHooks(t *testing.T) {
})
defer ts.Close()
- testhelper.WriteTemporaryGitlabShellConfigFile(t, tempGitlabShellDir, testhelper.GitlabShellConfig{GitlabURL: ts.URL})
testhelper.WriteShellSecretFile(t, tempGitlabShellDir, secretToken)
config.Config.Gitlab.URL = ts.URL
diff --git a/internal/testhelper/testserver.go b/internal/testhelper/testserver.go
index 26f990aa7..a73f4d64b 100644
--- a/internal/testhelper/testserver.go
+++ b/internal/testhelper/testserver.go
@@ -38,7 +38,6 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/health"
healthpb "google.golang.org/grpc/health/grpc_health_v1"
- "gopkg.in/yaml.v2"
)
// PraefectEnabled returns whether or not tests should use a praefect proxy
@@ -684,24 +683,6 @@ func CreateTemporaryGitlabShellDir(t testing.TB) (string, func()) {
}
}
-// WriteTemporaryGitlabShellConfigFile writes a gitlab shell config.yml in a temporary directory. It returns the path
-// and a cleanup function
-func WriteTemporaryGitlabShellConfigFile(t FatalLogger, dir string, config GitlabShellConfig) (string, func()) {
- out, err := yaml.Marshal(&config)
- if err != nil {
- t.Fatalf("error marshalling config", err)
- }
-
- path := filepath.Join(dir, "config.yml")
- if err = ioutil.WriteFile(path, out, 0644); err != nil {
- t.Fatalf("error writing gitlab shell config", err)
- }
-
- return path, func() {
- os.RemoveAll(path)
- }
-}
-
// WriteTemporaryGitalyConfigFile writes a gitaly toml file into a temporary directory. It returns the path to
// the file as well as a cleanup function
func WriteTemporaryGitalyConfigFile(t testing.TB, tempDir, gitlabURL, user, password string) (string, func()) {
@@ -709,10 +690,11 @@ func WriteTemporaryGitalyConfigFile(t testing.TB, tempDir, gitlabURL, user, pass
contents := fmt.Sprintf(`
[gitlab-shell]
dir = "%s/gitlab-shell"
- gitlab_url = %q
- [gitlab-shell.http-settings]
- user = %q
- password = %q
+[gitlab]
+url = %q
+[gitlab.http-settings]
+ user = %q
+ password = %q
`, tempDir, gitlabURL, user, password)
require.NoError(t, ioutil.WriteFile(path, []byte(contents), 0644))
@@ -809,7 +791,6 @@ func NewHealthServerWithListener(t testing.TB, listener net.Listener) (*grpc.Ser
func SetupAndStartGitlabServer(t FatalLogger, c *GitlabTestServerOptions) (string, func()) {
ts := NewGitlabTestServer(*c)
- WriteTemporaryGitlabShellConfigFile(t, config.Config.GitlabShell.Dir, GitlabShellConfig{GitlabURL: ts.URL})
WriteShellSecretFile(t, config.Config.GitlabShell.Dir, c.SecretToken)
return ts.URL, func() {
diff --git a/ruby/gitlab-shell/lib/gitlab_config.rb b/ruby/gitlab-shell/lib/gitlab_config.rb
index d6d964cce..0e196aad1 100644
--- a/ruby/gitlab-shell/lib/gitlab_config.rb
+++ b/ruby/gitlab-shell/lib/gitlab_config.rb
@@ -1,30 +1,29 @@
-require 'yaml'
-
class GitlabConfig
def secret_file
- fetch_from_config('secret_file', fetch_from_legacy_config('secret_file', File.join(ROOT_PATH, '.gitlab_shell_secret')))
+ fetch_from_config('secret_file', File.join(gitlab_shell_dir, '.gitlab_shell_secret'))
end
# Pass a default value because this is called from a repo's context; in which
# case, the repo's hooks directory should be the default.
#
+ def gitlab_shell_dir
+ fetch_from_config('dir', File.dirname(__dir__))
+ end
+
def custom_hooks_dir(default: nil)
- fetch_from_config('custom_hooks_dir', fetch_from_legacy_config('custom_hooks_dir', File.join(ROOT_PATH, 'hooks')))
+ fetch_from_config('custom_hooks_dir', File.join(gitlab_shell_dir, 'hooks'))
end
def gitlab_url
- fetch_from_config('gitlab_url', fetch_from_legacy_config('gitlab_url',"http://localhost:8080").sub(%r{/*$}, ''))
+ fetch_from_config('gitlab_url', "http://localhost:8080").sub(%r{/*$}, '')
end
class HTTPSettings
DEFAULT_TIMEOUT = 300
attr_reader :settings
- attr_reader :legacy_settings
-
- def initialize(settings, legacy_settings = {})
+ def initialize(settings)
@settings = settings || {}
- @legacy_settings = legacy_settings || {}
end
def user
@@ -58,42 +57,24 @@ class GitlabConfig
private
def fetch_from_settings(key)
- value = settings[key]
-
- return legacy_settings[key] if value.nil? || (value.is_a?(String) && value.empty?)
-
- value
+ settings[key]
end
end
def http_settings
- @http_settings ||= GitlabConfig::HTTPSettings.new(
- fetch_from_config('http_settings', {}),
- fetch_from_legacy_config('http_settings', {}))
+ @http_settings ||= GitlabConfig::HTTPSettings.new(fetch_from_config('http_settings', {}))
end
def log_file
- log_path = Pathname.new(fetch_from_config('log_path', LOG_PATH))
-
- log_path = ROOT_PATH if log_path === ''
-
- return log_path.join('gitlab-shell.log')
+ File.join(fetch_from_config('log_path', gitlab_shell_dir), 'gitlab-shell.log')
end
def log_level
- log_level = fetch_from_config('log_level', LOG_LEVEL)
-
- return log_level unless log_level.empty?
-
- 'INFO'
+ fetch_from_config('log_level', 'INFO')
end
def log_format
- log_format = fetch_from_config('log_format', LOG_FORMAT)
-
- return log_format unless log_format.empty?
-
- 'text'
+ fetch_from_config('log_format', 'text')
end
def to_json
@@ -105,13 +86,10 @@ class GitlabConfig
log_file: log_file,
log_level: log_level,
log_format: log_format,
+ gitlab_shell_dir: gitlab_shell_dir,
}.to_json
end
- def fetch_from_legacy_config(key, default)
- legacy_config[key] || default
- end
-
private
def fetch_from_config(key, default)
@@ -125,12 +103,4 @@ class GitlabConfig
def config
@config ||= JSON.parse(ENV.fetch('GITALY_GITLAB_SHELL_CONFIG', '{}'))
end
-
- def legacy_config
- # TODO: deprecate @legacy_config that is parsing the gitlab-shell config.yml
- legacy_file = ROOT_PATH.join('config.yml')
- return {} unless legacy_file.exist?
-
- @legacy_config ||= YAML.load_file(legacy_file)
- end
end
diff --git a/ruby/gitlab-shell/lib/gitlab_init.rb b/ruby/gitlab-shell/lib/gitlab_init.rb
index 949135493..188c5e6a5 100644
--- a/ruby/gitlab-shell/lib/gitlab_init.rb
+++ b/ruby/gitlab-shell/lib/gitlab_init.rb
@@ -1,11 +1,3 @@
-# GITLAB_SHELL_DIR has been deprecated
-require 'pathname'
-
-ROOT_PATH = Pathname.new(ENV['GITALY_GITLAB_SHELL_DIR'] || ENV['GITLAB_SHELL_DIR'] || File.expand_path('..', __dir__)).freeze
-LOG_PATH = Pathname.new(ENV.fetch('GITALY_LOG_DIR', ROOT_PATH))
-LOG_LEVEL = ENV.fetch('GITALY_LOG_LEVEL', 'INFO')
-LOG_FORMAT = ENV.fetch('GITALY_LOG_FORMAT', 'text')
-
# We are transitioning parts of gitlab-shell into the gitaly project. In
# gitaly, GITALY_EMBEDDED will be true.
GITALY_EMBEDDED = true
diff --git a/ruby/gitlab-shell/spec/gitlab_config_spec.rb b/ruby/gitlab-shell/spec/gitlab_config_spec.rb
index 6d5623e81..339b7e84b 100644
--- a/ruby/gitlab-shell/spec/gitlab_config_spec.rb
+++ b/ruby/gitlab-shell/spec/gitlab_config_spec.rb
@@ -4,158 +4,57 @@ require 'json'
describe GitlabConfig do
let(:config) { GitlabConfig.new }
-
- let(:config_data) { {} }
-
- before { allow(YAML).to receive(:load_file).and_return(config_data) }
-
- describe '#gitlab_url' do
- let(:url) { 'http://test.com' }
-
- subject { config.gitlab_url }
-
- before { config_data['gitlab_url'] = url }
-
- it { is_expected.not_to be_empty }
- it { is_expected.to eq(url) }
-
- context 'remove trailing slashes' do
- before { config_data['gitlab_url'] = url + '//' }
-
- it { is_expected.to eq(url) }
- end
+ let(:config_data) { {'secret_file' => 'path/to/secret/file',
+ 'custom_hooks_dir' => '/path/to/custom_hooks',
+ 'gitlab_url' => 'http://localhost:123454',
+ 'http_settings' => {'user' => 'user_123', 'password' =>'password123', 'ca_file' => '/path/to/ca_file', 'ca_path' => 'path/to/ca_path', 'read_timeout' => 200, 'self_signed' => true},
+ 'log_path' => '/path/to/log',
+ 'log_level' => 'myloglevel',
+ 'log_format' => 'log_format'} }
+
+ before do
+ allow(ENV).to receive(:fetch).with('GITALY_GITLAB_SHELL_CONFIG', '{}').and_return(config_data.to_json)
end
describe '#secret_file' do
- subject { config.secret_file }
-
- it 'returns ".gitlab_shell_secret" by default' do
- is_expected.to eq(File.join(File.expand_path('..', __dir__),'.gitlab_shell_secret'))
+ it 'returns the correct secret_file' do
+ expect(config.secret_file).to eq(config_data['secret_file'])
end
end
- describe '#fetch_from_legacy_config' do
- let(:key) { 'yaml_key' }
-
- where(:yaml_value, :default, :expected_value) do
- [
- ['a', 'b', 'a'],
- [nil, 'b', 'b'],
- ['a', nil, 'a'],
- [nil, {}, {}]
- ]
+ describe '#custom_hooks_dir' do
+ it 'returns the correct custom_hooks_dir' do
+ expect(config.custom_hooks_dir).to eq(config_data['custom_hooks_dir'])
end
+ end
- with_them do
- it 'returns the correct value' do
- config_data[key] = yaml_value
-
- expect(config.fetch_from_legacy_config(key, default)).to eq(expected_value)
- end
+ describe '#http_settings' do
+ it 'returns the correct http_settings' do
+ expect(config.http_settings.settings).to eq(config_data['http_settings'])
end
+ end
- context "when ENV['GITALY_GITLAB_SHELL_CONFIG'] is passed in" do
- let(:config_data) { {'secret_file' => 'path/to/secret/file',
- 'custom_hooks_dir' => '/path/to/custom_hooks',
- 'gitlab_url' => 'http://localhost:123454',
- 'http_settings' => {'user' => 'user_123', 'password' =>'password123', 'ca_file' => '/path/to/ca_file', 'ca_path' => 'path/to/ca_path', 'read_timeout' => 200, 'self_signed' => true},
- 'log_path' => '/path/to/log',
- 'log_level' => 'myloglevel',
- 'log_format' => 'log_format'} }
- let(:gitaly_config_data) { config_data }
- before do
- allow(ENV).to receive(:fetch).with('GITALY_GITLAB_SHELL_CONFIG', '{}').and_return(gitaly_config_data.to_json)
- end
-
- describe '#secret_file' do
- it 'returns the correct secret_file' do
- expect(config.secret_file).to eq(gitaly_config_data['secret_file'])
- end
- end
-
- describe '#custom_hooks_dir' do
- it 'returns the correct custom_hooks_dir' do
- expect(config.custom_hooks_dir).to eq(gitaly_config_data['custom_hooks_dir'])
- end
- end
-
- describe '#http_settings' do
- it 'returns the correct http_settings' do
- expect(config.http_settings.settings).to eq(gitaly_config_data['http_settings'])
- end
-
- context 'when string values are nil' do
- let(:gitaly_config_data) { {'http_settings': {'user': nil, 'password': nil, 'ca_file': nil, 'ca_path': nil, 'read_timeout': 200, 'self_signed': true}} }
-
- it 'falls back to legacy config for user' do
- expect(config.http_settings.user).to eq(config_data['http_settings']['user'])
- expect(config.http_settings.user).not_to be_nil
- end
-
- it 'falls back to legacy config for password' do
- expect(config.http_settings.password).to eq(config_data['http_settings']['password'])
- expect(config.http_settings.password).not_to be_nil
- end
-
- it 'falls back to legacy config for ca_file' do
- expect(config.http_settings.ca_file).to eq(config_data['http_settings']['ca_file'])
- expect(config.http_settings.ca_file).not_to be_nil
- end
-
- it 'falls back to legacy config for ca_path' do
- expect(config.http_settings.ca_path).to eq(config_data['http_settings']['ca_path'])
- expect(config.http_settings.ca_path).not_to be_nil
- end
- end
-
- context 'when string values are empty' do
- let(:gitaly_config_data) { {'http_settings': {'user': '', 'password': '', 'ca_file': '', 'ca_path': '', 'read_timeout': 200, 'self_signed': true}} }
-
- it 'falls back to legacy config for user' do
- expect(config.http_settings.user).to eq(config_data['http_settings']['user'])
- expect(config.http_settings.user).not_to be_empty
- end
-
- it 'falls back to legacy config for password' do
- expect(config.http_settings.password).to eq(config_data['http_settings']['password'])
- expect(config.http_settings.password).not_to be_empty
- end
-
- it 'falls back to legacy config for ca_file' do
- expect(config.http_settings.ca_file).to eq(config_data['http_settings']['ca_file'])
- expect(config.http_settings.ca_file).not_to be_empty
- end
-
- it 'falls back to legacy config for ca_path' do
- expect(config.http_settings.ca_path).to eq(config_data['http_settings']['ca_path'])
- expect(config.http_settings.ca_path).not_to be_empty
- end
- end
- end
-
- describe '#gitlab_url' do
- it 'returns the correct gitlab_url' do
- expect(config.gitlab_url).to eq(gitaly_config_data['gitlab_url'])
- end
- end
+ describe '#gitlab_url' do
+ it 'returns the correct gitlab_url' do
+ expect(config.gitlab_url).to eq(config_data['gitlab_url'])
+ end
+ end
- describe '#log_path' do
- it 'returns the correct log_path' do
- expect(config.log_file).to eq(Pathname.new(File.join(gitaly_config_data['log_path'], 'gitlab-shell.log')))
- end
- end
+ describe '#log_path' do
+ it 'returns the correct log_path' do
+ expect(config.log_file).to eq(File.join(config_data['log_path'], 'gitlab-shell.log'))
+ end
+ end
- describe '#log_level' do
- it 'returns the correct log_level' do
- expect(config.log_level).to eq(gitaly_config_data['log_level'])
- end
- end
+ describe '#log_level' do
+ it 'returns the correct log_level' do
+ expect(config.log_level).to eq(config_data['log_level'])
+ end
+ end
- describe '#log_format' do
- it 'returns the correct log_format' do
- expect(config.log_format).to eq(gitaly_config_data['log_format'])
- end
- end
+ describe '#log_format' do
+ it 'returns the correct log_format' do
+ expect(config.log_format).to eq(config_data['log_format'])
end
end
end
diff --git a/ruby/gitlab-shell/spec/gitlab_custom_hook_spec.rb b/ruby/gitlab-shell/spec/gitlab_custom_hook_spec.rb
index c19b90f87..03a193c6e 100644
--- a/ruby/gitlab-shell/spec/gitlab_custom_hook_spec.rb
+++ b/ruby/gitlab-shell/spec/gitlab_custom_hook_spec.rb
@@ -3,13 +3,14 @@ require 'spec_helper'
require 'gitlab_custom_hook'
describe GitlabCustomHook do
- let(:original_root_path) { ROOT_PATH }
- let(:tmp_repo_path) { File.join(original_root_path, 'tmp', 'repo.git') }
- let(:tmp_root_path) { File.join(original_root_path, 'tmp') }
+ let(:root_path) { File.expand_path('..', __dir__) }
+ let(:tmp_repo_path) { File.join(root_path, 'tmp', 'repo.git') }
+ let(:tmp_root_path) { File.join(root_path, 'tmp') }
+ let(:gitaly_config_data) { {'dir' => root_path, 'custom_hooks_dir' => File.join(tmp_root_path, 'hooks') } }
let(:global_custom_hooks_path) { global_hook_path('custom_global_hooks') }
- let(:hook_ok) { File.join(original_root_path, 'spec', 'support', 'hook_ok') }
- let(:hook_fail) { File.join(original_root_path, 'spec', 'support', 'hook_fail') }
- let(:hook_gl_id) { File.join(original_root_path, 'spec', 'support', 'gl_id_test_hook') }
+ let(:hook_ok) { File.join(root_path, 'spec', 'support', 'hook_ok') }
+ let(:hook_fail) { File.join(root_path, 'spec', 'support', 'hook_fail') }
+ let(:hook_gl_id) { File.join(root_path, 'spec', 'support', 'gl_id_test_hook') }
let(:vars) { { "GL_ID" => "key_1" } }
let(:old_value) { "old-value" }
@@ -19,6 +20,10 @@ describe GitlabCustomHook do
let(:gitlab_custom_hook) { GitlabCustomHook.new(tmp_repo_path, 'key_1') }
+ before do
+ allow(ENV).to receive(:fetch).with('GITALY_GITLAB_SHELL_CONFIG', '{}').and_return(gitaly_config_data.to_json)
+ end
+
def hook_path(path)
File.join(tmp_repo_path, path.split('/'))
end
@@ -97,9 +102,6 @@ describe GitlabCustomHook do
end
FileUtils.symlink(File.join(tmp_root_path, 'hooks'), File.join(tmp_repo_path, 'hooks'))
- FileUtils.symlink(File.join(ROOT_PATH, 'config.yml.example'), File.join(tmp_root_path, 'config.yml'))
-
- stub_const('ROOT_PATH', Pathname.new(tmp_root_path))
end
after do
diff --git a/ruby/gitlab-shell/spec/support/gitlab_shell_setup.rb b/ruby/gitlab-shell/spec/support/gitlab_shell_setup.rb
index eddd2d141..d74dea717 100644
--- a/ruby/gitlab-shell/spec/support/gitlab_shell_setup.rb
+++ b/ruby/gitlab-shell/spec/support/gitlab_shell_setup.rb
@@ -1,6 +1,6 @@
RSpec.shared_context 'gitlab shell', shared_context: :metadata do
def original_root_path
- ROOT_PATH
+ File.dirname(__dir__)
end
def config_path