[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