Turns out the errors in the spec suite were due to a broken
deltacloud-client. The code here looks good and works. ACK.
-Mo
On 05/18/2010 04:51 AM, [email protected] wrote:
> 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',
>
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel