From: martyntaylor <[email protected]>

---
 src/app/controllers/cloud_accounts_controller.rb |   45 +++++++++++++-------
 src/app/controllers/provider_controller.rb       |   34 +++++++++++----
 src/app/views/provider/_form.haml                |    5 +-
 src/app/views/provider/accounts.haml             |   14 ++----
 src/features/provider.feature                    |   49 +++++++++++++++++++++-
 src/features/support/custom.rb                   |    3 -
 6 files changed, 111 insertions(+), 39 deletions(-)

diff --git a/src/app/controllers/cloud_accounts_controller.rb 
b/src/app/controllers/cloud_accounts_controller.rb
index f1c55b6..9d75347 100644
--- a/src/app/controllers/cloud_accounts_controller.rb
+++ b/src/app/controllers/cloud_accounts_controller.rb
@@ -31,30 +31,36 @@ class CloudAccountsController < ApplicationController
   def create
     @provider = Provider.find(params[:cloud_account][:provider_id])
     require_privilege(Privilege::ACCOUNT_MODIFY,@provider)
-    if not params[:cloud_account][:x509_cert_priv_file].nil?
+    if params[:cloud_account] && 
!params[:cloud_account][:x509_cert_priv_file].blank?
       params[:cloud_account][:x509_cert_priv] = 
params[:cloud_account][:x509_cert_priv_file].read
     end
     params[:cloud_account].delete :x509_cert_priv_file
-    if not params[:cloud_account][:x509_cert_pub_file].nil?
+    if params[:cloud_account] && 
!params[:cloud_account][:x509_cert_pub_file].blank?
       params[:cloud_account][:x509_cert_pub] = 
params[:cloud_account][:x509_cert_pub_file].read
     end
     params[:cloud_account].delete :x509_cert_pub_file
     @cloud_account = CloudAccount.new(params[:cloud_account])
-    unless @cloud_account.valid_credentials?
-      flash[:notice] = "The entered credential information is incorrect"
-      redirect_to :controller => "provider", :action => "accounts", :id => 
@provider
+
+    if params[:test_account]
+      test_account(@cloud_account)
+      redirect_to :controller => "provider", :action => "accounts", :id => 
@provider, :cloud_account => params[:cloud_account]
     else
-      quota = Quota.new
-      quota.maximum_running_instances = 
quota_from_string(params[:quota][:maximum_running_instances])
-      quota.save!
-      @cloud_account.quota_id = quota.id
-      @cloud_account.zones << Zone.default
-      @cloud_account.save!
-      if request.post? && @cloud_account.save && @cloud_account.populate_realms
-        flash[:notice] = "Provider account added."
+      unless @cloud_account.valid_credentials?
+        flash[:notice] = "The entered credential information is incorrect"
+        redirect_to :controller => "provider", :action => "accounts", :id => 
@provider
+      else
+        quota = Quota.new
+        quota.maximum_running_instances = 
quota_from_string(params[:quota][:maximum_running_instances])
+        quota.save!
+        @cloud_account.quota_id = quota.id
+        @cloud_account.zones << Zone.default
+        @cloud_account.save!
+        if request.post? && @cloud_account.save && 
@cloud_account.populate_realms
+          flash[:notice] = "Provider account added."
+        end
+        redirect_to :controller => "provider", :action => "accounts", :id => 
@provider
+        kick_condor
       end
-      redirect_to :controller => "provider", :action => "accounts", :id => 
@provider
-      kick_condor
     end
   end
 
@@ -126,6 +132,15 @@ class CloudAccountsController < ApplicationController
     redirect_to :controller => 'provider', :action => 'accounts', :id => 
provider.id
   end
 
+  def test_account(account)
+    if account.valid_credentials?
+      flash[:notice] = "Test Connection Success: Valid Account Details"
+    else
+      flash[:notice] = "Test Connection Failed: Invalid Account Details"
+    end
+  rescue
+    flash[:notice] = "Test Connection Failed: Could not connect to provider"
+  end
   private
 
   def quota_from_string(quota_raw)
diff --git a/src/app/controllers/provider_controller.rb 
b/src/app/controllers/provider_controller.rb
index 7e7f3e5..189c5cb 100644
--- a/src/app/controllers/provider_controller.rb
+++ b/src/app/controllers/provider_controller.rb
@@ -54,15 +54,21 @@ class ProviderController < ApplicationController
     require_privilege(Privilege::PROVIDER_MODIFY)
     @providers = Provider.list_for_user(@current_user, 
Privilege::PROVIDER_MODIFY)
     @provider = Provider.new(params[:provider])
-    @provider.set_cloud_type!
-    if @provider.save && @provider.populate_hardware_profiles
+
+    if params[:test_connection]
+      test_connection(@provider)
+      redirect_to :action => "new", :provider => {:name => @provider.name, 
:url => @provider.url}
+    else
+      @provider.set_cloud_type!
+      if @provider.save && @provider.populate_hardware_profiles
         flash[:notice] = "Provider added."
         redirect_to :action => "show", :id => @provider
-    else
-      flash[:notice] = "Cannot add the provider."
-      render :action => "new"
+      else
+        flash[:notice] = "Cannot add the provider."
+        render :action => "new"
+      end
+      kick_condor
     end
-    kick_condor
   end
 
   def update
@@ -71,8 +77,8 @@ class ProviderController < ApplicationController
     @provider.name = params[:provider][:name]
 
     if @provider.save
-        flash[:notice] = "Provider updated."
-        redirect_to :action => "show", :id => @provider
+      flash[:notice] = "Provider updated."
+      redirect_to :action => "show", :id => @provider
     else
       render :action => "edit"
     end
@@ -104,6 +110,10 @@ class ProviderController < ApplicationController
   def accounts
     @provider = Provider.find(:first, :conditions => {:id => params[:id]})
     require_privilege(Privilege::ACCOUNT_VIEW, @provider)
+    if params[:cloud_account]
+      @cloud_account = CloudAccount.new(params[:cloud_account])
+      @quota = Quota.new(params[:quota])
+    end
   end
 
   def realms
@@ -119,6 +129,14 @@ class ProviderController < ApplicationController
   def list
   end
 
+  def test_connection(provider)
+    if @provider.connect
+      flash[:notice] = "Successfuly Connected to Provider"
+    else
+      flash[:notice] = "Failed to Connect to Provider"
+    end
+  end
+
   protected
   def load_providers
     @providers = Provider.list_for_user(@current_user, 
Privilege::PROVIDER_VIEW)
diff --git a/src/app/views/provider/_form.haml 
b/src/app/views/provider/_form.haml
index d0d1464..6f03d7d 100644
--- a/src/app/views/provider/_form.haml
+++ b/src/app/views/provider/_form.haml
@@ -28,9 +28,10 @@
       - if controller.action_name == 'edit':
         = f.hidden_field :id, :value => @provider.id
       .clear.prefix_4.grid_5.suffix_4.alpha.omega
-        %span
+        - if !Provider.exists?(@provider)
+          %span
           (
-          %a{ :href => ''}<>
+          %button.linkbutton.nospace{ :type => 'submit', :value => 
t('.test_connection'), :name => 'test_connection', :id => 'test_connection' }<>
             = t('.test_connection')
           )
     - unless readonly
diff --git a/src/app/views/provider/accounts.haml 
b/src/app/views/provider/accounts.haml
index d2b979e..509e727 100644
--- a/src/app/views/provider/accounts.haml
+++ b/src/app/views/provider/accounts.haml
@@ -61,11 +61,6 @@
         .grid_3.omega
           %a.button{ :href => remove_path, :name => "remove_acc_#{acct.id}", 
:class => "tiny #{'disabled' unless remove_path}" }
             = t(:remove)
-          %span
-            &nbsp; (
-            %a{ :href => '' }<>
-              = t('.test_account')
-            )
       %fieldset.clearfix.gap
         = submit_tag t(:reset), :name => 'reset_form', :class => 
"dialogbutton" unless @provider.cloud_accounts.empty?
         = submit_tag t(:save), :name => 'update_cloud_accounts', :class => 
"dialogbutton" unless @provider.cloud_accounts.empty?
@@ -117,11 +112,10 @@
         = file_field :cloud_account, :x509_cert_pub_file, :title => 
t('.account_public_cert')
       - remove_path = url_for :controller => 'cloud_accounts', :action => 
'destroy'
       .grid_3.omega
-        %span
-          (
-          %a{ :href => '' }<>
-            = t('.test_account')
-          )
+        (
+        %button.linkbutton.nospace{ :type => 'submit', :value => 
t('.test_account'), :name => 'test_account', :id => 'test_account' }<>
+          = t('.test_account')
+        )
     %fieldset.clearfix
       .grid_13.alpha.omega
         = submit_tag t(:add), :class => "ra nomargin dialogbutton"
diff --git a/src/features/provider.feature b/src/features/provider.feature
index a544361..c332667 100644
--- a/src/features/provider.feature
+++ b/src/features/provider.feature
@@ -26,7 +26,6 @@ Feature: Manage Providers
     When I follow "testprovider"
     Then I should see "Provider Name"
     And I should see "Provider URL"
-    And I should see "Test Connection"
 
   Scenario: Create a new Provider
     Given I am on the providers page
@@ -39,3 +38,51 @@ Feature: Manage Providers
     Then I should be on the show provider page
     And I should see "Provider added"
     And I should have a provider named "testprovider"
+
+  Scenario: Test Provider Connection Successful
+    Given I am on the providers page
+    When I press "Add"
+    Then I should be on the new provider page
+    When I fill in "provider[name]" with "testprovider"
+    And I fill in "provider[url]" with "http://localhost:3001/api";
+    And I press "test_connection"
+    Then I should see "Successfuly Connected to Provider"
+
+  Scenario: Test Provider Connection Failure
+    Given I am on the providers page
+    When I press "Add"
+    Then I should be on the new provider page
+    When I fill in "provider[name]" with "incorrect_provider"
+    And I fill in "provider[url]" with "http://incorrecthost:3001/api";
+    And I press "test_connection"
+    Then I should see "Failed to Connect to Provider"
+
+  Scenario: Test Account Connection Success
+    Given I am on the homepage
+    And there are these providers:
+    | name      |
+    | provider1 |
+    When I go to the providers page
+    And I follow "provider1"
+    And I follow "Provider Accounts"
+    And I fill in "cloud_account[label]" with "MockAccount"
+    And I fill in "cloud_account[username]" with "mockuser"
+    And I fill in "cloud_account[password]" with "mockpassword"
+    And I fill in "cloud_account[account_number]" with "12345678"
+    And I press "test_account"
+    Then I should see "Test Connection Success: Valid Account Details"
+
+  Scenario: Test Account Connection Failure
+    Given I am on the homepage
+    And there are these providers:
+    | name      |
+    | provider1 |
+    When I go to the providers page
+    And I follow "provider1"
+    And I follow "Provider Accounts"
+    And I fill in "cloud_account[label]" with "IncorrectAccount"
+    And I fill in "cloud_account[username]" with "incorrect_user"
+    And I fill in "cloud_account[password]" with "incorrect_password"
+    And I fill in "cloud_account[account_number]" with "12345678"
+    And I press "test_account"
+    Then I should see "Test Connection Failed: Invalid Account Details"
\ No newline at end of file
diff --git a/src/features/support/custom.rb b/src/features/support/custom.rb
index 46c618e..6e4e1ef 100644
--- a/src/features/support/custom.rb
+++ b/src/features/support/custom.rb
@@ -28,9 +28,6 @@ Provider.class_eval do
 end
 
 CloudAccount.class_eval do
-  def valid_credentials?
-    true
-  end
   
   alias :generate_cloud_account_key_original :generate_cloud_account_key 
 
-- 
1.7.2.3

_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to