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:42 UTC

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

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