From: martyntaylor <[email protected]>
---
src/app/controllers/provider_controller.rb | 11 ++++++++---
src/app/models/cloud_account.rb | 17 +++++++++++++++++
src/features/step_definitions/pool_steps.rb | 2 +-
.../controllers/cloud_accounts_controller_spec.rb | 11 +++++++++--
src/spec/factories/cloud_account.rb | 4 ++--
src/spec/models/cloud_account_spec.rb | 11 +++++++++++
6 files changed, 48 insertions(+), 8 deletions(-)
diff --git a/src/app/controllers/provider_controller.rb
b/src/app/controllers/provider_controller.rb
index 23b5ba0..092054c 100644
--- a/src/app/controllers/provider_controller.rb
+++ b/src/app/controllers/provider_controller.rb
@@ -76,8 +76,13 @@ class ProviderController < ApplicationController
require_privilege(Privilege::ACCOUNT_MODIFY)
@acct = CloudAccount.find_or_create(params[:cloud_account])
@provider = Provider.find(params[:cloud_account][:provider_id])
- @provider.cloud_accounts << @acct
- redirect_to :action => 'accounts', :id => @provider.id
+ if @acct.save
+ @provider.cloud_accounts << @acct
+ redirect_to :action => 'accounts', :id => @provider.id
+ else
+ flash[:notice] = @acct.errors.full_messages[0]
+ redirect_to :action => 'new_account', :id => @provider.id
+ end
end
-end
+end
\ No newline at end of file
diff --git a/src/app/models/cloud_account.rb b/src/app/models/cloud_account.rb
index 1d6b3e9..29677c1 100644
--- a/src/app/models/cloud_account.rb
+++ b/src/app/models/cloud_account.rb
@@ -67,4 +67,21 @@ class CloudAccount < ActiveRecord::Base
def name
username
end
+
+ protected
+ def validate
+ errors.add_to_base("Login Credentials are Invalid for this Provider")
unless valid_credentials?
+ end
+
+ private
+ def valid_credentials?
+ begin
+ deltacloud = DeltaCloud.new(username, password, provider.url)
+ #TODO This should be replaced by a DeltaCloud.test_credentials type
method once/if it is implemented in the API
+ deltacloud.instances
+ rescue Exception => e
+ return false
+ end
+ return true
+ end
end
diff --git a/src/features/step_definitions/pool_steps.rb
b/src/features/step_definitions/pool_steps.rb
index bd764ae..3d97da6 100644
--- a/src/features/step_definitions/pool_steps.rb
+++ b/src/features/step_definitions/pool_steps.rb
@@ -15,7 +15,7 @@ Given /^the Pool has the following Hardware Profiles:$/ do
|table|
end
Given /^the Pool has the following Realms named "([^\"]*)"$/ do |names|
- @cloud_account = Factory :cloud_account
+ @cloud_account = Factory :mock_cloud_account
@provider = @cloud_account.provider
names.split(", ").each do |name|
diff --git a/src/spec/controllers/cloud_accounts_controller_spec.rb
b/src/spec/controllers/cloud_accounts_controller_spec.rb
index f1d4a0d..c5e520e 100644
--- a/src/spec/controllers/cloud_accounts_controller_spec.rb
+++ b/src/spec/controllers/cloud_accounts_controller_spec.rb
@@ -23,9 +23,9 @@ describe CloudAccountsController do
it "should allow users with account modify permission to update a cloud
account" do
UserSession.create(@admin)
- post :update, :cloud_account => { :id => @cloud_account.id, :password =>
'foobar' }
+ post :update, :cloud_account => { :id => @cloud_account.id, :password =>
'mockpassword' }
response.should
redirect_to("http://test.host/provider/accounts/#[email protected]}")
- CloudAccount.find(@cloud_account.id).password.should == "foobar"
+ CloudAccount.find(@cloud_account.id).password.should == "mockpassword"
end
it "should allow users with account modify permission to delete a cloud
account" do
@@ -48,4 +48,11 @@ describe CloudAccountsController do
response.should_not be_success
end
+ it "should fail to create a cloud account if the provider credentials are
invalid" do
+ cloud_account = Factory.build(:mock_cloud_account)
+ cloud_account.stub!(:valid_credentials?).and_return(false)
+ cloud_account.save.should == false
+ end
+
+
end
diff --git a/src/spec/factories/cloud_account.rb
b/src/spec/factories/cloud_account.rb
index f494b52..b623b43 100644
--- a/src/spec/factories/cloud_account.rb
+++ b/src/spec/factories/cloud_account.rb
@@ -5,7 +5,7 @@ Factory.define :cloud_account do |f|
end
Factory.define :mock_cloud_account, :parent => :cloud_account do |f|
- f.sequence(:username) { |n| "testMockUser#(n)" }
- f.password "testMockPassword"
+ f.username "mockuser"
+ f.password "mockpassword"
f.provider { |p| p.association(:mock_provider) }
end
diff --git a/src/spec/models/cloud_account_spec.rb
b/src/spec/models/cloud_account_spec.rb
index 0afe5a3..ded33c2 100644
--- a/src/spec/models/cloud_account_spec.rb
+++ b/src/spec/models/cloud_account_spec.rb
@@ -18,4 +18,15 @@ describe CloudAccount do
@cloud_account.destroy
CloudAccount.find(:first, :conditions => ['id = ?',
@cloud_account.id]).should be_nil
end
+
+ it "should check the validitiy of the cloud account login credentials" do
+ mock_provider = Factory :mock_provider
+
+ invalid_cloud_account = Factory.build(:cloud_account, :username =>
"wrong_username", :password => "wrong_password", :provider => mock_provider)
+ invalid_cloud_account.should_not be_valid
+
+ valid_cloud_account = Factory.build(:mock_cloud_account, :provider =>
mock_provider)
+ valid_cloud_account.should be_valid
+ end
+
end
--
1.6.6.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel