[PATCH] BZ 870479 - fixed checking of "stopped after creation" state
Martin Povolny
mpovolny at redhat.com
Tue Nov 20 09:55:30 UTC 2012
ACK, makes sense, tests pass, good to merge
I don't have commit rights, so please commit yourself.
Just a thought from a guy who is trying to get used to rspec:
The 'it' line in the test is pretty long and it contains a condition
but there is just one assertion for the condition so IMHO is Ok.
On Mon, Oct 29, 2012 at 05:03:56PM +0100, jprovazn at redhat.com wrote:
> From: Jan Provaznik <jprovazn at redhat.com>
>
> For rhevm/vsphere an instance goes to 'stopped' state after creation so
> conductor has to send explicit start request. To distinguish "stopped after
> creation" state and common "stopped" state conductor checks if last
> instance launch request was sent after last deployment launch request
> (there can be multiple launch requests for deployment/instance because of
> rolblack+retry process).
>
> In some cases it was possible that instance launch request was picked up by
> delayed_job in same second when the deployment was created, so checking create
> times by seconds was not precise enough.
> ---
> src/app/models/instance.rb | 2 +-
> src/spec/models/instance_spec.rb | 18 ++++++++++++++++++
> 2 files changed, 19 insertions(+), 1 deletion(-)
>
> diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb
> index 8e02002..2d27394 100644
> --- a/src/app/models/instance.rb
> +++ b/src/app/models/instance.rb
> @@ -525,7 +525,7 @@ class Instance < ActiveRecord::Base
> # also make sure that the 'create' task was created after
> # last deployment launch request - instance can be stopped
> # since previous rollback+retry request
> - last_task.created_at.to_i > last_launch_time.to_i &&
> + last_task.created_at.to_f > last_launch_time.to_f &&
> provider_account &&
> provider_account.provider.provider_type.goes_to_stop_after_creation?
> end
> diff --git a/src/spec/models/instance_spec.rb b/src/spec/models/instance_spec.rb
> index 3f9a6f5..26fea33 100644
> --- a/src/spec/models/instance_spec.rb
> +++ b/src/spec/models/instance_spec.rb
> @@ -379,4 +379,22 @@ describe Instance do
> errors.should_not be_empty
> errors.select {|e| e.include?("no Config Server available") }.should_not be_empty
> end
> +
> + describe ".stopped_after_creation?" do
> + before(:each) do
> + @instance = FactoryGirl.create(:instance, :pool_id => @pool.id, :state => 'stopped')
> + @deployment = FactoryGirl.create :deployment
> + @deployment.instances << @instance
> + end
> +
> + it "should be true if the deployment is pending and the provider doesn't start an instance automatically" do
> + @instance.provider_account.provider.provider_type.
> + stub!(:goes_to_stop_after_creation?).and_return(true)
> + @deployment.update_attribute(:state, Deployment::STATE_PENDING)
> + @instance.tasks << InstanceTask.create!({:user => nil,
> + :task_target => @instance,
> + :action => InstanceTask::ACTION_CREATE})
> + @instance.stopped_after_creation?.should be_true
> + end
> + end
> end
> --
> 1.7.11.4
>
--
Martin Povolny <mpovolny at redhat.com>
tel. +420777714458
More information about the aeolus-devel
mailing list