You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by rl...@redhat.com on 2012/12/02 06:47:41 UTC

CIMI - tests add machineTemplates test and selection/preferred

Hi,
This patch adds a test for creating a machine from a machineTemplate. Note that parts of this test may fail because did not have a working Deltacloud (with machine Templates) to prequalify the test. Will resubmit once machineTemplates can be tested.

This patch also removes the reliance on "preferred" collections being entered in the config.yaml file. If no preferred image/*config is stipulated, the test will pick the first available one.

[PATCH] CIMI - tests add machineTemplates test and selection if no preferred option

Posted by rl...@redhat.com.
From: Ronelle Landy <rl...@redhat.com>

---
 tests/cimi/part2_test.rb  |    4 +-
 tests/cimi/part3_test.rb  |   77 ++++++++++++++++++++++++++++++++++++++++++++-
 tests/cimi/part4_test.rb  |   18 +++-------
 tests/cimi/part5_test.rb  |    6 ++--
 tests/cimi/test_helper.rb |   30 +++++++++++------
 tests/config.yaml         |    6 ++--
 6 files changed, 109 insertions(+), 32 deletions(-)

diff --git a/tests/cimi/part2_test.rb b/tests/cimi/part2_test.rb
index d04e026..ae26710 100644
--- a/tests/cimi/part2_test.rb
+++ b/tests/cimi/part2_test.rb
@@ -58,9 +58,9 @@ end
         "<name>cimi_machine_" + fmt.to_s() + "</name>" +
         "<machineTemplate>" +
           "<machineConfig " +
-            "href=\"" + cep_json.json["machineConfigs"]["href"] + "/" + api.provider_perferred_config + "\"/>" +
+            "href=\"" + get_a(cep_json, "machineConfig")+ "\"/>" +
           "<machineImage " +
-            "href=\"" + cep_json.json["machineImages"]["href"] + "/" + api.provider_perferred_image + "\"/>" +
+            "href=\"" + get_a(cep_json, "machineImage") + "\"/>" +
         "</machineTemplate>" +
       "</Machine>",
       {'Authorization' => api.basic_auth, :accept => fmt})
diff --git a/tests/cimi/part3_test.rb b/tests/cimi/part3_test.rb
index 10bc2d5..190fb61 100644
--- a/tests/cimi/part3_test.rb
+++ b/tests/cimi/part3_test.rb
@@ -19,5 +19,80 @@ $:.unshift File.join(File.dirname(__FILE__))
 require "test_helper.rb"
 
 class CreateNewMachineFromMachineTemplate < CIMI::Test::Spec
- log.info("MachineTemplates are not yet a supported collection - Deltacloud CIMI interface.")
+  RESOURCE_URI =
+    "http://schemas.dmtf.org/cimi/1/CloudEntryPoint"
+  ROOTS = ["machines", "machineImages", "machineConfigurations"]
+
+  MiniTest::Unit.after_tests { teardown(@@created_resources, api.basic_auth) }
+
+  # 3.1: Query the CEP
+  model :subject, :cache => true do |fmt|
+    cep(:accept => fmt)
+  end
+
+  # This test must adhere to one of the "Query the CEP" test in the previous section.
+  # CEP.machines, CEP.machineConfigs and CEP.machineImages must be set
+  query_the_cep(ROOTS)
+
+  # 3.2 Querying MachineTemplates
+  # At least one MachineTemplate resource must appear in the collection
+  it "should contain one MachineTemplates resource" do
+    r = "machineTemplates".underscore.to_sym
+    model = fetch(subject.send(r).href)
+    log.info(model.attribute_values[r][0])
+    assert_equal model.attribute_values[r][0].nil?(), false
+  end
+
+  # A represenation of a MachineTemplatesCollection resource is returned.
+  cep_json = cep(:accept => :json)
+  model :machineTemplate do |fmt|
+    get(cep_json.json["machineTemplates"]["href"], {:accept=> :json}).json["machineTemplates"][0]
+  end
+
+  it "should have a name" do
+    machineTemplate["name"].wont_be_empty
+  end
+
+  it "should have a response code equal to 200" do
+    machineTemplate
+    last_response.code.must_equal 200
+  end
+
+  it "should have a machineConfig" do
+    machineTemplate["machineConfig"].wont_be_empty
+  end
+
+  it "should have a machineImage" do
+    machineTemplate["machineImage"].wont_be_empty
+  end
+
+  # 3.3 Creating a new machine
+  model :machine do |fmt|
+    cep_json = cep(:accept => :json)
+    #discover the 'addURI' for creating Machine
+    add_uri = discover_uri_for("add", "machines")
+    RestClient.post(add_uri,
+      "<Machine>" +
+        "<name>cimi_machine_from_template" + fmt.to_s() + "</name>" +
+        "<description> Created machine from template" + fmt.to_s() + "</description>" +
+        "<machineTemplate" +
+          "href=\"" + get_a(cep_json, "machineTemplate")+ "\"/>" +
+      "</Machine>",
+    {'Authorization' => api.basic_auth, :accept => fmt})
+  end
+
+  it "should add resource for cleanup" do
+    @@created_resources[:machines] << machine.id
+  end
+
+  it "should have a name" do
+    machine.name.wont_be_empty
+    log.info("machine name: " + machine.name)
+  end
+
+  it "should have a response code equal to 201" do
+    machine
+    last_response.code.must_equal 201
+  end
+
 end
diff --git a/tests/cimi/part4_test.rb b/tests/cimi/part4_test.rb
index 8e27c9c..056aeff 100644
--- a/tests/cimi/part4_test.rb
+++ b/tests/cimi/part4_test.rb
@@ -31,7 +31,7 @@ class AddVolumeToMachine < CIMI::Test::Spec
     cep(:accept => fmt)
   end
 
-  # 2.2, 2.3: CEP.machines, CEP.volumes and CEP.volumeConfigs must be set
+  # 4.2, 4.3: CEP.machines, CEP.volumes and CEP.volumeConfigs must be set
   query_the_cep(ROOTS)
 
   # At least one VolumeConfiguration resource must appear in the collection
@@ -55,9 +55,9 @@ class AddVolumeToMachine < CIMI::Test::Spec
        "<name>cimi_machine</name>" +
        "<machineTemplate>" +
          "<machineConfig " +
-           "href=\"" + cep_json.json["machineConfigs"]["href"] + "/" + api.provider_perferred_config + "\"/>" +
+           "href=\"" + get_a(cep_json, "machineConfig") + "\"/>" +
          "<machineImage " +
-           "href=\"" + cep_json.json["machineImages"]["href"] + "/" + api.provider_perferred_image + "\"/>" +
+           "href=\"" + get_a(cep_json, "machineImage") + "\"/>" +
        "</machineTemplate>" +
      "</Machine>",
      {'Authorization' => api.basic_auth, :accept => :json})
@@ -70,8 +70,7 @@ class AddVolumeToMachine < CIMI::Test::Spec
         "<name>cimi_volume_" + fmt.to_s() +"</name>" +
         "<description>volume for testing</description>" +
         "<volumeTemplate>" +
-          "<volumeConfig href=\"" + cep_json.json["volumeConfigs"]["href"]  +  "/" +
-            api.provider_perferred_volume_config + "\">" +
+          "<volumeConfig href=\"" + get_a(cep_json, "volumeConfig") + "\">" +
           "</volumeConfig>" +
         "</volumeTemplate>" +
       "</Volume>",
@@ -108,8 +107,7 @@ class AddVolumeToMachine < CIMI::Test::Spec
     "<name>cimi_volume_for_attach</name>" +
     "<description>volume for attach testing</description>" +
     "<volumeTemplate>" +
-      "<volumeConfig href=\"" + cep_json.json["volumeConfigs"]["href"] +  "/" +
-        api.provider_perferred_volume_config + "\">" +
+      "<volumeConfig href=\"" + get_a(cep_json, "volumeConfig") + "\">" +
       "</volumeConfig>" +
     "</volumeTemplate>" +
   "</Volume>",
@@ -132,15 +130,11 @@ class AddVolumeToMachine < CIMI::Test::Spec
     last_response.code.must_equal 201
   end
 
-  it "should have delete and edit operations", :only => :xml do
-    # no edit
+  it "should have a delete operation", :only => :xml do
     machineWithVolume[:operations][0][0].must_include "delete"
   end
 
   it "should be able to detach from the instance", :only => :xml do
-    log.info( machine.json["id"] +
-    "/volumes/" + volume.json["id"].split("/volumes/")[1])
-     sleep 5
     detach_uri = discover_uri_for("delete", "", machineWithVolume.operations)
     response = RestClient.delete(detach_uri,
     {'Authorization' => api.basic_auth, :accept => :xml})
diff --git a/tests/cimi/part5_test.rb b/tests/cimi/part5_test.rb
index a5a58a9..d451a7b 100644
--- a/tests/cimi/part5_test.rb
+++ b/tests/cimi/part5_test.rb
@@ -36,9 +36,9 @@ class ManipulateAMachine < CIMI::Test::Spec
       "<name>cimi_machine_part5</name>" +
       "<machineTemplate>" +
         "<machineConfig " +
-          "href=\"" + cep_json.json["machineConfigs"]["href"] + "/" + api.provider_perferred_config + "\"/>" +
+          "href=\"" + get_a(cep_json, "machineConfig") + "\"/>" +
         "<machineImage " +
-          "href=\"" + cep_json.json["machineImages"]["href"] + "/" + api.provider_perferred_image + "\"/>" +
+          "href=\"" + get_a(cep_json, "machineImage") + "\"/>" +
       "</machineTemplate>" +
     "</Machine>",
     {'Authorization' => api.basic_auth, :accept => :json})
@@ -80,7 +80,7 @@ class ManipulateAMachine < CIMI::Test::Spec
     s.must_include machine.state.upcase
   end
 
-  it "should have disks and columes collections" do
+  it "should have disks and volumes collections" do
     machine.disks.must_respond_to :href, "disks collection"
     machine.volumes.must_respond_to :href, "volumes collection"
   end
diff --git a/tests/cimi/test_helper.rb b/tests/cimi/test_helper.rb
index 3b9e4bf..1b235c7 100644
--- a/tests/cimi/test_helper.rb
+++ b/tests/cimi/test_helper.rb
@@ -34,7 +34,6 @@ module CIMI
       def initialize
         @hash = Deltacloud::Test::yaml_config
         @cimi = @hash["cimi"]
-        @preferred = @cimi["preferred"]
       end
 
       def cep_url
@@ -51,16 +50,8 @@ module CIMI
         "Basic #{Base64.encode64("#{u}:#{p}")}"
       end
 
-      def provider_perferred_image
-        @preferred["machine_image"]
-      end
-
-      def provider_perferred_config
-        @preferred["machine_config"]
-      end
-
-      def provider_perferred_volume_config
-        @preferred["volume_config"]
+      def preferred
+        @cimi["preferred"] || {}
       end
 
       def collections
@@ -121,6 +112,23 @@ module CIMI::Test::Methods
       discover_uri_for(op, "", subcollection_ops)
     end
 
+    def get_a(cep, item)
+      if api.preferred[item]
+        item_id = cep.json[item.pluralize]["href"] + "/" + api.preferred[item]
+      else
+        item_id = get(cep.json[item.pluralize]["href"], {:accept=> :json}).json[full_name(item).pluralize][0]["id"]
+      end
+    end
+
+    def full_name(item)
+      if item.include?("Config")
+        full_name = item.gsub("Config", "Configuration")
+      else
+        full_name = item
+      end
+    end
+
+
     def get(path, params = {})
       RestClient.get absolute_url(path), headers(params)
     end
diff --git a/tests/config.yaml b/tests/config.yaml
index a8cd727..9e21c9f 100644
--- a/tests/config.yaml
+++ b/tests/config.yaml
@@ -36,6 +36,6 @@ cimi:
   user: "mockuser"
   password: "mockpassword"
   preferred:
-    machine_image: "img2"
-    machine_config: "m1-small"
-    volume_config: "2"
+   machineImage: "img2"
+   machineConfig: "m1-small"
+   volumeConfig: "2"
-- 
1.7.7.6