add specs for ServerExecutor#delete_server and #roll_back

This commit is contained in:
Anton Chuchkalov 2016-01-19 16:17:06 +03:00
parent a88fa8e2f6
commit db1ccc2e33
3 changed files with 133 additions and 1 deletions

View File

@ -37,6 +37,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
end end
end end
describe '.symbolic_error_code' do describe '.symbolic_error_code' do
it 'returns symbol given an integer' do it 'returns symbol given an integer' do
expect(described_class.symbolic_error_code(2)).to eq :server_bootstrap_fail 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
end end
describe '#create_server_object' do describe '#create_server_object' do
it 'builds Server object' do it 'builds Server object' do
server = executor.create_server_object('created_by' => 'me') server = executor.create_server_object('created_by' => 'me')
@ -57,6 +61,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
end end
end end
describe '#create_server' do describe '#create_server' do
let!(:without_bootstrap) { @without_bootstrap = true } let!(:without_bootstrap) { @without_bootstrap = true }
let!(:run_list) { @run_list = %w(role[asd]) } let!(:run_list) { @run_list = %w(role[asd]) }
@ -266,6 +272,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
end end
end end
describe '#two_phase_bootstrap', stubbed_knife: true do describe '#two_phase_bootstrap', stubbed_knife: true do
subject { executor.two_phase_bootstrap({}) } subject { executor.two_phase_bootstrap({}) }
@ -376,6 +384,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
end end
end end
describe '#deploy_server_with_tags', stubbed_knife: true do describe '#deploy_server_with_tags', stubbed_knife: true do
let(:current_tags) { @current_tags } let(:current_tags) { @current_tags }
let(:initial_tags) { %w(a b) } let(:initial_tags) { %w(a b) }
@ -430,6 +440,8 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
end end
end end
describe '#deploy_server', stubbed_knife: true, stubbed_connector: true do describe '#deploy_server', stubbed_knife: true, stubbed_connector: true do
let(:deploy_info) { @deploy_info } let(:deploy_info) { @deploy_info }
let(:json_file_name) { 'json.json' } let(:json_file_name) { 'json.json' }
@ -564,7 +576,126 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
expect(subject).to eq 1 expect(subject).to eq 1
end end
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
end end

View File

@ -1,5 +1,5 @@
RSpec.shared_context 'stubbed calls to connector', stubbed_connector: true do RSpec.shared_context 'stubbed calls to connector', stubbed_connector: true do
let(:stubbed_connector) { double('Connector') } let(:stubbed_connector) { instance_double(MongoConnector) }
before do before do
allow(Devops::Db).to receive(:connector) { stubbed_connector } allow(Devops::Db).to receive(:connector) { stubbed_connector }
end end

View File

@ -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.debug')
allow(DevopsLogger).to receive_message_chain('logger.info') allow(DevopsLogger).to receive_message_chain('logger.info')
allow(DevopsLogger).to receive_message_chain('logger.error') allow(DevopsLogger).to receive_message_chain('logger.error')
allow(DevopsLogger).to receive_message_chain('logger.warn')
end end
end end