spec/vcloud/launcher/vapp_orchestrator_spec.rb in vcloud-launcher-0.0.5 vs spec/vcloud/launcher/vapp_orchestrator_spec.rb in vcloud-launcher-0.1.0

- old
+ new

@@ -1,52 +1,85 @@ require 'spec_helper' -module Vcloud - module Launcher - describe VappOrchestrator do +describe Vcloud::Launcher::VappOrchestrator do + # Testing class methods rather than instance methods. + let(:subject) { Vcloud::Launcher::VappOrchestrator } - context "provision a vapp" do + context "provision a vapp" do - before(:each) do - @config = { - :name => 'test-vapp-1', - :vdc_name => 'test-vdc-1', - :catalog => 'org-1-catalog', - :catalog_item => 'org-1-template', - :vm => { - :network_connections => [{:name => 'org-vdc-1-net-1'}] - } + let(:mock_fog_vm) { + double(:vm) + } + let(:mock_vapp) { + double(:vapp, :fog_vms => [mock_fog_vm], :reload => self) + } + let(:mock_vm_orchestrator) { + double(:vm_orchestrator, :customize => true) + } + + before(:each) do + @config = { + :name => 'test-vapp-1', + :vdc_name => 'test-vdc-1', + :catalog_name => 'org-1-catalog', + :vapp_template_name => 'org-1-template', + :vm => { + :network_connections => [{:name => 'org-vdc-1-net-1'}] } - end + } + end - it "should return a vapp if it already exists" do - existing_vapp = double(:vapp, :name => 'existing-vapp-1') + it "should return a vapp if it already exists" do + existing_vapp = double(:vapp, :name => 'existing-vapp-1') - Core::Vapp.should_receive(:get_by_name_and_vdc_name).with('test-vapp-1', 'test-vdc-1').and_return(existing_vapp) - Vcloud::Core.logger.should_receive(:info).with('Found existing vApp test-vapp-1 in vDC \'test-vdc-1\'. Skipping.') - actual_vapp = VappOrchestrator.provision @config - actual_vapp.should_not be_nil - actual_vapp.should == existing_vapp - end + Vcloud::Core::Vapp.should_receive(:get_by_name_and_vdc_name).with('test-vapp-1', 'test-vdc-1').and_return(existing_vapp) + Vcloud::Core.logger.should_receive(:info).with('Found existing vApp test-vapp-1 in vDC \'test-vdc-1\'. Skipping.') + actual_vapp = subject.provision @config + actual_vapp.should_not be_nil + actual_vapp.should == existing_vapp + end - it "should create a vapp if it does not exist" do - #this test highlights the problems in vapp - mock_fog_vm = double(:vm) - mock_vapp = double(:vapp, :fog_vms => [mock_fog_vm], :reload => self) - mock_vm_orchestrator = double(:vm_orchestrator, :customize => true) + it "should create a vapp if it does not exist" do + #this test highlights the problems in vapp + Vcloud::Core::Vapp.should_receive(:get_by_name_and_vdc_name).with('test-vapp-1', 'test-vdc-1').and_return(nil) + Vcloud::Core::VappTemplate.should_receive(:get).with('org-1-template', 'org-1-catalog').and_return(double(:vapp_template, :id => 1)) - Core::Vapp.should_receive(:get_by_name_and_vdc_name).with('test-vapp-1', 'test-vdc-1').and_return(nil) - Core::VappTemplate.should_receive(:get).with('org-1-catalog', 'org-1-template').and_return(double(:vapp_template, :id => 1)) + Vcloud::Core::Vapp.should_receive(:instantiate).with('test-vapp-1', ['org-vdc-1-net-1'], 1, 'test-vdc-1') + .and_return(mock_vapp) + Vcloud::Launcher::VmOrchestrator.should_receive(:new).with(mock_fog_vm, mock_vapp).and_return(mock_vm_orchestrator) - Core::Vapp.should_receive(:instantiate).with('test-vapp-1', ['org-vdc-1-net-1'], 1, 'test-vdc-1') - .and_return(mock_vapp) - VmOrchestrator.should_receive(:new).with(mock_fog_vm, mock_vapp).and_return(mock_vm_orchestrator) + new_vapp = subject.provision @config + new_vapp.should == mock_vapp + end - new_vapp = VappOrchestrator.provision @config - new_vapp.should == mock_vapp - end + context "deprecated config items" do + let(:mock_vapp_template) { + double(:vapp_template, :id => 2) + } + before(:each) { + Vcloud::Core::Vapp.stub(:get_by_name_and_vdc_name) + Vcloud::Core::Vapp.stub(:instantiate).and_return(mock_vapp) + Vcloud::Launcher::VmOrchestrator.stub(:new).and_return(mock_vm_orchestrator) + } + it "should use catalog_item when vapp_template_name is not present" do + config = @config.clone + config.delete(:vapp_template_name) + config[:catalog_item] = 'deprecated-template' + + Vcloud::Core::VappTemplate.should_receive(:get).with('deprecated-template', 'org-1-catalog').and_return(mock_vapp_template) + Vcloud::Launcher::VappOrchestrator.provision(config) end + + it "should use catalog when catalog_name is not present" do + config = @config.clone + config.delete(:catalog_name) + config[:catalog] = 'deprecated-catalog' + + Vcloud::Core::VappTemplate.should_receive(:get).with('org-1-template', 'deprecated-catalog').and_return(mock_vapp_template) + Vcloud::Launcher::VappOrchestrator.provision(config) + end end + end end