diff --git a/devops-service/spec/executors/server_executor_spec.rb b/devops-service/spec/executors/server_executor_spec.rb index e2abc2a..a7ed918 100644 --- a/devops-service/spec/executors/server_executor_spec.rb +++ b/devops-service/spec/executors/server_executor_spec.rb @@ -37,6 +37,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec end end + + describe '.symbolic_error_code' do it 'returns symbol given an integer' do expect(described_class.symbolic_error_code(2)).to eq :server_bootstrap_fail @@ -47,6 +49,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec end end + + describe '#create_server_object' do it 'builds Server object' do server = executor.create_server_object('created_by' => 'me') @@ -57,6 +61,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec end end + + describe '#create_server' do let!(:without_bootstrap) { @without_bootstrap = true } let!(:run_list) { @run_list = %w(role[asd]) } @@ -266,6 +272,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec end end + + describe '#two_phase_bootstrap', stubbed_knife: true do subject { executor.two_phase_bootstrap({}) } @@ -376,6 +384,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec end end + + describe '#deploy_server_with_tags', stubbed_knife: true do let(:current_tags) { @current_tags } let(:initial_tags) { %w(a b) } @@ -430,6 +440,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec end end + + describe '#deploy_server', stubbed_knife: true, stubbed_connector: true do let(:deploy_info) { @deploy_info } let(:json_file_name) { 'json.json' } @@ -564,7 +576,126 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec expect(subject).to eq 1 end end + end + + describe '#delete_from_chef_server', stubbed_knife: true do + subject { executor.delete_from_chef_server('foo') } + before do + allow(stubbed_knife).to receive(:chef_client_delete) + allow(stubbed_knife).to receive(:chef_node_delete) + subject + end + + it 'returns hash with :chef_node and :chef_client keys' do + expect(subject).to be_a(Hash).and include(:chef_node, :chef_client) + end + + it 'calls to :chef_node_delete and :chef_client_delete' do + expect(stubbed_knife).to have_received(:chef_client_delete) + expect(stubbed_knife).to have_received(:chef_node_delete) + end + end + + + describe '#delete_server' do + let(:delete_server) { executor.delete_server } + + context 'when server is static' do + before do + server.provider = 'static' + allow(stubbed_connector).to receive(:server_delete).with(server.id) + allow(executor).to receive(:unbootstrap) + end + + it 'performs unbootstrap' do + expect(executor).to receive(:unbootstrap) + delete_server + end + + it 'deletes server from mongo' do + expect(stubbed_connector).to receive(:server_delete).with(server.id) + delete_server + end + + it 'returns message and nil' do + expect(delete_server.first).to be_a(String) + expect(delete_server.last).to be nil + end + + it "doesn't try to remove it from cloud" do + expect{delete_server}.not_to raise_error + end + end + + context "when server isn't static", stubbed_knife: true do + before do + allow(server).to receive_message_chain('provider_instance.delete_server') + allow(stubbed_connector).to receive(:server_delete).with(server.id) + allow(stubbed_knife).to receive(:chef_node_delete) + allow(stubbed_knife).to receive(:chef_client_delete) + end + + it 'deletes from info about note chef server' do + allow(executor).to receive(:delete_from_chef_server).and_call_original + expect(executor).to receive(:delete_from_chef_server) + delete_server + end + + it "doesn't unbootstrap server" do + expect(executor).not_to receive(:unbootstrap) + delete_server + end + + it 'deletes server from cloud' do + expect(server).to receive_message_chain('provider_instance.delete_server').with(server) + delete_server + end + + it "doesn't raise error if server wasn't found in cloud" do + allow(server).to receive_message_chain('provider_instance.name') + allow(server).to receive_message_chain('provider_instance.delete_server') { + raise Fog::Compute::OpenStack::NotFound + } + expect { delete_server }.not_to raise_error + end + + it 'deletes server from mongo' do + expect(stubbed_connector).to receive(:server_delete).with(server.id) + delete_server + end + + it 'returns message and hash with :chef_node, :chef_client and :server keys' do + expect(delete_server.first).to be_a(String) + expect(delete_server.last).to be_a(Hash).and include(:chef_client, :chef_node, :server) + end + end + end + + + describe '#rollback' do + before do + allow(executor).to receive(:delete_from_chef_server) { {} } + allow(server).to receive_message_chain('provider_instance.delete_server') + end + + it "does nothing if server.id is nil" do + server.id = nil + expect(executor).not_to receive(:delete_from_chef_server) + expect(server).not_to receive(:provider_instance) + executor.roll_back + end + + it 'deletes node from chef server and instance from cloud' do + expect(executor).to receive(:delete_from_chef_server) + expect(server).to receive_message_chain('provider_instance.delete_server') + executor.roll_back + end + + it "doesn't raise if deleting server in cloud raises an error" do + allow(server).to receive_message_chain('provider_instance.delete_server') { raise } + expect { executor.roll_back }.not_to raise_error + end end end \ No newline at end of file diff --git a/devops-service/spec/shared_contexts/stubbed_connector.rb b/devops-service/spec/shared_contexts/stubbed_connector.rb index 89ec7f9..49b202a 100644 --- a/devops-service/spec/shared_contexts/stubbed_connector.rb +++ b/devops-service/spec/shared_contexts/stubbed_connector.rb @@ -1,5 +1,5 @@ RSpec.shared_context 'stubbed calls to connector', stubbed_connector: true do - let(:stubbed_connector) { double('Connector') } + let(:stubbed_connector) { instance_double(MongoConnector) } before do allow(Devops::Db).to receive(:connector) { stubbed_connector } end diff --git a/devops-service/spec/shared_contexts/stubbed_logger.rb b/devops-service/spec/shared_contexts/stubbed_logger.rb index f2d79e9..486caa1 100644 --- a/devops-service/spec/shared_contexts/stubbed_logger.rb +++ b/devops-service/spec/shared_contexts/stubbed_logger.rb @@ -3,5 +3,6 @@ RSpec.shared_context 'stubbed calls to logger', stubbed_logger: true do allow(DevopsLogger).to receive_message_chain('logger.debug') allow(DevopsLogger).to receive_message_chain('logger.info') allow(DevopsLogger).to receive_message_chain('logger.error') + allow(DevopsLogger).to receive_message_chain('logger.warn') end end \ No newline at end of file