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

Reply via email to