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

Reply via email to