From 5b139b5235eac64a7d4834ea7e037a7d057b531c Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Thu, 17 Mar 2016 12:49:19 +0200 Subject: [PATCH 1/2] simplify specs --- devops-service/Guardfile | 1 + .../spec/executors/server_executor_spec.rb | 25 ++++++++++--------- ...uire_shared_specs.rb => type_connector.rb} | 4 --- .../spec/shared_contexts/type_model.rb | 3 +++ .../spec/shared_contexts/type_worker.rb | 6 +++++ .../chef_node_name_builder_spec.rb | 0 .../stack_servers_bootstrapper_spec.rb | 0 .../stack_servers_persister_spec.rb | 0 .../stack_synchronizer_spec.rb | 0 .../workers/stack_bootstrap_worker_spec.rb | 20 +++++---------- 10 files changed, 29 insertions(+), 30 deletions(-) rename devops-service/spec/shared_contexts/{auto_require_shared_specs.rb => type_connector.rb} (52%) create mode 100644 devops-service/spec/shared_contexts/type_model.rb create mode 100644 devops-service/spec/shared_contexts/type_worker.rb rename devops-service/spec/workers/{ => stack_bootstrap}/chef_node_name_builder_spec.rb (100%) rename devops-service/spec/workers/{ => stack_bootstrap}/stack_servers_bootstrapper_spec.rb (100%) rename devops-service/spec/workers/{ => stack_bootstrap}/stack_servers_persister_spec.rb (100%) rename devops-service/spec/workers/{ => stack_bootstrap}/stack_synchronizer_spec.rb (100%) diff --git a/devops-service/Guardfile b/devops-service/Guardfile index 82943a3..513c222 100644 --- a/devops-service/Guardfile +++ b/devops-service/Guardfile @@ -43,5 +43,6 @@ guard :rspec, cmd: "rspec" do # Devops files watch(%r{db/.+\.rb}) { rspec.spec_dir } watch(%r{lib/executors/.+\.rb}) { "#{rspec.spec_dir}/executors" } + watch(%r{workers/.+\.rb}) { "#{rspec.spec_dir}/workers" } watch(%r{workers/stack_bootstrap/.+\.rb}) { "#{rspec.spec_dir}/workers" } end diff --git a/devops-service/spec/executors/server_executor_spec.rb b/devops-service/spec/executors/server_executor_spec.rb index d3ff57a..d6f2500 100644 --- a/devops-service/spec/executors/server_executor_spec.rb +++ b/devops-service/spec/executors/server_executor_spec.rb @@ -79,15 +79,14 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec describe '#create_server' do let(:image) { double('Image instance', remote_user: 'remote_user') } - let(:create_server) { - executor.create_server( - 'created_by' => 'user', - 'run_list' => @run_list, - 'name' => 'node_name', - 'key' => @key, - 'without_bootstrap' => @without_bootstrap - ) - } + let(:create_server_options) { { + 'created_by' => 'user', + 'run_list' => @run_list, + 'name' => 'node_name', + 'key' => @key, + 'without_bootstrap' => @without_bootstrap + } } + let(:create_server) { executor.create_server(create_server_options) } before do allow(provider).to receive(:create_server) { true } @@ -150,7 +149,7 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec create_server end - context 'without_bootstrap option is false' do + context 'without_bootstrap option is false or nil' do it 'launches bootstrap' do @without_bootstrap = false allow(image).to receive(:bootstrap_template) { 'template' } @@ -158,9 +157,7 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec expect(executor).to receive(:two_phase_bootstrap) create_server end - end - context 'without_bootstrap option is nil' do it 'launches bootstrap' do @without_bootstrap = nil allow(image).to receive(:bootstrap_template) { 'template' } @@ -168,6 +165,10 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec expect(executor).to receive(:two_phase_bootstrap) create_server end + + # it 'passes additional deployers to bootstrap' do + # executor = described_class.new(server, output) + # end end context 'without_bootstrap option is true' do diff --git a/devops-service/spec/shared_contexts/auto_require_shared_specs.rb b/devops-service/spec/shared_contexts/type_connector.rb similarity index 52% rename from devops-service/spec/shared_contexts/auto_require_shared_specs.rb rename to devops-service/spec/shared_contexts/type_connector.rb index eeabd9a..9f15e07 100644 --- a/devops-service/spec/shared_contexts/auto_require_shared_specs.rb +++ b/devops-service/spec/shared_contexts/type_connector.rb @@ -1,7 +1,3 @@ -RSpec.shared_context 'auto_model', type: :model do - require 'spec/models/shared_validation_specs' -end - RSpec.shared_context 'auto_connector', type: :connector do require 'spec/connectors/shared_connectors_specs' end \ No newline at end of file diff --git a/devops-service/spec/shared_contexts/type_model.rb b/devops-service/spec/shared_contexts/type_model.rb new file mode 100644 index 0000000..4befc1a --- /dev/null +++ b/devops-service/spec/shared_contexts/type_model.rb @@ -0,0 +1,3 @@ +RSpec.shared_context 'type_model', type: :model do + require 'spec/models/shared_validation_specs' +end \ No newline at end of file diff --git a/devops-service/spec/shared_contexts/type_worker.rb b/devops-service/spec/shared_contexts/type_worker.rb new file mode 100644 index 0000000..59d5644 --- /dev/null +++ b/devops-service/spec/shared_contexts/type_worker.rb @@ -0,0 +1,6 @@ +RSpec.shared_context 'type_worker', type: :worker do + before do + allow(worker).to receive(:call).and_yield + worker.out = double(:out, puts: nil, flush: nil) + end +end \ No newline at end of file diff --git a/devops-service/spec/workers/chef_node_name_builder_spec.rb b/devops-service/spec/workers/stack_bootstrap/chef_node_name_builder_spec.rb similarity index 100% rename from devops-service/spec/workers/chef_node_name_builder_spec.rb rename to devops-service/spec/workers/stack_bootstrap/chef_node_name_builder_spec.rb diff --git a/devops-service/spec/workers/stack_servers_bootstrapper_spec.rb b/devops-service/spec/workers/stack_bootstrap/stack_servers_bootstrapper_spec.rb similarity index 100% rename from devops-service/spec/workers/stack_servers_bootstrapper_spec.rb rename to devops-service/spec/workers/stack_bootstrap/stack_servers_bootstrapper_spec.rb diff --git a/devops-service/spec/workers/stack_servers_persister_spec.rb b/devops-service/spec/workers/stack_bootstrap/stack_servers_persister_spec.rb similarity index 100% rename from devops-service/spec/workers/stack_servers_persister_spec.rb rename to devops-service/spec/workers/stack_bootstrap/stack_servers_persister_spec.rb diff --git a/devops-service/spec/workers/stack_synchronizer_spec.rb b/devops-service/spec/workers/stack_bootstrap/stack_synchronizer_spec.rb similarity index 100% rename from devops-service/spec/workers/stack_synchronizer_spec.rb rename to devops-service/spec/workers/stack_bootstrap/stack_synchronizer_spec.rb diff --git a/devops-service/spec/workers/stack_bootstrap_worker_spec.rb b/devops-service/spec/workers/stack_bootstrap_worker_spec.rb index 2724095..fc18301 100644 --- a/devops-service/spec/workers/stack_bootstrap_worker_spec.rb +++ b/devops-service/spec/workers/stack_bootstrap_worker_spec.rb @@ -1,9 +1,6 @@ require 'workers/stack_bootstrap_worker' RSpec.describe StackBootstrapWorker, type: :worker, stubbed_connector: true do - let(:out) { double(:out, puts: nil, flush: nil) } - let(:file) { 'temp.txt' } - let(:stack_attrs) { attributes_for(:stack_ec2).stringify_keys } let(:perform_with_bootstrap) { worker.perform('stack_attributes' => stack_attrs) } let(:perform_without_bootstrap) { worker.perform('stack_attributes' => stack_attrs.merge('without_bootstrap' => true)) } @@ -14,34 +11,29 @@ RSpec.describe StackBootstrapWorker, type: :worker, stubbed_connector: true do before do allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(ec2)) - allow(stubbed_connector).to receive(:save_report) - allow(stubbed_connector).to receive(:report) { build(:report) } - allow(stubbed_connector).to receive(:report_update) - allow(stubbed_connector).to receive(:stack_insert) + allow(worker).to receive(:update_report) allow(worker).to receive(:stack_synchronizer) { stack_synchronizer } allow(worker).to receive(:stack_servers_bootstrapper) { stack_servers_bootstrapper } allow(worker).to receive(:stack_servers_persister) { stack_servers_persister } - allow(worker).to receive(:call).and_yield - worker.out = out + + allow(stubbed_connector).to receive(:stack_insert) allow(Devops::Model::StackEc2).to receive(:create) { Devops::Model::StackEc2.new(stack_attrs) } end it 'requires "stack_attributes" in options' do - expect{ - worker.perform({}) - }.to raise_error KeyError + expect{ worker.perform({}) }.to raise_error KeyError end it 'updates report about operation' do - expect(stubbed_connector).to receive(:report_update).with(instance_of(Devops::Model::Report)) + expect(worker).to receive(:update_report) perform_without_bootstrap end it 'updates report about operation, creates stack and persists stack servers' do allow(worker).to receive(:create_stack).and_call_original - expect(stubbed_connector).to receive(:report_update).with(instance_of(Devops::Model::Report)).ordered + expect(worker).to receive(:update_report).ordered expect(worker).to receive(:create_stack).ordered expect(stack_servers_persister).to receive(:persist).ordered perform_without_bootstrap From 6c40538a1653a6b2b37fb5286010ee7850e2014c Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Thu, 17 Mar 2016 12:49:35 +0200 Subject: [PATCH 2/2] add CreateServerWorker specs --- .../spec/workers/create_server_worker_spec.rb | 30 +++++++++++++++++++ .../workers/create_server_worker.rb | 21 +++++++------ 2 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 devops-service/spec/workers/create_server_worker_spec.rb diff --git a/devops-service/spec/workers/create_server_worker_spec.rb b/devops-service/spec/workers/create_server_worker_spec.rb new file mode 100644 index 0000000..7bbd66a --- /dev/null +++ b/devops-service/spec/workers/create_server_worker_spec.rb @@ -0,0 +1,30 @@ +require 'workers/create_server_worker' + +RSpec.describe CreateServerWorker, type: :worker, stubbed_connector: true do + let(:worker) { described_class.new } + let(:perform) { worker.perform('owner' => 'user', 'server_attrs' => @server_attrs) } + + before do + allow(worker).to receive(:update_report) + allow_any_instance_of(Devops::Executor::ServerExecutor).to receive(:create_server) + @server_attrs = {'deploy_env' => 'foo'} + allow(stubbed_connector).to receive(:project) { build(:project) } + end + + it 'requires server attrs and owner' do + expect{ worker.perform('owner' => 'user') }.to raise_error KeyError + expect{ worker.perform('server_attrs' => {}) }.to raise_error KeyError + end + + it 'updates report' do + expect(worker).to receive(:update_report) + perform + end + + it 'calls #create_server with server attrs merged with "created_by" on executor' do + expect_any_instance_of(Devops::Executor::ServerExecutor).to receive(:create_server) do |caller, param| + expect(param).to eq @server_attrs.merge('created_by' => 'user') + end + perform + end +end \ No newline at end of file diff --git a/devops-service/workers/create_server_worker.rb b/devops-service/workers/create_server_worker.rb index 78c0e59..9326cc2 100644 --- a/devops-service/workers/create_server_worker.rb +++ b/devops-service/workers/create_server_worker.rb @@ -9,24 +9,27 @@ class CreateServerWorker < Worker # options must contain 'server_attrs', 'owner' def perform(options) call do - server_attrs = options.fetch('server_attrs') owner = options.fetch('owner') + server_attrs = options.fetch('server_attrs').merge('created_by' => owner) - project = mongo.project(server_attrs["project"]) - env = project.deploy_env(server_attrs["deploy_env"]) + project = mongo.project(server_attrs['project']) + env = project.deploy_env(server_attrs['deploy_env']) report = save_report(project, env, owner) - e = Devops::Executor::ServerExecutor.new(nil, out) - e.project = project - e.report = report - e.deploy_env = env - server_attrs["created_by"] = owner - e.create_server(server_attrs) + executor(project, env, report).create_server(server_attrs) end end private + def executor(project, env, report) + Devops::Executor::ServerExecutor.new(nil, out).tap do |executor| + executor.project = project + executor.deploy_env = env + executor.report = report + end + end + def save_report(project, env, owner) update_report( "created_by" => owner,