summaryrefslogtreecommitdiff
path: root/spec/gitlab_shell_spec.rb
diff options
context:
space:
mode:
authorPaco Guzman <pacoguzmanp@gmail.com>2016-09-15 15:45:10 +0200
committerPaco Guzman <pacoguzmanp@gmail.com>2016-09-27 12:37:36 +0200
commit192e2bd367494bf66746c8971896a2d9cb84fc92 (patch)
treec3a252d71cab51e47d4f1a03c40abe0a1851f6f2 /spec/gitlab_shell_spec.rb
parentb71ca5da9fde4fa8457af146bd090ec7caa28d60 (diff)
downloadgitlab-shell-59-git-tracing.tar.gz
Enable GIT_TRACE/GIT_TRACE_PACKET/GIT_TRACE_PERFORMANCE by providing the git_trace_log_file config key59-git-tracing
The value of the variable if present must be a writable absolute path. If it’s not the case we log a proper message and not enable tracing to not throw output to the users.
Diffstat (limited to 'spec/gitlab_shell_spec.rb')
-rw-r--r--spec/gitlab_shell_spec.rb68
1 files changed, 67 insertions, 1 deletions
diff --git a/spec/gitlab_shell_spec.rb b/spec/gitlab_shell_spec.rb
index 96cae40..b9b8659 100644
--- a/spec/gitlab_shell_spec.rb
+++ b/spec/gitlab_shell_spec.rb
@@ -361,7 +361,7 @@ describe GitlabShell do
describe :exec_cmd do
let(:shell) { GitlabShell.new(key_id) }
- before { Kernel.stub!(:exec) }
+ before { Kernel.stub(:exec) }
it "uses Kernel::exec method" do
Kernel.should_receive(:exec).with(kind_of(Hash), 1, 2, unsetenv_others: true).once
@@ -376,6 +376,72 @@ describe GitlabShell do
Kernel.should_receive(:exec).with(kind_of(Hash), [1, 2], unsetenv_others: true).once
shell.send :exec_cmd, [1, 2]
end
+
+ context "when specifying a git_tracing log file" do
+ let(:git_trace_log_file) { '/tmp/git_trace_performance.log' }
+
+ before do
+ GitlabConfig.any_instance.stub(git_trace_log_file: git_trace_log_file)
+ shell
+ end
+
+ it "uses GIT_TRACE_PERFORMANCE" do
+ expected_hash = hash_including(
+ 'GIT_TRACE' => git_trace_log_file,
+ 'GIT_TRACE_PACKET' => git_trace_log_file,
+ 'GIT_TRACE_PERFORMANCE' => git_trace_log_file
+ )
+ Kernel.should_receive(:exec).with(expected_hash, [1, 2], unsetenv_others: true).once
+
+ shell.send :exec_cmd, [1, 2]
+ end
+
+ context "when provides a relative path" do
+ let(:git_trace_log_file) { 'git_trace_performance.log' }
+
+ it "does not uses GIT_TRACE*" do
+ # If we try to use it we'll show a warning to the users
+ expected_hash = hash_excluding(
+ 'GIT_TRACE', 'GIT_TRACE_PACKET', 'GIT_TRACE_PERFORMANCE'
+ )
+ Kernel.should_receive(:exec).with(expected_hash, [1, 2], unsetenv_others: true).once
+
+ shell.send :exec_cmd, [1, 2]
+ end
+
+ it "writes an entry on the log" do
+ expect($logger).to receive(:warn).
+ with("gitlab-shell: is configured to trace git commands with #{git_trace_log_file.inspect} but an absolute path needs to be provided")
+
+ Kernel.should_receive(:exec).with(kind_of(Hash), [1, 2], unsetenv_others: true).once
+ shell.send :exec_cmd, [1, 2]
+ end
+ end
+
+ context "when provides a file not writable" do
+ before do
+ expect(File).to receive(:open).with(git_trace_log_file, 'a').and_raise(Errno::EACCES)
+ end
+
+ it "does not uses GIT_TRACE*" do
+ # If we try to use it we'll show a warning to the users
+ expected_hash = hash_excluding(
+ 'GIT_TRACE', 'GIT_TRACE_PACKET', 'GIT_TRACE_PERFORMANCE'
+ )
+ Kernel.should_receive(:exec).with(expected_hash, [1, 2], unsetenv_others: true).once
+
+ shell.send :exec_cmd, [1, 2]
+ end
+
+ it "writes an entry on the log" do
+ expect($logger).to receive(:warn).
+ with("gitlab-shell: is configured to trace git commands with #{git_trace_log_file.inspect} but it's not possible to write in that path Permission denied")
+
+ Kernel.should_receive(:exec).with(kind_of(Hash), [1, 2], unsetenv_others: true).once
+ shell.send :exec_cmd, [1, 2]
+ end
+ end
+ end
end
describe :api do