[PATCH conductor] RM #3438: I want to be able to run the spec suite without deltacloud-core
Richard Su
rwsu at redhat.com
Mon Jul 2 20:35:00 UTC 2012
On 06/29/2012 12:53 PM, Jason Guiditta wrote:
> 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
Acked and pushed.
More information about the aeolus-devel
mailing list