# # Author:: Mukta Aphale () # Author:: Siddheshwar More () # Author:: Ameya Varade () # Copyright:: Copyright (c) 2013-2014 Chef Software, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. require 'spec_helper' require 'chef/knife/cloud/openstack_service' describe Chef::Knife::Cloud::OpenstackService do describe '#add_api_endpoint' do before(:each) do @api_endpoint = 'https://test_openstack_api_endpoint' Chef::Config[:knife][:api_endpoint] = @api_endpoint @instance = Chef::Knife::Cloud::OpenstackService.new end after(:each) do Chef::Config[:knife].delete(:api_endpoint) end it 'sets the api_endpoint in auth params' do expect(@instance.instance_variable_get(:@auth_params)[:openstack_auth_url]).to be.nil? @instance.add_api_endpoint expect(@instance.instance_variable_get(:@auth_params)[:openstack_auth_url]).to be == @api_endpoint end it 'does not set the endpoint when --api-endpoint option is missing' do Chef::Config[:knife][:api_endpoint] = nil expect(@instance.instance_variable_get(:@auth_params)[:openstack_auth_url]).to be.nil? @instance.add_api_endpoint expect(@instance.instance_variable_get(:@auth_params)[:openstack_auth_url]).to_not be == @api_endpoint expect(@instance.instance_variable_get(:@auth_params)[:openstack_auth_url]).to be.nil? end it "doesn't set an OpenStack endpoint type by default" do expect(Chef::Config[:knife][:openstack_endpoint_type]).to be.nil? end end describe '#get_server' do before(:each) do @instance = Chef::Knife::Cloud::OpenstackService.new allow(@instance).to receive_message_chain(:connection, :servers, :get) end context 'when instance_id given' do it 'return server' do server_id = '123f456-123-453e-9c0c-12345a6789' expect(@instance.connection.servers).to receive(:get).and_return(server_id) expect(@instance.connection.servers).to_not receive(:all) expect(@instance.get_server(server_id)).to be == server_id end end context 'when instance_name given' do before(:each) do expect(@instance.connection.servers).to receive(:get).and_return(nil) end let (:server_name) { 'testname' } it 'return server' do expect(@instance.connection.servers).to receive(:all).with(name: server_name).and_return([server_name]) expect(@instance.get_server(server_name)).to be == server_name end it 'raise error if multiple server matches found for given instance name' do error_message = "Multiple server matches found for '#{server_name}', use an instance_id to be more specific." expect(@instance.connection.servers).to receive(:all).with(name: server_name).and_return([server_name, server_name]) allow(@instance).to receive_message_chain(:ui, :fatal) expect { @instance.get_server(server_name) }.to raise_error(Chef::Knife::Cloud::CloudExceptions::ValidationError, error_message) end end end end