diff options
Diffstat (limited to 'spec/config')
-rw-r--r-- | spec/config/object_store_settings_spec.rb | 102 | ||||
-rw-r--r-- | spec/config/settings_spec.rb | 22 |
2 files changed, 121 insertions, 3 deletions
diff --git a/spec/config/object_store_settings_spec.rb b/spec/config/object_store_settings_spec.rb index 67e77aa4466..4a800261625 100644 --- a/spec/config/object_store_settings_spec.rb +++ b/spec/config/object_store_settings_spec.rb @@ -4,9 +4,105 @@ require 'spec_helper' require Rails.root.join('config', 'object_store_settings.rb') RSpec.describe ObjectStoreSettings do - describe '.parse' do + describe '#parse!' do + let(:settings) { Settingslogic.new(config) } + + subject { described_class.new(settings).parse! } + + context 'with valid config' do + let(:connection) do + { + 'provider' => 'AWS', + 'aws_access_key_id' => 'AWS_ACCESS_KEY_ID', + 'aws_secret_access_key' => 'AWS_SECRET_ACCESS_KEY', + 'region' => 'us-east-1' + } + end + let(:config) do + { + 'lfs' => { 'enabled' => true }, + 'artifacts' => { 'enabled' => true }, + 'external_diffs' => { 'enabled' => false }, + 'object_store' => { + 'enabled' => true, + 'connection' => connection, + 'proxy_download' => true, + 'objects' => { + 'artifacts' => { + 'bucket' => 'artifacts', + 'proxy_download' => false + }, + 'lfs' => { + 'bucket' => 'lfs-objects' + }, + 'external_diffs' => { + 'bucket' => 'external_diffs', + 'enabled' => false + } + } + } + } + end + + it 'sets correct default values' do + subject + + expect(settings.artifacts['enabled']).to be true + expect(settings.artifacts['object_store']['enabled']).to be true + expect(settings.artifacts['object_store']['connection']).to eq(connection) + expect(settings.artifacts['object_store']['direct_upload']).to be true + expect(settings.artifacts['object_store']['background_upload']).to be false + expect(settings.artifacts['object_store']['proxy_download']).to be false + expect(settings.artifacts['object_store']['remote_directory']).to eq('artifacts') + + expect(settings.lfs['enabled']).to be true + expect(settings.lfs['object_store']['enabled']).to be true + expect(settings.lfs['object_store']['connection']).to eq(connection) + expect(settings.lfs['object_store']['direct_upload']).to be true + expect(settings.lfs['object_store']['background_upload']).to be false + expect(settings.lfs['object_store']['proxy_download']).to be true + expect(settings.lfs['object_store']['remote_directory']).to eq('lfs-objects') + + expect(settings.external_diffs['enabled']).to be false + expect(settings.external_diffs['object_store']['enabled']).to be false + expect(settings.external_diffs['object_store']['remote_directory']).to eq('external_diffs') + end + + it 'raises an error when a bucket is missing' do + config['object_store']['objects']['lfs'].delete('bucket') + + expect { subject }.to raise_error(/Object storage for lfs must have a bucket specified/) + end + + context 'with legacy config' do + let(:legacy_settings) do + { + 'enabled' => true, + 'remote_directory' => 'some-bucket', + 'direct_upload' => true, + 'background_upload' => false, + 'proxy_download' => false + } + end + + before do + settings.lfs['object_store'] = described_class.legacy_parse(legacy_settings) + end + + it 'does not alter config if legacy settings are specified' do + subject + + expect(settings.artifacts['object_store']).to be_nil + expect(settings.lfs['object_store']['remote_directory']).to eq('some-bucket') + expect(settings.external_diffs['object_store']).to be_nil + end + end + end + end + + describe '.legacy_parse' do it 'sets correct default values' do - settings = described_class.parse(nil) + settings = described_class.legacy_parse(nil) expect(settings['enabled']).to be false expect(settings['direct_upload']).to be false @@ -20,7 +116,7 @@ RSpec.describe ObjectStoreSettings do 'remote_directory' => 'artifacts' }) - settings = described_class.parse(original_settings) + settings = described_class.legacy_parse(original_settings) expect(settings['enabled']).to be true expect(settings['direct_upload']).to be false diff --git a/spec/config/settings_spec.rb b/spec/config/settings_spec.rb index 9db3d35cbe5..ed873478fc9 100644 --- a/spec/config/settings_spec.rb +++ b/spec/config/settings_spec.rb @@ -112,4 +112,26 @@ RSpec.describe Settings do end end end + + describe '.cron_for_usage_ping' do + it 'returns correct crontab for some manually calculated example' do + allow(Gitlab::CurrentSettings) + .to receive(:uuid) { 'd9e2f4e8-db1f-4e51-b03d-f427e1965c4a'} + + expect(described_class.send(:cron_for_usage_ping)).to eq('21 18 * * 4') + end + + it 'returns min, hour, day in the valid range' do + allow(Gitlab::CurrentSettings) + .to receive(:uuid) { SecureRandom.uuid } + + 10.times do + cron = described_class.send(:cron_for_usage_ping).split(/\s/) + + expect(cron[0].to_i).to be_between(0, 59) + expect(cron[1].to_i).to be_between(0, 23) + expect(cron[4].to_i).to be_between(0, 6) + end + end + end end |