From: Tomas Sedovic tsedovic@redhat.com
--- src/spec/factories/instance.rb | 8 +++ src/spec/models/instance_spec.rb | 113 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 0 deletions(-) create mode 100644 src/spec/factories/instance.rb create mode 100644 src/spec/models/instance_spec.rb
diff --git a/src/spec/factories/instance.rb b/src/spec/factories/instance.rb new file mode 100644 index 0000000..0cd1ea2 --- /dev/null +++ b/src/spec/factories/instance.rb @@ -0,0 +1,8 @@ +Factory.define :instance do |i| + i.sequence(:name) { |n| "instance#{n}" } + i.sequence(:external_key) { |n| "key#{n}" } + i.hardware_profile_id 1 + i.image_id 1 + i.pool_id 1 + i.state "running" +end diff --git a/src/spec/models/instance_spec.rb b/src/spec/models/instance_spec.rb new file mode 100644 index 0000000..84cd234 --- /dev/null +++ b/src/spec/models/instance_spec.rb @@ -0,0 +1,113 @@ +require 'spec_helper' + +describe Instance do + before(:each) do + @instance = Factory.build(:instance) + @actions = ['start', 'stop'] + end + + it "should require pool to be set" do + @instance.pool_id = nil + @instance.should_not be_valid + + @instance.pool_id = 1 + @instance.should be_valid + end + + it "should require hardware profile to be set" do + @instance.hardware_profile_id = nil + @instance.should_not be_valid + + @instance.hardware_profile_id = 1 + @instance.should be_valid + end + + it "should require image to be set" do + @instance.image_id = nil + @instance.should_not be_valid + + @instance.image_id = 1 + @instance.should be_valid + end + + it "should have a name of reasonable length" do + [nil, '', 'x'*1025].each do |invalid_name| + @instance.name = invalid_name + @instance.should_not be_valid + end + @instance.name = 'x'*1024 + @instance.should be_valid + + end + + it "should have unique name" do + @instance.save! + second_instance = Factory.build(:instance, + :pool_id => @instance.pool_id, + :name => @instance.name) + second_instance.should_not be_valid + + second_instance.name = 'unique name' + second_instance.should be_valid + end + + it "should be invalid for unknown states" do + ["new", "pending", "running", "shutting_down", "stopped", + "create_failed"].each do |valid_state| + @instance.state = 'invalid_state' + @instance.should_not be_valid + @instance.state = valid_state + @instance.should be_valid + end + end + + + it "should tell apart valid and invalid actions" do + @instance.stub!(:get_action_list).and_return(@actions) + @instance.valid_action?('invalid action').should == false + @instance.valid_action?('start').should == true + end + + it "should return action list" do + @instance.get_action_list.should eql([]) + + InstanceTask.stub!(:valid_actions_for_instance_state).and_return( + @actions) + @instance.get_action_list.should eql(@actions) + end + + it "should be able to queue new actions" do + @instance.stub!(:get_action_list).and_return(@actions) + user = User.new + + invalid_task = @instance.queue_action(user, 'unknown action') + invalid_task.should == false + valid_task = @instance.queue_action(user, 'stop') + valid_task.should_not == false + end + + it "should be able to query and set up frontend realm" 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.save! + @instance = Factory.create(:instance, + :cloud_account_id => cloud_account.id) + @instance.front_end_realm.should eql('mock2:john doe') + + realm = Factory.create(:realm, :name => 'a realm', + :provider_id => provider.id) + @instance.realm = realm + @instance.front_end_realm.should eql('mock2:john doe/a realm') + + Factory.create(:realm, :name => 'different realm', + :provider_id => provider.id) + @instance.front_end_realm = 'mock2:john doe/different realm' + @instance.front_end_realm.should eql('mock2:john doe/different realm') + end + + +end
From: Tomas Sedovic tsedovic@redhat.com
--- src/app/models/instance.rb | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb index 902a458..fa89844 100644 --- a/src/app/models/instance.rb +++ b/src/app/models/instance.rb @@ -38,6 +38,7 @@ class Instance < ActiveRecord::Base
validates_presence_of :name validates_uniqueness_of :name, :scope => :pool_id + validates_length_of :name, :maximum => 1024
# FIXME: for now, hardware profile is required, realm is optional, although for RHEV-M, # hardware profile may be optional too
tsedovic@redhat.com wrote:
From: Tomas Sedovic tsedovic@redhat.com
src/app/models/instance.rb | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb index 902a458..fa89844 100644 --- a/src/app/models/instance.rb +++ b/src/app/models/instance.rb @@ -38,6 +38,7 @@ class Instance < ActiveRecord::Base
validates_presence_of :name validates_uniqueness_of :name, :scope => :pool_id
validates_length_of :name, :maximum => 1024
# FIXME: for now, hardware profile is required, realm is optional, although for RHEV-M, # hardware profile may be optional too
ACK to both patches in this series
Scott
deltacloud-devel@lists.fedorahosted.org