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