From: Tomas Sedovic <[email protected]>

---
 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
-- 
1.6.6.1

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

Reply via email to