diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-28 18:08:52 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-28 18:08:52 +0000 |
commit | 3e49ae159acbb703f005f5014772072cd90ef97b (patch) | |
tree | a65e942c5e207461419c4a266ebe6952733c8520 /spec/models | |
parent | 77d49e6a73b3a1e142ec865d05dc3dd9a708ab6a (diff) | |
download | gitlab-ce-3e49ae159acbb703f005f5014772072cd90ef97b.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/models')
-rw-r--r-- | spec/models/analytics/instance_statistics/measurement_spec.rb | 22 | ||||
-rw-r--r-- | spec/models/ci/build_trace_chunk_spec.rb | 26 | ||||
-rw-r--r-- | spec/models/ci/build_trace_chunks/fog_spec.rb | 20 | ||||
-rw-r--r-- | spec/models/ci/build_trace_chunks/legacy_fog_spec.rb | 164 | ||||
-rw-r--r-- | spec/models/service_spec.rb | 19 |
5 files changed, 221 insertions, 30 deletions
diff --git a/spec/models/analytics/instance_statistics/measurement_spec.rb b/spec/models/analytics/instance_statistics/measurement_spec.rb index 379272cfcb9..fb9352f5411 100644 --- a/spec/models/analytics/instance_statistics/measurement_spec.rb +++ b/spec/models/analytics/instance_statistics/measurement_spec.rb @@ -48,26 +48,10 @@ RSpec.describe Analytics::InstanceStatistics::Measurement, type: :model do end describe '#measurement_identifier_values' do - subject { described_class.measurement_identifier_values.count } - - context 'when the `store_ci_pipeline_counts_by_status` feature flag is off' do - let(:expected_count) { Analytics::InstanceStatistics::Measurement.identifiers.size - Analytics::InstanceStatistics::Measurement::EXPERIMENTAL_IDENTIFIERS.size } - - before do - stub_feature_flags(store_ci_pipeline_counts_by_status: false) - end - - it { is_expected.to eq(expected_count) } - end - - context 'when the `store_ci_pipeline_counts_by_status` feature flag is on' do - let(:expected_count) { Analytics::InstanceStatistics::Measurement.identifiers.size } + let(:expected_count) { Analytics::InstanceStatistics::Measurement.identifiers.size } - before do - stub_feature_flags(store_ci_pipeline_counts_by_status: true) - end + subject { described_class.measurement_identifier_values.count } - it { is_expected.to eq(expected_count) } - end + it { is_expected.to eq(expected_count) } end end diff --git a/spec/models/ci/build_trace_chunk_spec.rb b/spec/models/ci/build_trace_chunk_spec.rb index 0b0b5a7554c..b1dfe453a98 100644 --- a/spec/models/ci/build_trace_chunk_spec.rb +++ b/spec/models/ci/build_trace_chunk_spec.rb @@ -135,11 +135,31 @@ RSpec.describe Ci::BuildTraceChunk, :clean_gitlab_redis_shared_state do context 'when data_store is fog' do let(:data_store) { :fog } - before do - build_trace_chunk.send(:unsafe_set_data!, +'Sample data in fog') + context 'when legacy Fog is enabled' do + before do + stub_feature_flags(ci_trace_new_fog_store: false) + build_trace_chunk.send(:unsafe_set_data!, +'Sample data in fog') + end + + it { is_expected.to eq('Sample data in fog') } + + it 'returns a LegacyFog store' do + expect(described_class.get_store_class(data_store)).to be_a(Ci::BuildTraceChunks::LegacyFog) + end end - it { is_expected.to eq('Sample data in fog') } + context 'when new Fog is enabled' do + before do + stub_feature_flags(ci_trace_new_fog_store: true) + build_trace_chunk.send(:unsafe_set_data!, +'Sample data in fog') + end + + it { is_expected.to eq('Sample data in fog') } + + it 'returns a new Fog store' do + expect(described_class.get_store_class(data_store)).to be_a(Ci::BuildTraceChunks::Fog) + end + end end end diff --git a/spec/models/ci/build_trace_chunks/fog_spec.rb b/spec/models/ci/build_trace_chunks/fog_spec.rb index b7e9adab04a..20ca0c8b710 100644 --- a/spec/models/ci/build_trace_chunks/fog_spec.rb +++ b/spec/models/ci/build_trace_chunks/fog_spec.rb @@ -4,8 +4,12 @@ require 'spec_helper' RSpec.describe Ci::BuildTraceChunks::Fog do let(:data_store) { described_class.new } + let(:bucket) { 'artifacts' } + let(:connection_params) { Gitlab.config.artifacts.object_store.connection.symbolize_keys } + let(:connection) { ::Fog::Storage.new(connection_params) } before do + stub_object_storage(connection_params: connection_params, remote_directory: bucket) stub_artifacts_object_storage end @@ -148,17 +152,17 @@ RSpec.describe Ci::BuildTraceChunks::Fog do end it 'deletes multiple data' do - ::Fog::Storage.new(JobArtifactUploader.object_store_credentials).tap do |connection| - expect(connection.get_object('artifacts', "tmp/builds/#{build.id}/chunks/0.log")[:body]).to be_present - expect(connection.get_object('artifacts', "tmp/builds/#{build.id}/chunks/1.log")[:body]).to be_present - end + files = connection.directories.new(key: bucket).files + + expect(files.count).to eq(2) + expect(files[0].body).to be_present + expect(files[1].body).to be_present subject - ::Fog::Storage.new(JobArtifactUploader.object_store_credentials).tap do |connection| - expect { connection.get_object('artifacts', "tmp/builds/#{build.id}/chunks/0.log")[:body] }.to raise_error(Excon::Error::NotFound) - expect { connection.get_object('artifacts', "tmp/builds/#{build.id}/chunks/1.log")[:body] }.to raise_error(Excon::Error::NotFound) - end + files.reload + + expect(files.count).to eq(0) end end end diff --git a/spec/models/ci/build_trace_chunks/legacy_fog_spec.rb b/spec/models/ci/build_trace_chunks/legacy_fog_spec.rb new file mode 100644 index 00000000000..ca4b414b992 --- /dev/null +++ b/spec/models/ci/build_trace_chunks/legacy_fog_spec.rb @@ -0,0 +1,164 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Ci::BuildTraceChunks::LegacyFog do + let(:data_store) { described_class.new } + + before do + stub_artifacts_object_storage + end + + describe '#available?' do + subject { data_store.available? } + + context 'when object storage is enabled' do + it { is_expected.to be_truthy } + end + + context 'when object storage is disabled' do + before do + stub_artifacts_object_storage(enabled: false) + end + + it { is_expected.to be_falsy } + end + end + + describe '#data' do + subject { data_store.data(model) } + + context 'when data exists' do + let(:model) { create(:ci_build_trace_chunk, :fog_with_data, initial_data: 'sample data in fog') } + + it 'returns the data' do + is_expected.to eq('sample data in fog') + end + end + + context 'when data does not exist' do + let(:model) { create(:ci_build_trace_chunk, :fog_without_data) } + + it 'returns nil' do + expect(data_store.data(model)).to be_nil + end + end + end + + describe '#set_data' do + let(:new_data) { 'abc123' } + + context 'when data exists' do + let(:model) { create(:ci_build_trace_chunk, :fog_with_data, initial_data: 'sample data in fog') } + + it 'overwrites data' do + expect(data_store.data(model)).to eq('sample data in fog') + + data_store.set_data(model, new_data) + + expect(data_store.data(model)).to eq new_data + end + end + + context 'when data does not exist' do + let(:model) { create(:ci_build_trace_chunk, :fog_without_data) } + + it 'sets new data' do + expect(data_store.data(model)).to be_nil + + data_store.set_data(model, new_data) + + expect(data_store.data(model)).to eq new_data + end + end + end + + describe '#delete_data' do + subject { data_store.delete_data(model) } + + context 'when data exists' do + let(:model) { create(:ci_build_trace_chunk, :fog_with_data, initial_data: 'sample data in fog') } + + it 'deletes data' do + expect(data_store.data(model)).to eq('sample data in fog') + + subject + + expect(data_store.data(model)).to be_nil + end + end + + context 'when data does not exist' do + let(:model) { create(:ci_build_trace_chunk, :fog_without_data) } + + it 'does nothing' do + expect(data_store.data(model)).to be_nil + + subject + + expect(data_store.data(model)).to be_nil + end + end + end + + describe '#size' do + context 'when data exists' do + let(:model) { create(:ci_build_trace_chunk, :fog_with_data, initial_data: 'üabcd') } + + it 'returns data bytesize correctly' do + expect(data_store.size(model)).to eq 6 + end + end + + context 'when data does not exist' do + let(:model) { create(:ci_build_trace_chunk, :fog_without_data) } + + it 'returns zero' do + expect(data_store.size(model)).to be_zero + end + end + end + + describe '#keys' do + subject { data_store.keys(relation) } + + let(:build) { create(:ci_build) } + let(:relation) { build.trace_chunks } + + before do + create(:ci_build_trace_chunk, :fog_with_data, chunk_index: 0, build: build) + create(:ci_build_trace_chunk, :fog_with_data, chunk_index: 1, build: build) + end + + it 'returns keys' do + is_expected.to eq([[build.id, 0], [build.id, 1]]) + end + end + + describe '#delete_keys' do + subject { data_store.delete_keys(keys) } + + let(:build) { create(:ci_build) } + let(:relation) { build.trace_chunks } + let(:keys) { data_store.keys(relation) } + + before do + create(:ci_build_trace_chunk, :fog_with_data, chunk_index: 0, build: build) + create(:ci_build_trace_chunk, :fog_with_data, chunk_index: 1, build: build) + end + + it 'deletes multiple data' do + ::Fog::Storage.new(JobArtifactUploader.object_store_credentials).tap do |connection| + expect(connection.get_object('artifacts', "tmp/builds/#{build.id}/chunks/0.log")[:body]).to be_present + expect(connection.get_object('artifacts', "tmp/builds/#{build.id}/chunks/1.log")[:body]).to be_present + end + + subject + + ::Fog::Storage.new(JobArtifactUploader.object_store_credentials).tap do |connection| + expect { connection.get_object('artifacts', "tmp/builds/#{build.id}/chunks/0.log")[:body] }.to raise_error(Excon::Error::NotFound) + expect { connection.get_object('artifacts', "tmp/builds/#{build.id}/chunks/1.log")[:body] }.to raise_error(Excon::Error::NotFound) + end + end + end +end diff --git a/spec/models/service_spec.rb b/spec/models/service_spec.rb index 49a0a46eb85..25e9577967b 100644 --- a/spec/models/service_spec.rb +++ b/spec/models/service_spec.rb @@ -843,5 +843,24 @@ RSpec.describe Service do service.log_error(test_message, additional_argument: 'some argument') end + + context 'when project is nil' do + let(:project) { nil } + let(:arguments) do + { + service_class: service.class.name, + project_path: nil, + project_id: nil, + message: test_message, + additional_argument: 'some argument' + } + end + + it 'logs info messages using json logger' do + expect(Gitlab::JsonLogger).to receive(:info).with(arguments) + + service.log_info(test_message, additional_argument: 'some argument') + end + end end end |