From: martyntaylor <[email protected]>
---
src/app/controllers/provider_controller.rb | 18 ++++++++++++++++++
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 +++++++-----
src/spec/spec_helper.rb | 1 +
8 files changed, 70 insertions(+), 11 deletions(-)
diff --git a/src/app/controllers/provider_controller.rb
b/src/app/controllers/provider_controller.rb
index 7a4cefc..4955979 100644
--- a/src/app/controllers/provider_controller.rb
+++ b/src/app/controllers/provider_controller.rb
@@ -67,4 +67,22 @@ class ProviderController < ApplicationController
require_privilege(Privilege::PROVIDER_VIEW, @provider)
end
+ def new_account
+ @provider = Provider.find(params[:id])
+ require_privilege(Privilege::ACCOUNT_MODIFY, @provider)
+ end
+
+ def create_account
+ require_privilege(Privilege::ACCOUNT_MODIFY)
+ @acct = CloudAccount.find_or_create(params[:cloud_account])
+ @provider = Provider.find(params[:cloud_account][: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
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',
diff --git a/src/spec/spec_helper.rb b/src/spec/spec_helper.rb
index 5181389..3323348 100644
--- a/src/spec/spec_helper.rb
+++ b/src/spec/spec_helper.rb
@@ -21,6 +21,7 @@ Spec::Runner.configure do |config|
config.use_instantiated_fixtures = false
config.fixture_path = RAILS_ROOT + '/spec/fixtures/'
+
# == Fixtures
#
# You can declare fixtures for each example_group like this:
--
1.6.6.1
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel