[PATCH conductor] RM #3438: I want to be able to run the spec suite without deltacloud-core

Jason Guiditta jguiditt at redhat.com
Fri Jun 29 19:53:42 UTC 2012


https://www.aeolusproject.org/redmine/issues/3438
---
 src/app/models/deployment.rb                       |    7 +----
 src/app/models/provider.rb                         |    9 +------
 .../controllers/pool_families_controller_spec.rb   |    4 ++-
 src/spec/controllers/providers_controller_spec.rb  |   21 ++++++++-------
 src/spec/factories/instance.rb                     |    1 -
 src/spec/factories/provider.rb                     |    4 +++
 src/spec/factories/provider_account.rb             |    1 +
 src/spec/models/deployment_spec.rb                 |    4 +-
 src/spec/models/instance_spec.rb                   |   12 +++-----
 src/spec/models/provider_account_spec.rb           |    8 +++---
 src/spec/models/provider_spec.rb                   |    6 +++-
 src/spec/spec_helper.rb                            |   27 +++++++++++++++++---
 12 files changed, 59 insertions(+), 45 deletions(-)

diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
index 3ad7863..202f960 100644
--- a/src/app/models/deployment.rb
+++ b/src/app/models/deployment.rb
@@ -179,12 +179,7 @@ class Deployment < ActiveRecord::Base
       # stop all deployment's instances
       instances.each do |instance|
         next unless instance.state == Instance::STATE_RUNNING
-
-        @task = instance.queue_action(instance.owner, 'stop')
-        unless @task
-          raise I18n.t("deployments.errors.cannot_stop")
-        end
-        Taskomatic.stop_instance(@task)
+        instance.stop(instance.owner)
       end
     else
       raise I18n.t("deployments.errors.all_stopped")
diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb
index fe9ab97..cf2a7e7 100644
--- a/src/app/models/provider.rb
+++ b/src/app/models/provider.rb
@@ -239,14 +239,7 @@ class Provider < ActiveRecord::Base
     errs = []
     stoppable_instances.each do |instance|
       begin
-        unless instance.valid_action?('stop')
-          raise "stop is an invalid action."
-        end
-
-        unless @task = instance.queue_action(user, 'stop')
-          raise "stop cannot be performed on this instance."
-        end
-        Taskomatic.stop_instance(@task)
+        instance.stop(user)
       rescue Exception => e
         err = "Error while stopping an instance #{instance.name}: #{e.message}"
         errs << err
diff --git a/src/spec/controllers/pool_families_controller_spec.rb b/src/spec/controllers/pool_families_controller_spec.rb
index b913d6a..c90f006 100644
--- a/src/spec/controllers/pool_families_controller_spec.rb
+++ b/src/spec/controllers/pool_families_controller_spec.rb
@@ -52,11 +52,13 @@ describe PoolFamiliesController do
   it "should allow authorized users to edit pool family" do
     pool_family = FactoryGirl.create :pool_family
     mock_warden(@admin)
+    family = mock_model(PoolFamily).as_null_object
+    PoolFamily.stub(:find).and_return(family)
     put :update, :id => pool_family.id, :pool_family => {
       :name => 'updated pool family',
       :quota_attributes => { :maximum_running_instances => 10 },
     }
-    PoolFamily.find_by_name('updated pool family').should_not be_nil
+    flash[:notice].should eq(I18n.t("pool_families.flash.notice.updated"))
     response.should redirect_to(pool_families_path)
   end
 
diff --git a/src/spec/controllers/providers_controller_spec.rb b/src/spec/controllers/providers_controller_spec.rb
index 38228fb..d86fcc9 100644
--- a/src/spec/controllers/providers_controller_spec.rb
+++ b/src/spec/controllers/providers_controller_spec.rb
@@ -94,17 +94,18 @@ describe ProvidersController do
     end
 
     describe "check availability" do
-      context "when provider is not accessible" do
-        before do
-          @provider.update_attribute(:url, "invalid_url")
-        end
+      let(:p) { mock_model(Provider).as_null_object }
+      before do
+        Provider.stub(:find).and_return(p)
+      end
 
-        it "should update availability status on test connection" do
-          @provider.available.should_not be_false
-          get :edit, :id => @provider.id, :test_provider => true
-          @provider.reload
-          @provider.available.should be_false
-        end
+      it "should update availability status on test connection" do
+        p.should_receive(:update_availability)
+        get :edit, :id => @provider.id, :test_provider => true
+      end
+      it "should set a flash message" do
+        get :edit, :id => @provider.id, :test_provider => true
+        flash.should_not be_empty
       end
     end
 
diff --git a/src/spec/factories/instance.rb b/src/spec/factories/instance.rb
index 9675df4..7b2fa54 100644
--- a/src/spec/factories/instance.rb
+++ b/src/spec/factories/instance.rb
@@ -62,5 +62,4 @@ FactoryGirl.define do
   factory :instance_in_disabled_pool, :parent => :new_instance do
     association :pool, :factory => :disabled_pool
   end
-
 end
diff --git a/src/spec/factories/provider.rb b/src/spec/factories/provider.rb
index e603934..f41e752 100644
--- a/src/spec/factories/provider.rb
+++ b/src/spec/factories/provider.rb
@@ -20,6 +20,10 @@ FactoryGirl.define do
     sequence(:name) { |n| "provider#{n}" }
     provider_type { Factory.build :provider_type }
     url { |p| "http://www." + p.name + ".com/api" }
+    after_build do |p|
+      p.stub(:valid_framework?).and_return(true)
+      p.stub(:valid_provider?).and_return(true)
+    end
   end
 
   factory :mock_provider, :parent => :provider do
diff --git a/src/spec/factories/provider_account.rb b/src/spec/factories/provider_account.rb
index 93afc12..cc87b8b 100644
--- a/src/spec/factories/provider_account.rb
+++ b/src/spec/factories/provider_account.rb
@@ -26,6 +26,7 @@ FactoryGirl.define do
     after_build do |acc|
       acc.credentials << Factory.build(:username_credential)
       acc.credentials << Factory.build(:password_credential)
+      acc.pool_families << PoolFamily.find_by_name('default')
     end
   end
 
diff --git a/src/spec/models/deployment_spec.rb b/src/spec/models/deployment_spec.rb
index c996d51..da893d2 100644
--- a/src/spec/models/deployment_spec.rb
+++ b/src/spec/models/deployment_spec.rb
@@ -118,7 +118,7 @@ describe Deployment do
       inst2.save!
       inst3 = Factory.create :mock_running_instance, :deployment_id => @deployment.id
       @deployment.reload
-      Taskomatic.stub!(:stop_instance).and_return(nil)
+      Instance.any_instance.stub(:get_action_list).and_return(['stop'])
       @deployment.stop_instances_and_destroy!
       inst1.tasks.last.action.should == 'stop'
       inst3.tasks.last.action.should == 'stop'
@@ -341,7 +341,7 @@ describe Deployment do
       inst1 = Factory.create :mock_running_instance, :deployment_id => @deployment.id
       inst2 = Factory.create :mock_running_instance, :deployment_id => @deployment.id
       @deployment.reload
-
+      Instance.any_instance.stub(:get_action_list).and_return(['stop'])
       @deployment.stop_instances_and_destroy!
       inst1.reload
       inst2.reload
diff --git a/src/spec/models/instance_spec.rb b/src/spec/models/instance_spec.rb
index 8ffaf4c..87dd77d 100644
--- a/src/spec/models/instance_spec.rb
+++ b/src/spec/models/instance_spec.rb
@@ -110,10 +110,6 @@ describe Instance do
     @instance.valid_action?('start').should == true
   end
 
-  it "should return action list" do
-    @instance.get_action_list.should eql(["reboot", "stop"])
-  end
-
   it "should be able to queue new actions" do
     @instance.stub!(:get_action_list).and_return(@actions)
     user = User.new
@@ -240,9 +236,10 @@ describe Instance do
   end
 
   it "shouldn't match provider accounts where image is not pushed" do
-    account2 = FactoryGirl.create(:mock_provider_account2, :label => 'testaccount')
-    @pool.pool_family.provider_accounts = [account2]
-    @instance.matches.last.should include(I18n.t('instances.errors.image_not_pushed_to_provider', :account_name => 'testaccount'))
+    inst = Factory.create(:new_instance)
+    inst.stub(:image_build).and_return("foo")
+    inst.stub(:provider_images_for_match).and_return([])
+    inst.matches.last.should include(I18n.t('instances.errors.image_not_pushed_to_provider', :account_name => inst.provider_account.name))
   end
 
   it "shouldn't match provider accounts where matching hardware profile not found" do
@@ -325,6 +322,7 @@ describe Instance do
   it "should not be launchable if its pool's providers are all disabled" do
     instance = FactoryGirl.build(:instance)
     instance.pool.pool_family.provider_accounts << FactoryGirl.create(:disabled_provider_account)
+    instance.pool.pool_family.stub(:all_providers_disabled?).and_return(true)
     instance.should_not be_valid
     instance.errors[:pool].should_not be_empty
     instance.errors[:pool].first.should == I18n.t('pools.errors.providers_disabled')
diff --git a/src/spec/models/provider_account_spec.rb b/src/spec/models/provider_account_spec.rb
index a8c1074..5e212b8 100644
--- a/src/spec/models/provider_account_spec.rb
+++ b/src/spec/models/provider_account_spec.rb
@@ -46,12 +46,13 @@ describe ProviderAccount do
 
     invalid_provider_account = Factory.build(:mock_provider_account, :provider => mock_provider)
     invalid_provider_account.credentials_hash = {'username' => "wrong_username", 'password' => "wrong_password"}
+    invalid_provider_account.stub(:valid_credentials?).and_return(false)
     invalid_provider_account.should_not be_valid
 
     ec2_provider = FactoryGirl.create :ec2_provider
     invalid_ec2_provider_account = Factory.build(:ec2_provider_account, :provider => ec2_provider)
     invalid_ec2_provider_account.credentials_hash = {'username' => "", 'password' => nil}
-    invalid_ec2_provider_account.valid_credentials?.should == false
+    invalid_ec2_provider_account.stub(:valid_credentials?).and_return(false)
     invalid_ec2_provider_account.should_not be_valid
 
     valid_provider_account = Factory.build(:mock_provider_account, :provider => mock_provider)
@@ -61,13 +62,14 @@ describe ProviderAccount do
   it "should fail to create a cloud account if the provider credentials are invalid" do
     provider_account = Factory.build(:mock_provider_account)
     provider_account.credentials_hash = {'password' => "wrong_password"}
+    provider_account.stub(:valid_credentials?).and_return(false)
     provider_account.save.should == false
   end
 
   it "should add errors when testing credentials fails" do
     provider_account = Factory.build(:mock_provider_account)
     provider_account.credentials_hash = {'password' => "wrong_password"}
-    provider_account.stub(:valid_credentials).and_raise("DeltacloudError")
+    provider_account.stub(:valid_credentials?).and_raise("DeltacloudError")
     provider_account.save.should == false
     provider_account.errors[:base].should == [I18n.t('provider_accounts.errors.exception_while_validating')]
   end
@@ -85,8 +87,6 @@ describe ProviderAccount do
   end
 
   it "when calling connect and it fails with exception it will return nil" do
-    DeltaCloud.should_receive(:new).and_raise(Exception.new)
-
     @provider_account.connect.should be_nil
   end
 
diff --git a/src/spec/models/provider_spec.rb b/src/spec/models/provider_spec.rb
index a59fafe..dac9da2 100644
--- a/src/spec/models/provider_spec.rb
+++ b/src/spec/models/provider_spec.rb
@@ -57,9 +57,9 @@ describe Provider do
     end
 
     it "should set error if unable to connect to specified deltacloud instance" do
-      @provider.stub(:valid_provider?).and_return(true)
       @provider.url = "http://invalid.provider/url"
       @provider.stub(:connect).and_return(nil)
+      @provider.stub(:valid_framework?).and_return(false)
       @provider.should have(1).error_on(:url)
       @provider.errors[:url].first.should eql(I18n.t("activerecord.errors.models.provider.attributes.url.invalid_framework"))
       @provider.should_not be_valid
@@ -100,6 +100,7 @@ describe Provider do
       pa = FactoryGirl.create(:mock_provider_account, :provider => provider1)
       inst1 = FactoryGirl.create(:instance, :provider_account => pa)
       inst2 = FactoryGirl.create(:instance, :provider_account => pa)
+      Instance.any_instance.stub(:stop).and_return(nil)
       errs = provider1.disable(nil)[:failed_to_stop]
       errs.should be_empty
     end
@@ -108,7 +109,7 @@ describe Provider do
       provider1 = Factory.create(:mock_provider)
       pa = FactoryGirl.create(:mock_provider_account, :provider => provider1)
       inst1 = FactoryGirl.create(:instance, :provider_account => pa)
-      Instance.any_instance.stub(:valid_action?).and_return(false)
+      Instance.any_instance.stub(:stop).and_raise
       errs = provider1.disable(nil)[:failed_to_stop]
       errs.should_not be_empty
       provider1.enabled.should be_true
@@ -147,6 +148,7 @@ describe Provider do
 
     it "should mark provider as unavailable if inaccessible" do
       @provider.available.should be_true
+      @provider.stub(:valid_framework?).and_return(false)
       @provider.populate_realms
       @provider.available.should be_false
     end
diff --git a/src/spec/spec_helper.rb b/src/spec/spec_helper.rb
index ffaf879..e7bcf96 100644
--- a/src/spec/spec_helper.rb
+++ b/src/spec/spec_helper.rb
@@ -65,6 +65,29 @@ def mock_warden(user)
   SessionEntity.update_session(@session_id, user) if user
 end
 
+# Without these here, controller specs fail.  These 2 class_evals can
+# be removed once stubs work and/or are added to the right place.
+Provider.class_eval do
+  def valid_framework?
+    true
+  end
+
+  def valid_provider?
+    true
+  end
+end
+
+ProviderAccount.class_eval do
+
+  def connect
+    nil
+  end
+
+  def valid_credentials?
+    true
+  end
+end
+
 RSpec.configure do |config|
   config.use_transactional_fixtures = true
   config.use_instantiated_fixtures  = false
@@ -88,10 +111,6 @@ RSpec.configure do |config|
   #  activate_authlogic
   #end
 
-  config.before(:each) do
-    Provider.any_instance.stub(:valid_provider?).and_return(true)
-    Provider.any_instance.stub(:valid_famework?).and_return(true)
-  end
   #config.after(:each, :type => :controller) do
   #  current_user_session.destroy
   #end
-- 
1.7.7.6




More information about the aeolus-devel mailing list