diff options
author | Alexis Reigel <mail@koffeinfrei.org> | 2017-08-10 21:33:24 +0300 |
---|---|---|
committer | Alexis Reigel <mail@koffeinfrei.org> | 2017-08-14 13:57:56 +0300 |
commit | edcc488b75d8c6fcad3994bcda30a82756496969 (patch) | |
tree | 18bda21e98f3cbfcad6b4007873f9ac3934a4a87 /spec | |
parent | 6cd9888f6fc8bb1e0b6ff11ace8aacb19aedb268 (diff) |
use mutex for keychain interaction
setting of the gpg home directory is not thread safe, as the directoy
gets stored on the class.
if multiple threads change the directory at the same time, one of the
threads will be working in the wrong directory.
Diffstat (limited to 'spec')
-rw-r--r-- | spec/lib/gitlab/gpg_spec.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/spec/lib/gitlab/gpg_spec.rb b/spec/lib/gitlab/gpg_spec.rb index 95d371ea178..30ad033b204 100644 --- a/spec/lib/gitlab/gpg_spec.rb +++ b/spec/lib/gitlab/gpg_spec.rb @@ -65,6 +65,36 @@ describe Gitlab::Gpg do expect(described_class.current_home_dir).to eq default_home_dir end end + + describe '.using_tmp_keychain' do + it "the second thread does not change the first thread's directory" do + thread1 = Thread.new do + described_class.using_tmp_keychain do + dir = described_class.current_home_dir + sleep 0.1 + expect(described_class.current_home_dir).to eq dir + end + end + + thread2 = Thread.new do + described_class.using_tmp_keychain do + sleep 0.2 + end + end + + thread1.join + thread2.join + end + + it 'allows recursive execution in the same thread' do + expect do + described_class.using_tmp_keychain do + described_class.using_tmp_keychain do + end + end + end.not_to raise_error(ThreadError) + end + end end describe Gitlab::Gpg::CurrentKeyChain do |