Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-03 18:08:33 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-03 18:08:33 +0300
commit511e761b41b81484c85e3d125f45873ce38e9201 (patch)
tree6bb98a6356de6e1d736951d2eef6ec83e6aa3dd2 /spec/lib
parent4247e67be1faa9d52691757dad954a7fa63e8bfe (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/gitlab/application_context_spec.rb82
-rw-r--r--spec/lib/gitlab/ci/yaml_processor_spec.rb13
-rw-r--r--spec/lib/gitlab/import_export/project_tree_restorer_spec.rb5
-rw-r--r--spec/lib/gitlab/profiler_spec.rb2
-rw-r--r--spec/lib/gitlab/sidekiq_middleware/correlation_injector_spec.rb49
-rw-r--r--spec/lib/gitlab/sidekiq_middleware/correlation_logger_spec.rb35
-rw-r--r--spec/lib/gitlab/sidekiq_middleware_spec.rb4
-rw-r--r--spec/lib/gitlab/utils/lazy_attributes_spec.rb70
8 files changed, 169 insertions, 91 deletions
diff --git a/spec/lib/gitlab/application_context_spec.rb b/spec/lib/gitlab/application_context_spec.rb
new file mode 100644
index 00000000000..1c8fcb8d737
--- /dev/null
+++ b/spec/lib/gitlab/application_context_spec.rb
@@ -0,0 +1,82 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Gitlab::ApplicationContext do
+ describe '.with_context' do
+ it 'yields the block' do
+ expect { |b| described_class.with_context({}, &b) }.to yield_control
+ end
+
+ it 'passes the expected context on to labkit' do
+ fake_proc = duck_type(:call)
+ expected_context = hash_including(user: fake_proc, project: fake_proc, root_namespace: fake_proc)
+
+ expect(Labkit::Context).to receive(:with_context).with(expected_context)
+
+ described_class.with_context(
+ user: build(:user),
+ project: build(:project),
+ namespace: build(:namespace)) {}
+ end
+
+ it 'raises an error when passing invalid options' do
+ expect { described_class.with_context(no: 'option') {} }.to raise_error(ArgumentError)
+ end
+ end
+
+ describe '.push' do
+ it 'passes the expected context on to labkit' do
+ fake_proc = duck_type(:call)
+ expected_context = hash_including(user: fake_proc, project: fake_proc, root_namespace: fake_proc)
+
+ expect(Labkit::Context).to receive(:push).with(expected_context)
+
+ described_class.push(user: build(:user))
+ end
+
+ it 'raises an error when passing invalid options' do
+ expect { described_class.push(no: 'option')}.to raise_error(ArgumentError)
+ end
+ end
+
+ describe '#to_lazy_hash' do
+ let(:user) { build(:user) }
+ let(:project) { build(:project) }
+ let(:namespace) { build(:group) }
+ let(:subgroup) { build(:group, parent: namespace) }
+
+ def result(context)
+ context.to_lazy_hash.transform_values { |v| v.call }
+ end
+
+ it 'does not call the attributes until needed' do
+ fake_proc = double('Proc')
+
+ expect(fake_proc).not_to receive(:call)
+
+ described_class.new(user: fake_proc, project: fake_proc, namespace: fake_proc).to_lazy_hash
+ end
+
+ it 'correctly loads the expected values when they are wrapped in a block' do
+ context = described_class.new(user: -> { user }, project: -> { project }, namespace: -> { subgroup })
+
+ expect(result(context))
+ .to include(user: user.username, project: project.full_path, root_namespace: namespace.full_path)
+ end
+
+ it 'correctly loads the expected values when passed directly' do
+ context = described_class.new(user: user, project: project, namespace: subgroup)
+
+ expect(result(context))
+ .to include(user: user.username, project: project.full_path, root_namespace: namespace.full_path)
+ end
+
+ it 'falls back to a projects namespace when a project is passed but no namespace' do
+ context = described_class.new(project: project)
+
+ expect(result(context))
+ .to include(project: project.full_path, root_namespace: project.full_path_components.first)
+ end
+ end
+end
diff --git a/spec/lib/gitlab/ci/yaml_processor_spec.rb b/spec/lib/gitlab/ci/yaml_processor_spec.rb
index f61b28b06c8..2e470d59345 100644
--- a/spec/lib/gitlab/ci/yaml_processor_spec.rb
+++ b/spec/lib/gitlab/ci/yaml_processor_spec.rb
@@ -1270,6 +1270,19 @@ module Gitlab
expect(builds.first[:options][:artifacts][:when]).to eq(when_state)
end
end
+
+ it "gracefully handles errors in artifacts type" do
+ config = <<~YAML
+ test:
+ script:
+ - echo "Hello world"
+ artifacts:
+ - paths:
+ - test/
+ YAML
+
+ expect { described_class.new(config) }.to raise_error(described_class::ValidationError)
+ end
end
describe '#environment' do
diff --git a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
index ec1b935ad63..dae5b028c15 100644
--- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
@@ -654,13 +654,10 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
let(:user) { create(:user) }
let!(:project) { create(:project, :builds_disabled, :issues_disabled, name: 'project', path: 'project') }
let(:project_tree_restorer) { described_class.new(user: user, shared: shared, project: project) }
- let(:correlation_id) { 'my-correlation-id' }
before do
setup_import_export_config('with_invalid_records')
- # Import is running from the rake task, `correlation_id` is not assigned
- expect(Labkit::Correlation::CorrelationId).to receive(:new_id).and_return(correlation_id)
subject
end
@@ -682,7 +679,7 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do
expect(import_failure.relation_index).to be_present
expect(import_failure.exception_class).to eq('ActiveRecord::RecordInvalid')
expect(import_failure.exception_message).to be_present
- expect(import_failure.correlation_id_value).to eq('my-correlation-id')
+ expect(import_failure.correlation_id_value).not_to be_empty
expect(import_failure.created_at).to be_present
end
end
diff --git a/spec/lib/gitlab/profiler_spec.rb b/spec/lib/gitlab/profiler_spec.rb
index c27e3ca7ace..8f6fb6eda65 100644
--- a/spec/lib/gitlab/profiler_spec.rb
+++ b/spec/lib/gitlab/profiler_spec.rb
@@ -84,7 +84,7 @@ describe Gitlab::Profiler do
expect(severity).to eq(Logger::DEBUG)
expect(message).to include('public').and include(described_class::FILTERED_STRING)
expect(message).not_to include(private_token)
- end.twice
+ end.at_least(1) # This spec could be wrapped in more blocks in the future
custom_logger.debug("public #{private_token}")
end
diff --git a/spec/lib/gitlab/sidekiq_middleware/correlation_injector_spec.rb b/spec/lib/gitlab/sidekiq_middleware/correlation_injector_spec.rb
deleted file mode 100644
index d5ed939485a..00000000000
--- a/spec/lib/gitlab/sidekiq_middleware/correlation_injector_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Gitlab::SidekiqMiddleware::CorrelationInjector do
- class TestWorker
- include ApplicationWorker
- end
-
- before do |example|
- Sidekiq.client_middleware do |chain|
- chain.add described_class
- end
- end
-
- after do |example|
- Sidekiq.client_middleware do |chain|
- chain.remove described_class
- end
-
- Sidekiq::Queues.clear_all
- end
-
- around do |example|
- Sidekiq::Testing.fake! do
- example.run
- end
- end
-
- it 'injects into payload the correlation id' do
- expect_next_instance_of(described_class) do |instance|
- expect(instance).to receive(:call).and_call_original
- end
-
- Labkit::Correlation::CorrelationId.use_id('new-correlation-id') do
- TestWorker.perform_async(1234)
- end
-
- expected_job_params = {
- "class" => "TestWorker",
- "args" => [1234],
- "correlation_id" => "new-correlation-id"
- }
-
- expect(Sidekiq::Queues.jobs_by_worker).to a_hash_including(
- "TestWorker" => a_collection_containing_exactly(
- a_hash_including(expected_job_params)))
- end
-end
diff --git a/spec/lib/gitlab/sidekiq_middleware/correlation_logger_spec.rb b/spec/lib/gitlab/sidekiq_middleware/correlation_logger_spec.rb
deleted file mode 100644
index 27eea963402..00000000000
--- a/spec/lib/gitlab/sidekiq_middleware/correlation_logger_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe Gitlab::SidekiqMiddleware::CorrelationLogger do
- class TestWorker
- include ApplicationWorker
- end
-
- before do |example|
- Sidekiq::Testing.server_middleware do |chain|
- chain.add described_class
- end
- end
-
- after do |example|
- Sidekiq::Testing.server_middleware do |chain|
- chain.remove described_class
- end
- end
-
- it 'injects into payload the correlation id', :sidekiq_might_not_need_inline do
- expect_any_instance_of(described_class).to receive(:call).and_call_original
-
- expect_any_instance_of(TestWorker).to receive(:perform).with(1234) do
- expect(Labkit::Correlation::CorrelationId.current_id).to eq('new-correlation-id')
- end
-
- Sidekiq::Client.push(
- 'queue' => 'test',
- 'class' => TestWorker,
- 'args' => [1234],
- 'correlation_id' => 'new-correlation-id')
- end
-end
diff --git a/spec/lib/gitlab/sidekiq_middleware_spec.rb b/spec/lib/gitlab/sidekiq_middleware_spec.rb
index aef472e0648..ef4a898bdb6 100644
--- a/spec/lib/gitlab/sidekiq_middleware_spec.rb
+++ b/spec/lib/gitlab/sidekiq_middleware_spec.rb
@@ -38,7 +38,7 @@ describe Gitlab::SidekiqMiddleware do
[
Gitlab::SidekiqMiddleware::Monitor,
Gitlab::SidekiqMiddleware::BatchLoader,
- Gitlab::SidekiqMiddleware::CorrelationLogger,
+ Labkit::Middleware::Sidekiq::Server,
Gitlab::SidekiqMiddleware::InstrumentationLogger,
Gitlab::SidekiqStatus::ServerMiddleware,
Gitlab::SidekiqMiddleware::Metrics,
@@ -120,7 +120,7 @@ describe Gitlab::SidekiqMiddleware do
# This test ensures that this does not happen
it "invokes the chain" do
expect_any_instance_of(Gitlab::SidekiqStatus::ClientMiddleware).to receive(:call).with(*middleware_expected_args).once.and_call_original
- expect_any_instance_of(Gitlab::SidekiqMiddleware::CorrelationInjector).to receive(:call).with(*middleware_expected_args).once.and_call_original
+ expect_any_instance_of(Labkit::Middleware::Sidekiq::Client).to receive(:call).with(*middleware_expected_args).once.and_call_original
expect { |b| chain.invoke(worker_class_arg, job, queue, redis_pool, &b) }.to yield_control.once
end
diff --git a/spec/lib/gitlab/utils/lazy_attributes_spec.rb b/spec/lib/gitlab/utils/lazy_attributes_spec.rb
new file mode 100644
index 00000000000..c0005c194c4
--- /dev/null
+++ b/spec/lib/gitlab/utils/lazy_attributes_spec.rb
@@ -0,0 +1,70 @@
+# frozen_string_literal: true
+require 'fast_spec_helper'
+require 'active_support/concern'
+
+describe Gitlab::Utils::LazyAttributes do
+ subject(:klass) do
+ Class.new do
+ include Gitlab::Utils::LazyAttributes
+
+ lazy_attr_reader :number, type: Numeric
+ lazy_attr_reader :reader_1, :reader_2
+ lazy_attr_accessor :incorrect_type, :string_attribute, :accessor_2, type: String
+
+ def initialize
+ @number = -> { 1 }
+ @reader_1, @reader_2 = 'reader_1', -> { 'reader_2' }
+ @incorrect_type, @accessor_2 = -> { :incorrect_type }, -> { 'accessor_2' }
+ end
+ end
+ end
+
+ context 'class methods' do
+ it { is_expected.to respond_to(:lazy_attr_reader, :lazy_attr_accessor) }
+ it { is_expected.not_to respond_to(:define_lazy_reader, :define_lazy_writer) }
+ end
+
+ context 'instance methods' do
+ subject(:instance) { klass.new }
+
+ it do
+ is_expected.to respond_to(:number, :reader_1, :reader_2, :incorrect_type,
+ :incorrect_type=, :accessor_2, :accessor_2=,
+ :string_attribute, :string_attribute=)
+ end
+
+ context 'reading attributes' do
+ it 'returns the correct values for procs', :aggregate_failures do
+ expect(instance.number).to eq(1)
+ expect(instance.reader_2).to eq('reader_2')
+ expect(instance.accessor_2).to eq('accessor_2')
+ end
+
+ it 'does not return the value if the type did not match what was specified' do
+ expect(instance.incorrect_type).to be_nil
+ end
+
+ it 'only calls the block once even if it returned `nil`', :aggregate_failures do
+ expect(instance.instance_variable_get('@number')).to receive(:call).once.and_call_original
+ expect(instance.instance_variable_get('@accessor_2')).to receive(:call).once.and_call_original
+ expect(instance.instance_variable_get('@incorrect_type')).to receive(:call).once.and_call_original
+
+ 2.times do
+ instance.number
+ instance.incorrect_type
+ instance.accessor_2
+ end
+ end
+ end
+
+ context 'writing attributes' do
+ it 'sets the correct values', :aggregate_failures do
+ instance.string_attribute = -> { 'updated 1' }
+ instance.accessor_2 = nil
+
+ expect(instance.string_attribute).to eq('updated 1')
+ expect(instance.accessor_2).to be_nil
+ end
+ end
+ end
+end