From: martyntaylor <[email protected]>
---
src/app/models/cloud_account.rb | 19 ++++++++++++++++++-
src/features/step_definitions/pool_steps.rb | 2 +-
.../controllers/cloud_accounts_controller_spec.rb | 9 +++++++--
src/spec/factories/cloud_account.rb | 4 ++--
src/spec/models/cloud_account_spec.rb | 16 ++++++++++++++++
src/spec/models/instance_spec.rb | 12 +++++++-----
6 files changed, 51 insertions(+), 11 deletions(-)
diff --git a/src/app/models/cloud_account.rb b/src/app/models/cloud_account.rb
index 9b8458d..aaf980e 100644
--- a/src/app/models/cloud_account.rb
+++ b/src/app/models/cloud_account.rb
@@ -1,4 +1,4 @@
-#
+ #
# Copyright (C) 2009 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or modify
@@ -127,4 +127,21 @@ class CloudAccount < ActiveRecord::Base
end
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 d3e0f18..7a82a7a 100644
--- a/src/spec/controllers/cloud_accounts_controller_spec.rb
+++ b/src/spec/controllers/cloud_accounts_controller_spec.rb
@@ -23,9 +23,14 @@ 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' }
+
+ @cloud_account.password = "foobar"
+ @cloud_account.stub!(:valid_credentials).and_return(true)
+ @cloud_account.save
+
+ 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
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..89fdf27 100644
--- a/src/spec/models/cloud_account_spec.rb
+++ b/src/spec/models/cloud_account_spec.rb
@@ -18,4 +18,20 @@ 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
+
+ it "should fail to create a cloud account if the provider credentials are
invalid" do
+ cloud_account = Factory.build(:mock_cloud_account, :password =>
"wrong_password")
+ cloud_account.save.should == false
+ end
+
end
diff --git a/src/spec/models/instance_spec.rb b/src/spec/models/instance_spec.rb
index 84cd234..afdc0e0 100644
--- a/src/spec/models/instance_spec.rb
+++ b/src/spec/models/instance_spec.rb
@@ -90,12 +90,14 @@ describe Instance do
provider = Factory.build(:mock_provider2)
provider.stub!(:connect).and_return(mock('DeltaCloud'))
provider.save!
- cloud_account = CloudAccount.new(:provider_id => provider.id,
- :username => 'john doe',
- :password => 'asdf')
+
+ cloud_account = Factory.build(:cloud_account, :provider => provider,
+ :username => 'john doe',
+ :password => 'asdf')
+ cloud_account.stub!(:valid_credentials?).and_return(true)
cloud_account.save!
- @instance = Factory.create(:instance,
- :cloud_account_id => cloud_account.id)
+
+ @instance = Factory.create(:instance, :cloud_account => cloud_account)
@instance.front_end_realm.should eql('mock2:john doe')
realm = Factory.create(:realm, :name => 'a realm',
--
1.6.6.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel