[PATCH conductor] BZ 790860 - improved availability checking
Petr Blaho
pblaho at redhat.com
Tue Feb 28 17:04:24 UTC 2012
On Monday, February 27, 2012 01:17:17 PM jprovazn at redhat.com wrote:
> From: Jan Provazník <jan.provaznik at gmail.com>
>
> 'available' flag is now set also on 'test connect' and successful 'update' action
>
> this patch also fixes bug with missing provider_types if new/edit form is
> rendered from update/create actions
> ---
> src/app/controllers/providers_controller.rb | 5 +++--
> src/app/models/provider.rb | 21 ++++++++++-----------
> src/spec/controllers/provider_controller_spec.rb | 15 +++++++++++++++
> 3 files changed, 28 insertions(+), 13 deletions(-)
>
> diff --git a/src/app/controllers/providers_controller.rb b/src/app/controllers/providers_controller.rb
> index 0819b99..9de75dd 100644
> --- a/src/app/controllers/providers_controller.rb
> +++ b/src/app/controllers/providers_controller.rb
> @@ -17,7 +17,7 @@
> class ProvidersController < ApplicationController
> before_filter :require_user
> before_filter :load_providers, :only => [:index, :show, :new, :edit, :create, :update]
> - before_filter :load_providers_types, :only => [:new, :edit]
> + before_filter :load_providers_types, :only => [:new, :edit, :update, :create]
>
> def index
> @params = params
> @@ -129,6 +129,7 @@ class ProvidersController < ApplicationController
> end
>
> if @provider.save
> + @provider.update_availability
> flash[:notice] = t"providers.flash.notice.updated"
> redirect_to edit_provider_path(@provider)
> else
> @@ -166,7 +167,7 @@ class ProvidersController < ApplicationController
>
> def test_connection(provider)
> @provider.errors.clear
> - if @provider.connect
> + if @provider.update_availability
> flash.now[:notice] = t"providers.flash.notice.connected"
> else
> flash.now[:warning] = t"providers.flash.warning.connect_failed"
> diff --git a/src/app/models/provider.rb b/src/app/models/provider.rb
> index 9d5877c..2033a04 100644
> --- a/src/app/models/provider.rb
> +++ b/src/app/models/provider.rb
> @@ -140,22 +140,21 @@ class Provider < ActiveRecord::Base
> provider_accounts.inject([]) {|all, pa| all += pa.instances.stoppable_inaccessible}
> end
>
> + def update_availability
> + self.available = valid_framework?
> + if self.available_changed? and !new_record?
> + update_attribute(:available, self.available)
> + logger.warn "#{name} provider's availability changed to #{self.available}"
> + end
> + self.available
> + end
> +
> def populate_realms
> reload
>
> - self.available = valid_framework?
> - if self.available_changed?
> - if self.available
> - logger.warn "provider #{name} is now available"
> - save!
> - else
> - logger.warn "provider #{name} is not available"
> - update_attribute(:available, false)
> - end
> - end
> # if the provider is not running, mark as unavailable and don't refresh its
> # realms
> - return unless self.available
> + return unless update_availability
>
> conductor_acct_realms = {}
> conductor_acct_realm_ids = {}
> diff --git a/src/spec/controllers/provider_controller_spec.rb b/src/spec/controllers/provider_controller_spec.rb
> index f7fac96..3098523 100644
> --- a/src/spec/controllers/provider_controller_spec.rb
> +++ b/src/spec/controllers/provider_controller_spec.rb
> @@ -35,4 +35,19 @@ describe ProvidersController do
> it { assigns[:realm_names].size.should == @provider.realms.size }
> it { response.should render_template(:partial => "providers/_realms") }
> end
> +
> + describe "check availability" do
> + context "when provider is not accessible" do
> + before do
> + @provider.update_attribute(:url, "invalid_url")
> + end
> +
> + it "should update availability status on test connection" do
> + @provider.available.should_not be_false
> + get :edit, :id => @provider.id, :test_provider => true
> + @provider.reload
> + @provider.available.should be_false
> + end
> + end
> + end
> end
>
ACK.
--
With regards
Petr Blaho
More information about the aeolus-devel
mailing list