You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2011/11/29 14:45:02 UTC

[PATCH core 10/10] CIMI: Added delete operation Cucumber scenario for Machine entity and couple other minor fixed there

From: Michal Fojtik <mf...@redhat.com>


Signed-off-by: Michal fojtik <mf...@redhat.com>
---
 server/tests/cimi/features/machines.feature        |   37 +++++++-----
 .../features/step_definitions/machines_steps.rb    |   59 ++++++++++++++++----
 server/tests/cimi/features/support/env.rb          |    8 +++
 3 files changed, 77 insertions(+), 27 deletions(-)

diff --git a/server/tests/cimi/features/machines.feature b/server/tests/cimi/features/machines.feature
index badf427..08934ad 100644
--- a/server/tests/cimi/features/machines.feature
+++ b/server/tests/cimi/features/machines.feature
@@ -2,7 +2,7 @@ Feature: Managing Machines
   In order to interact with the provider
   We must first be provided a URL to the main entry point (CEP).
 
-  Scenario: Create a New Machine
+  Scenario: Create a New Machine entity
     Given Cloud Entry Point URL is provided
     And client retrieve the Cloud Entry Point
     When client specifies a Machine Image
@@ -14,28 +14,33 @@ Feature: Managing Machines
       | description | sampleMachine1Description |
     Then client should be able to create this Machine
 
-  Scenario: Querying created Machine
+  Scenario: Querying created Machine entity
     Given Cloud Entry Point URL is provided
     And client retrieve the Cloud Entry Point
-    When client query for 'sampleMachine1' Machine entity
-    Then client should verify that this machine exists
-    And client should verify that this Machine has set
-      | name        | sampleMachine1            ||
-      | description | sampleMachine1Description ||
-      | cpu         | 1                         ||
-      | memory      | quantity                  | 1740  |
-      | state       | RUNNING                   ||
+    When client query for created Machine entity
+    Then client should verify that this Machine exists
+    And client should verify that this Machine has been created properly
+      | cpu         | 1                         |
+      | memory      | 1740.8                    |
+      | state       | STARTED                   |
 
-  Scenario: Stopping Machine
+  Scenario: Stopping created Machine entity
     Given Cloud Entry Point URL is provided
     And client retrieve the Cloud Entry Point
-    When client executes stop operation on Machine 'sampleMachine1'
-    Then client should be able to query for 'sampleMachine1' Machine entity
+    When client executes stop operation on created Machine
+    Then client query for created Machine entity
     And client should verify that this machine is stopped
 
-  Scenario: Starting Machine
+  Scenario: Starting created Machine entity
     Given Cloud Entry Point URL is provided
     And client retrieve the Cloud Entry Point
-    When client executes start operation on Machine 'sampleMachine1'
-    Then client should be able to query for 'sampleMachine1' Machine entity
+    When client executes start operation on created Machine
+    Then client query for created Machine entity
     And client should verify that this machine is started
+
+  Scenario: Deleting created Machine entity
+    Given Cloud Entry Point URL is provided
+    And client retrieve the Cloud Entry Point
+    When client executes delete operation on created Machine
+    Then client query for created Machine entity
+    And client should verify that this machine is deleted
diff --git a/server/tests/cimi/features/step_definitions/machines_steps.rb b/server/tests/cimi/features/step_definitions/machines_steps.rb
index d8a6b87..a8b63d0 100644
--- a/server/tests/cimi/features/step_definitions/machines_steps.rb
+++ b/server/tests/cimi/features/step_definitions/machines_steps.rb
@@ -21,9 +21,10 @@ end
 When /^client specifies a new Machine using$/ do |machine|
   @machine_image.should_not be_nil
   @machine_configuration.should_not be_nil
+  @new_machine_name = machine.raw[0][1]
   @builder = Nokogiri::XML::Builder.new do |xml|
     xml.Machine(:xmlns => CMWG_NAMESPACE) {
-      xml.name machine.raw[0][1]
+      xml.name @new_machine_name
       xml.description machine.raw[1][1]
       xml.MachineTemplate {
         xml.MachineConfig( :href => @machine_configuration.uri )
@@ -34,23 +35,59 @@ When /^client specifies a new Machine using$/ do |machine|
 end
 
 Then /^client should be able to create this Machine$/ do
-  pending "\nNOTE: There is an inconsistency between Primer and CIMI spec\n" +
-    "The Primer says that client should send just pointners MachineConf and MachineImg\n"+
-    "The CIMI says that full XML need to be provided in order to create a Machine\n\n"
-  @machine = CIMI::Model::Machine.from_xml(@builder.to_xml)
   authorize 'mockuser', 'mockpassword'
-  post '/cimi/machines', @machine
+  header 'Content-Type', 'application/xml'
+  post '/cimi/machines', @builder.to_xml
   last_response.status.should == 201
+  set_new_machine(CIMI::Model::Machine.from_xml(last_response.body))
 end
 
-Then /^client should be able to query this Machine$/ do
-  get "/cimi/machines/%s" % (@new_machine/'')
+Then /^client query for created Machine entity$/ do
+  authorize 'mockuser', 'mockpassword'
+  header 'Content-Type', 'application/xml'
+  get "/cimi/machines/%s" % new_machine.name
+  if @delete_operation
+    last_response.status.should == 404
+  else
+    last_response.status.should == 200
+    @machine = CIMI::Model::Machine.from_xml(last_response.body)
+    @machine.name.should == new_machine.name
+  end
+
 end
 
-When /^client executes (\w+) operation on Machine '(\w+)'$/ do |operation, machine_id|
-  pending # express the regexp above with the code you wish you had
+Then /^client should verify that this Machine has been created properly$/ do |attrs|
+  attrs.rows_hash.each do |key, value|
+    if key == 'memory'
+      @machine.memory['quantity'].to_s.should == value
+    else
+      @machine.send(key.intern).to_s.should == value
+    end
+  end
+end
+
+When /^client executes (\w+) operation on created Machine$/ do |operation|
+  builder = Nokogiri::XML::Builder.new do |xml|
+    xml.Action(:xmlns => CMWG_NAMESPACE) {
+      xml.action "http://www.dmtf.org/cimi/action/#{operation}"
+    }
+  end
+  authorize 'mockuser', 'mockpassword'
+  header 'Content-Type', 'application/xml'
+  if operation == 'delete'
+    delete "/cimi/machines/%s/delete" % new_machine.name
+    last_response.status.should == 200
+    last_response.body.should be_empty
+    @delete_operation = true
+  else
+    post "/cimi/machines/%s/%s" % [new_machine.name, operation], builder.to_xml
+    last_response.status.should == 202
+    last_response.body.should be_empty
+  end
 end
 
 Then /^client should verify that this machine is (\w+)$/ do |status|
-  pending # express the regexp above with the code you wish you had
+  unless @delete_operation
+    @machine.state.should == status.upcase
+  end
 end
diff --git a/server/tests/cimi/features/support/env.rb b/server/tests/cimi/features/support/env.rb
index f55e811..06ff3d6 100644
--- a/server/tests/cimi/features/support/env.rb
+++ b/server/tests/cimi/features/support/env.rb
@@ -16,6 +16,14 @@ def last_xml_response
   Nokogiri::XML(last_response.body)
 end
 
+def new_machine
+  @@new_machine
+end
+
+def set_new_machine(machine)
+  @@new_machine = machine
+end
+
 class String
 
   def to_class_name
-- 
1.7.4.4