diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 15:26:25 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 15:26:25 +0300 |
commit | a09983ae35713f5a2bbb100981116d31ce99826e (patch) | |
tree | 2ee2af7bd104d57086db360a7e6d8c9d5d43667a /spec/lib/gitlab/alert_management/fingerprint_spec.rb | |
parent | 18c5ab32b738c0b6ecb4d0df3994000482f34bd8 (diff) |
Add latest changes from gitlab-org/gitlab@13-2-stable-ee
Diffstat (limited to 'spec/lib/gitlab/alert_management/fingerprint_spec.rb')
-rw-r--r-- | spec/lib/gitlab/alert_management/fingerprint_spec.rb | 70 |
1 files changed, 49 insertions, 21 deletions
diff --git a/spec/lib/gitlab/alert_management/fingerprint_spec.rb b/spec/lib/gitlab/alert_management/fingerprint_spec.rb index 7865d667f71..8a933963f6a 100644 --- a/spec/lib/gitlab/alert_management/fingerprint_spec.rb +++ b/spec/lib/gitlab/alert_management/fingerprint_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -describe Gitlab::AlertManagement::Fingerprint do +RSpec.describe Gitlab::AlertManagement::Fingerprint do using RSpec::Parameterized::TableSyntax let_it_be(:alert) { create(:alert_management_alert) } @@ -13,34 +13,62 @@ describe Gitlab::AlertManagement::Fingerprint do context 'when data is an array' do let(:data) { [1, 'fingerprint', 'given'] } - it 'flattens the array' do - expect_next_instance_of(described_class) do |obj| - expect(obj).to receive(:flatten_array) - end - - subject - end - it 'returns the hashed fingerprint' do expected_fingerprint = Digest::SHA1.hexdigest(data.flatten.map!(&:to_s).join) expect(subject).to eq(expected_fingerprint) end - end - context 'when data is a non-array type' do - where(:data) do - [ - 111, - 'fingerprint', - :fingerprint, - true, - { test: true } - ] + context 'with a variety of data' do + where(:data) do + [ + 111, + 'fingerprint', + :fingerprint, + true + ] + end + + with_them do + it 'performs like a hashed fingerprint' do + expect(subject).to eq(Digest::SHA1.hexdigest(data.to_s)) + end + end end + end - with_them do + context 'when data is a hash' do + let(:data) { { test: true } } + + shared_examples 'fingerprinted Hash' do it 'performs like a hashed fingerprint' do - expect(subject).to eq(Digest::SHA1.hexdigest(data.to_s)) + flattened_hash = Gitlab::Utils::SafeInlineHash.merge_keys!(data).sort.to_s + expect(subject).to eq(Digest::SHA1.hexdigest(flattened_hash)) + end + end + + it_behaves_like 'fingerprinted Hash' + + context 'hashes with different order' do + it 'calculates the same result' do + data = { test: true, another_test: 1 } + data_hash = described_class.generate(data) + + reverse_data = { another_test: 1, test: true } + reverse_data_hash = described_class.generate(reverse_data) + + expect(data_hash).to eq(reverse_data_hash) + end + end + + context 'hash is too large' do + before do + expect_next_instance_of(Gitlab::Utils::SafeInlineHash) do |obj| + expect(obj).to receive(:valid?).and_return(false) + end + end + + it 'raises an error' do + expect { subject }.to raise_error(ArgumentError) end end end |