You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by ma...@apache.org on 2013/04/22 18:35:09 UTC

[1/7] git commit: CIMI: CIMI Systems - tidy up way that Action resources are performed

Updated Branches:
  refs/heads/master 29b551fa1 -> f6f2599df


CIMI: CIMI Systems - tidy up way that Action resources are performed

Signed-off-by: marios <ma...@redhat.com>


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/ac2495e2
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/ac2495e2
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/ac2495e2

Branch: refs/heads/master
Commit: ac2495e2f690daa7142ae7b2616bd94464ba6722
Parents: a09d8fa
Author: marios <ma...@redhat.com>
Authored: Fri Apr 19 16:13:24 2013 +0300
Committer: marios <ma...@redhat.com>
Committed: Mon Apr 22 17:52:40 2013 +0300

----------------------------------------------------------------------
 server/lib/cimi/collections/systems.rb |   34 +++++++-------------------
 server/lib/cimi/service/system.rb      |    9 ++++---
 2 files changed, 14 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/ac2495e2/server/lib/cimi/collections/systems.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/collections/systems.rb b/server/lib/cimi/collections/systems.rb
index 179daea..e11ed88 100644
--- a/server/lib/cimi/collections/systems.rb
+++ b/server/lib/cimi/collections/systems.rb
@@ -32,7 +32,7 @@ module CIMI::Collections
         control do
           system = System.find(params[:id], self)
           action = Action.parse(self)
-          system.perform(action, self) do |operation|
+          system.perform(action) do |operation|
             no_content_with_status(202) if operation.success?
             # Handle errors using operation.failure?
           end
@@ -44,12 +44,8 @@ module CIMI::Collections
         param :id,          :string,    :required
         control do
           system = System.find(params[:id], self)
-          if  grab_content_type(request.content_type, request.body) == :json
-            action = Action.from_json(request.body.read.gsub("restart", "reboot"))
-          else
-            action = Action.from_xml(request.body.read.gsub("restart", "reboot"))
-          end
-          system.perform(action, self) do |operation|
+          action = Action.parse(self)
+          system.perform(action) do |operation|
             no_content_with_status(202) if operation.success?
             # Handle errors using operation.failure?
           end
@@ -61,12 +57,8 @@ module CIMI::Collections
         param :id,          :string,    :required
         control do
           system = System.find(params[:id], self)
-          if  grab_content_type(request.content_type, request.body) == :json
-            action = Action.from_json(request.body.read)
-          else
-            action = Action.from_xml(request.body.read)
-          end
-          system.perform(action, self) do |operation|
+          action = Action.parse(self)
+          system.perform(action) do |operation|
             no_content_with_status(202) if operation.success?
             # Handle errors using operation.failure?
           end
@@ -78,12 +70,8 @@ module CIMI::Collections
         param :id,          :string,    :required
         control do
           system = System.find(params[:id], self)
-          if  grab_content_type(request.content_type, request.body) == :json
-            action = Action.from_json(request.body.read)
-          else
-            action = Action.from_xml(request.body.read)
-          end
-          system.perform(action, self) do |operation|
+          action = Action.parse(self)
+          system.perform(action) do |operation|
             no_content_with_status(202) if operation.success?
             # Handle errors using operation.failure?
           end
@@ -95,12 +83,8 @@ module CIMI::Collections
         param :id,          :string,    :required
         control do
           system = System.find(params[:id], self)
-          if  grab_content_type(request.content_type, request.body) == :json
-            action = Action.from_json(request.body.read)
-          else
-            action = Action.from_xml(request.body.read)
-          end
-          system.perform(action, self) do |operation|
+          action = Action.parse(self)
+          system.perform(action) do |operation|
             no_content_with_status(202) if operation.success?
             # Handle errors using operation.failure?
           end

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/ac2495e2/server/lib/cimi/service/system.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/service/system.rb b/server/lib/cimi/service/system.rb
index daad428..21a8dfe 100644
--- a/server/lib/cimi/service/system.rb
+++ b/server/lib/cimi/service/system.rb
@@ -14,7 +14,6 @@
 # under the License.
 
 class CIMI::Service::System < CIMI::Service::Base
-
   def self.find(id, context)
     if id == :all
       systems = context.driver.systems(context.credentials, {:env=>context})
@@ -25,14 +24,16 @@ class CIMI::Service::System < CIMI::Service::Base
     end
   end
 
-  def perform(action, context, &block)
+  def perform(action, &block)
     begin
-      if context.driver.send(:"#{action.name}_system", context.credentials, self.id.split("/").last)
+      op = action.operation
+      if context.driver.send(:"#{op}_system", context.credentials, ref_id(id))
         block.callback :success
       else
-        raise "Operation failed to execute on given System"
+        raise "Operation #{op} failed to execute on given System #{ref_id(id)}"
       end
     rescue => e
+      raise
       block.callback :failure, e.message
     end
   end


[4/7] git commit: CIMI: CIMI Systems mock driver - many fixes - create/start/stop/delete system

Posted by ma...@apache.org.
CIMI: CIMI Systems mock driver - many fixes - create/start/stop/delete system


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/1b261058
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/1b261058
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/1b261058

Branch: refs/heads/master
Commit: 1b261058c0a49d9e8d935de186e96611eb0a2aa8
Parents: 84c7bbd
Author: marios <ma...@redhat.com>
Authored: Mon Apr 22 19:30:46 2013 +0300
Committer: marios <ma...@redhat.com>
Committed: Mon Apr 22 19:30:46 2013 +0300

----------------------------------------------------------------------
 server/lib/deltacloud/drivers/mock/mock_client.rb  |   11 ++-
 .../drivers/mock/mock_driver_cimi_methods.rb       |   85 +++++++++++++--
 2 files changed, 86 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/1b261058/server/lib/deltacloud/drivers/mock/mock_client.rb
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/mock_client.rb b/server/lib/deltacloud/drivers/mock/mock_client.rb
index f9795c6..7fb175a 100644
--- a/server/lib/deltacloud/drivers/mock/mock_client.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_client.rb
@@ -96,9 +96,9 @@ module Deltacloud::Drivers::Mock
       FileUtils.rm(fname) if File::exists?(fname)
     end
 
-    def store_cimi(collection, obj)
-      raise "Why no obj.name?" unless obj.name
-      File::open(cimi_file(collection, obj.name), "w") { |f| f.write(obj.to_json) }
+    def store_cimi(collection, obj, id=nil)
+      raise "Why no obj.name?" unless obj.name || id
+      File::open(cimi_file(collection, (id || obj.name)), "w") { |f| f.write(obj.to_json) }
     end
 
     def destroy_cimi(collection, id)
@@ -124,6 +124,11 @@ module Deltacloud::Drivers::Mock
       File::join(@storage_root, "cimi", collection.to_s)
     end
 
+    def cimi_members(collection)
+      model_files = Dir[File::join(cimi_dir(collection), "*.json")]
+      model_files.map { |f| File::basename(f, ".json") }
+    end
+
     private
 
     def collection_name(klass)

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/1b261058/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb b/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
index 217736a..f533758 100644
--- a/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_driver_cimi_methods.rb
@@ -33,45 +33,115 @@ module Deltacloud::Drivers::Mock
         end
       end
       systems.map{|sys| convert_urls(sys, opts[:env])}.flatten
+      systems
     end
 
     def create_system(credentials, opts={})
       check_credentials(credentials)
+      create_system_components_for(opts[:name], opts[:system_template].component_descriptors, opts[:env])
       id = "#{opts[:env].send("systems_url")}/#{opts[:name]}"
       sys_hsh = { "id"=> id,
                   "name" => opts[:name],
                   "description" => opts[:description],
                   "created" => Time.now,
-                  "state" => "STOPPED",
-                  "systemTemplate"=> { "href" => opts[:system_template].id },
-                  "operations" => [{"rel"=>"http://schemas.dmtf.org/cimi/1/action/start", "href"=> "#{id}/start"},
+                  "state" => "STARTED",
+                  "operations" => [{"rel"=>"http://schemas.dmtf.org/cimi/1/action/stop",  "href"=> "#{id}/stop"},
                                    {"rel"=>"edit", "href"=> id},
-                                   {"rel"=>"delete", "href"=> id}]    }
+                                   {"rel"=>"delete", "href"=> id}]}
       system = CIMI::Model::System.from_json(JSON.generate(sys_hsh))
-
       @client.store_cimi(:system, system)
       system
     end
 
+    def create_system_components_for(system_id, component_descriptors, context)
+      component_descriptors.each do |cd|
+        cd_type = cd.type.split("/").last
+        model = CIMI::Model.const_get("#{cd_type}Create").new
+        #assign the template from the component descriptor
+        model.send("#{cd_type.underscore}_template=".to_sym, cd.send("#{cd_type.underscore}_template".to_sym))
+        #also the name, description from the component descriptor for the new resource:
+        model.send(:name=, cd.name)
+        model.send(:description=, cd.description)
+        resource = CIMI::Service.const_get("#{cd_type}Create").new(context, :model=>model)
+        #create quantity number of resources, obeying naming rules
+        if cd.quantity && cd.quantity > 1
+          cd.quantity.times do |t|
+            resource.model.send(:name=, "#{cd.name}#{t+1}")
+            created_sys_comp = resource.create.model
+            store_created_system_component(created_sys_comp, cd_type, system_id, context)
+          end
+        else
+          created_sys_comp = resource.create.model
+          store_created_system_component(created_sys_comp, cd_type, system_id, context)
+        end
+      end
+    end
+
+    def store_created_system_component(component, type, system_id, context)
+      seq_id = generate_system_component_id(type.underscore)
+      id = "#{context.send("system_url")}/#{system_id}/#{type.pluralize.underscore}/#{seq_id}"
+      system_component_hash = { :id => id,
+                                :name =>component.name,
+                                :description =>component.description,
+                                :created => Time.now,
+                                "#{type.underscore}".to_sym => {:href => component.id},
+                                :operations=> [{"rel"=>"edit", "href"=> id},
+                                               {"rel"=>"delete", "href"=> id}]
+                               }
+      system_component = CIMI::Model.const_get("System#{type}").from_json(JSON.generate(system_component_hash))
+      @client.store_cimi("system_#{type.underscore}".to_sym, system_component, seq_id)
+    end
+
+    def generate_system_component_id(type)
+      ids = @client.cimi_members("system_#{type}".to_sym)
+      count, next_id = 1, ''
+      loop do
+        break unless ids.include?(next_id = "sys_#{type}_#{count}")
+        count = count + 1
+      end
+      next_id
+    end
+
     def destroy_system(credentials, id)
       check_credentials(credentials)
+      #retrieve the system_machines to delete them
+      sys_machines = system_machines(credentials, {:system_id => id})
+      sys_machines.each do |mach|
+        inst_id = mach.machine.href.split("/").last
+        @client.destroy(:instances, inst_id)
+        mach_id = mach.id.split("/").last
+        @client.destroy_cimi(:system_machine, mach_id)
+      end
       @client.destroy_cimi(:system, id)
     end
 
     def start_system(credentials, id)
       check_credentials(credentials)
+      sys_machines = system_machines(credentials, {:system_id => id})
+      sys_machines.each do |mach|
+        inst_id = mach.machine.href.split("/").last
+        update_instance_state(credentials, inst_id , "RUNNING") #deltacloud instance, not machine
+      end
+      #retrieve system machines:
       update_object_state(id, "System", "STARTED")
     end
 
     def stop_system(credentials, id)
       check_credentials(credentials)
+      sys_machines = system_machines(credentials, {:system_id => id})
+      sys_machines.each do |mach|
+        inst_id = mach.machine.href.split("/").last
+        update_instance_state(credentials, inst_id , "STOPPED")
+      end
       update_object_state(id, "System", "STOPPED")
     end
 
     def system_machines(credentials, opts={})
       check_credentials(credentials)
       if opts[:id].nil?
-        machines = @client.load_all_cimi(:system_machine).map{|mach| CIMI::Model::SystemMachine.from_json(mach)}
+        all_machines = @client.load_all_cimi(:system_machine).map{|mach| CIMI::Model::SystemMachine.from_json(mach)}
+        #grab only ones for system_id:
+        machines = all_machines.inject([]){|res,cur| res << cur if cur.id =~ /^.*\/systems\/#{opts[:system_id]}\/machines/  ;res}
       else
         begin
           machines = [CIMI::Model::SystemMachine.from_json(@client.load_cimi(:system_machine, opts[:id]))]
@@ -85,7 +155,8 @@ module Deltacloud::Drivers::Mock
     def system_volumes(credentials, opts={})
       check_credentials(credentials)
       if opts[:id].nil?
-        volumes = @client.load_all_cimi(:system_volume).map{|vol| CIMI::Model::SystemVolume.from_json(vol)}
+        all_volumes = @client.load_all_cimi(:system_volume).map{|vol| CIMI::Model::SystemVolume.from_json(vol)}
+        volumes = all_volumes.inject([]){|res,cur| res << cur if cur.id =~ /^.*\/systems\/#{opts[:system_id]}\/volumes/  ;res}
       else
         begin
           volumes = [CIMI::Model::SystemVolume.from_json(@client.load_cimi(:system_volume, opts[:id]))]


[5/7] git commit: CIMI: CIMI Systems mock driver fixtures (json)

Posted by ma...@apache.org.
CIMI: CIMI Systems mock driver fixtures (json)


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/ed68a682
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/ed68a682
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/ed68a682

Branch: refs/heads/master
Commit: ed68a6828a0abb888a5417b401e65a88753c3c04
Parents: 1b26105
Author: marios <ma...@redhat.com>
Authored: Mon Apr 22 19:32:39 2013 +0300
Committer: marios <ma...@redhat.com>
Committed: Mon Apr 22 19:32:39 2013 +0300

----------------------------------------------------------------------
 .../drivers/mock/data/cimi/system/system1.json     |    7 +++
 .../drivers/mock/data/cimi/system/system2.json     |    3 +-
 .../data/cimi/system_machine/sys_machine_1.json    |    8 +++
 .../mock/data/cimi/system_template/template1.json  |   34 +++-----------
 .../mock/data/cimi/system_volume/sys_volume_1.json |    8 +++
 5 files changed, 33 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/ed68a682/server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json b/server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json
index f921632..edff9cb 100644
--- a/server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json
+++ b/server/lib/deltacloud/drivers/mock/data/cimi/system/system1.json
@@ -3,6 +3,13 @@
   "description": "the first system",
   "created": "Fri Feb 08 15:25:41 EET 2013",
   "state": "STOPPED",
+  "machines": { "href": "http://cimi.example.org/systems/system1/machines"},
+  "credentials": { "href": "http://cimi.example.org/systems/system1/credentials"},
+  "volumes": { "href": "http://cimi.example.org/systems/system1/volumes"},
+  "networks": { "href": "http://cimi.example.org/systems/system1/networks"},
+  "networkPorts": { "href": "http://cimi.example.org/systems/system1/network_ports"},
+  "addresses": { "href": "http://cimi.example.org/systems/system1/addresses"},
+  "forwardingGroups": { "href": "http://cimi.example.org/systems/system1/forwarding_groups"},
   "operations": [
     { "rel": "http://schemas.dmtf.org/cimi/1/action/start", "href": "http://cimi.example.org/systems/system1/start" },
     { "rel": "edit", "href": "http://cimi.example.org/systems/system1" },

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/ed68a682/server/lib/deltacloud/drivers/mock/data/cimi/system/system2.json
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/cimi/system/system2.json b/server/lib/deltacloud/drivers/mock/data/cimi/system/system2.json
index 208feca..ee1dff8 100644
--- a/server/lib/deltacloud/drivers/mock/data/cimi/system/system2.json
+++ b/server/lib/deltacloud/drivers/mock/data/cimi/system/system2.json
@@ -3,8 +3,9 @@
   "description": "the second system",
   "created": "Fri Feb 08 15:25:41 EET 2013",
   "state": "STOPPED",
+  "machines": { "href": "http://cimi.example.org/systems/system2/machines"},
   "operations": [
-    { "rel": "http://schemas.dmtf.org/cimi/1/action/start", "href": "http://cimi.example.org/systems/system1/start" },
+    { "rel": "http://schemas.dmtf.org/cimi/1/action/start", "href": "http://cimi.example.org/systems/system2/start" },
     { "rel": "edit", "href": "http://cimi.example.org/systems/system2" },
     { "rel": "delete", "href": "http://cimi.example.org/systems/system2" }
   ]

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/ed68a682/server/lib/deltacloud/drivers/mock/data/cimi/system_machine/sys_machine_1.json
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/cimi/system_machine/sys_machine_1.json b/server/lib/deltacloud/drivers/mock/data/cimi/system_machine/sys_machine_1.json
new file mode 100644
index 0000000..2a480d1
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/cimi/system_machine/sys_machine_1.json
@@ -0,0 +1,8 @@
+{ "id": "http://cimi.example.org/systems/system1/machines/sys_machine_1",
+  "name": "sysmach1",
+  "created": "Fri Feb 08 12:15:15 EET 2013",
+  "machine": { "href": "http://cimi.example.org/machines/inst0" },
+  "operations": [
+    { "rel": "delete", "href": "http://cimi.example.org/systems/system1/machines/sys_machine_1" }
+  ]
+}

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/ed68a682/server/lib/deltacloud/drivers/mock/data/cimi/system_template/template1.json
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/cimi/system_template/template1.json b/server/lib/deltacloud/drivers/mock/data/cimi/system_template/template1.json
index 913252b..01d3dbe 100644
--- a/server/lib/deltacloud/drivers/mock/data/cimi/system_template/template1.json
+++ b/server/lib/deltacloud/drivers/mock/data/cimi/system_template/template1.json
@@ -3,45 +3,27 @@
   "description": "A mock system template",
   "created": "Fri Feb 08 12:15:15 EET 2013",
   "componentDescriptors": [
-    { "name": "my machine",
+    { "name": "a_system_machine",
       "description": "an inline mock machine template",
       "type": "http://schemas.dmtf.org/cimi/1/Machine",
       "machineTemplate": {
-        "name": "machine in mock system",
-        "description": "machine in system",
         "machineConfig": { "href": "http://example.com/configs/m1-small" },
-        "machineImage": { "href": "http://example.com/images/img1" },
-        "volumeTemplates": [
-	  { "href": "http://example.com/volumes/sysvol1" }
-	]
-      }
+        "machineImage": { "href": "http://example.com/images/img1" }
+      },
+      "quantity": 2
     },
-    { "name": "my second machine",
+    { "name": "another_system_machine",
       "description": "another inline mock machine template",
       "type": "http://schemas.dmtf.org/cimi/1/Machine",
       "machineTemplate": {
-        "name": "machine in mock system",
-        "description": "machine in system",
         "machineConfig": { "href": "http://example.com/configs/m1-small" },
-        "machineImage": { "href": "http://example.com/images/img1" },
-        "volumeTemplates": [
-	  { "volumeConfig": {"capacity": 10485760} }
-	]
+        "machineImage": { "href": "http://example.com/images/img1" }
       }
     },
-    { "name": "my third machine",
+    { "name": "yet_another_system_machine",
       "description": "a reference to a mock machine template",
       "type": "http://schemas.dmtf.org/cimi/1/Machine",
-      "machineTemplate": { "href" : "http://example.com/machine_templates/template1" }
-    },
-    { "name": "my network",
-      "description": "an inline network template",
-      "type": "http://schemas.dmtf.org/cimi/1/Network",
-      "networkTemplate": {
-        "name": "network in mock system",
-        "description": "network in system",
-        "networkConfig": { "networkType": "PRIVATE", "classOfService": "GOLD" }
-      }
+      "machineTemplate": { "href" : "http://example.com/machine_templates/1" }
     }
   ],
   "operations": [

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/ed68a682/server/lib/deltacloud/drivers/mock/data/cimi/system_volume/sys_volume_1.json
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/cimi/system_volume/sys_volume_1.json b/server/lib/deltacloud/drivers/mock/data/cimi/system_volume/sys_volume_1.json
new file mode 100644
index 0000000..aef74df
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/cimi/system_volume/sys_volume_1.json
@@ -0,0 +1,8 @@
+{ "id": "http://cimi.example.org/systems/system1/volumes/sys_volume_1",
+  "name": "sysvol1",
+  "created": "Fri Feb 08 12:15:15 EET 2013",
+  "volume": { "href": "http://cimi.example.org/volumes/vol1" },
+  "operations": [
+    { "rel": "delete", "href": "http://cimi.example.org/systems/system1/volumes/sys_volume_1" }
+  ]
+}


[2/7] git commit: CIMI - Test - systems scenario test

Posted by ma...@apache.org.
CIMI - Test - systems scenario test

Signed-off-by: marios <ma...@redhat.com>


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/a09d8fac
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/a09d8fac
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/a09d8fac

Branch: refs/heads/master
Commit: a09d8facbd8c4713824c338b7222d880fd72613f
Parents: 29b551f
Author: Ronelle Landy <rl...@redhat.com>
Authored: Tue Apr 9 15:11:36 2013 -0400
Committer: marios <ma...@redhat.com>
Committed: Mon Apr 22 17:52:40 2013 +0300

----------------------------------------------------------------------
 tests/cimi/system1_test.rb |  149 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 149 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/a09d8fac/tests/cimi/system1_test.rb
----------------------------------------------------------------------
diff --git a/tests/cimi/system1_test.rb b/tests/cimi/system1_test.rb
new file mode 100644
index 0000000..c9bd121
--- /dev/null
+++ b/tests/cimi/system1_test.rb
@@ -0,0 +1,149 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+$:.unshift File.join(File.dirname(__FILE__))
+
+require "test_helper.rb"
+
+class SystemTemplate < CIMI::Test::Spec
+  RESOURCE_URI = "http://schemas.dmtf.org/cimi/1/System"
+
+  ROOTS = [ "machines" , "systemTemplates" , "volumeTemplates"]
+  need_capability('add', 'systems')
+
+  # Cleanup for resources created for the test
+  MiniTest::Unit.after_tests {  teardown(@@created_resources, api.basic_auth) }
+
+  #  Ensure test executes in test plan order
+  i_suck_and_my_tests_are_order_dependent!
+
+  # 1.1: Query the CEP
+  model :subject, :cache => true do |fmt|
+    cep(:accept => fmt)
+  end
+
+  # CEP.machines, CEP.systemTemplates and CEP.volumeTemplates must be set
+  query_the_cep(ROOTS)
+
+  # 1.2 Query the systemTemplate collection
+  cep_json = cep(:accept => :json)
+
+  #model :system_template do |fmt|
+  #  get(cep_json.json[ROOTS[1]]["href"], :accept => :fmt)
+  #end
+
+  it "should return a 200 code" do
+    get(cep_json.json[ROOTS[1]]["href"], :accept => :json).code.must_equal 200
+    get(cep_json.json[ROOTS[1]]["href"], :accept => :xml).code.must_equal 200
+  end
+
+  # Retrieve existing system templates or the address to create a new system template
+  begin
+    # systemplate_add_uri = discover_uri_for("add", "system_templates")
+    it "should have at least one system template" do
+      r = ROOTS[1].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
+      model.attribute_values[r][0].id.must_be_uri
+
+       # 1.3 Select or Create a System Template
+       puts "System Template: " + get_a(cep_json, "systemTemplate")
+     end
+  rescue RuntimeError =>e
+  end
+
+  system_add_uri = discover_uri_for("add", "systems")
+  # 1.4 Create a new system from the systemTemplate
+  system_created = post(system_add_uri,
+    "<systemCreate xmlns=\"#{CIMI::Test::CIMI_NAMESPACE}\">" +
+    "<name>test_system</name>" +
+    "<systemTemplate href=\"" + get_a(cep_json, "systemTemplate") + "\"/>" +
+    "</systemCreate>", :content_type => :xml)
+
+  model :systems do |fmt|
+    get cep_json.json["systems"]["href"], :accept => fmt
+  end
+
+  it "should add resource machine resource for cleanup", :only => :json do
+    @@created_resources[:machines] << system_created.headers[:location]
+  end
+
+  it "should allow a system to be created" do
+    system_created.headers[:location].must_be_uri
+    system_created.code.must_be_one_of [201, 202]
+  end
+
+  # model :test_system_created do |fmt|
+  #   get(system_created.headers[:location], :accept => fmt)
+  # end
+
+  # 1.5 Query the new System
+  it "should return a representation of a system", :only => :json do
+    puts fetch(system_created.headers[:location]).id
+    #test_system_created
+    test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
+    test_system_created.code.must_equal 200
+    test_system_created.json["resourceURI"].must_equal RESOURCE_URI
+  end
+
+  # 1.6 Query the System SystemMachine collection
+  it "should have a SystemMachine collection with two entries", :only => :json do
+    #test_system_created
+    test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
+    system_machines = get(test_system_created.json["machines"]["href"], :accept => :json)
+    #system_machines.json["count"].must_equal 2
+    #system_machines.json["systemMachines"][0]["id"].  end
+  end
+
+  # 1.7 Query the System SystemVolume collection
+  it "should contain a single entry referencing a Volume named as indicated in the SystemTemplate", :only => :json do
+    #test_system_created
+    test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
+    system_volumes = get(test_system_created.json["volumes"]["href"], :accept => :json)
+    system_volumes.json["count"].must_equal 1
+    #system_volumes.json["systemVolumes"][0]["id"].must_equal "volume from template"
+  end
+
+  # 1.8 Check that the volume is attached to machine(s)
+  # Optional - skipping
+
+  # 1.9 Query the System SystemCredential collection
+  # Optional - skipping
+
+  # 1.10 Starting the new System
+  it "should be able to start the system", :only => :json  do
+    test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
+    unless test_system_created.json["state"].eql?("STARTED")
+      uri = discover_uri_for("start", "", test_system_created.json["operations"])
+      response = post( uri,
+            "<Action xmlns=\"http://schemas.dmtf.org/cimi/1\">" +
+              "<action> http://http://schemas.dmtf.org/cimi/1/action/start</action>" +
+            "</Action>",
+            :accept => :xml, :content_type => :xml)
+      response.code.must_equal 202
+      poll_state(get(fetch(system_created.headers[:location]).id, :accept => :json), "STARTED")
+      get(fetch(system_created.headers[:location]).id, :accept => :json).json["state"].upcase.must_equal "STARTED"
+    end
+  end
+
+  # 1.11 Check that the machines are started
+
+  # 1.12 Stop the new System
+
+  # 1.13 Check that the machines are stopped
+
+end


[6/7] git commit: CIMI: CIMI Systems - fixes in collection/base classes to correctly set 'href' for system collections

Posted by ma...@apache.org.
CIMI: CIMI Systems - fixes in collection/base classes to correctly set 'href' for system collections

(otherwise to_xml explodes)


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/a749c43f
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/a749c43f
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/a749c43f

Branch: refs/heads/master
Commit: a749c43fdd10a6908d340b6dae646ff565911abc
Parents: ed68a68
Author: marios <ma...@redhat.com>
Authored: Mon Apr 22 19:33:15 2013 +0300
Committer: marios <ma...@redhat.com>
Committed: Mon Apr 22 19:33:15 2013 +0300

----------------------------------------------------------------------
 server/lib/cimi/models/collection.rb           |   10 ++++++++++
 server/lib/cimi/service/base.rb                |    3 +++
 server/lib/deltacloud/helpers/rabbit_helper.rb |    1 +
 3 files changed, 14 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/a749c43f/server/lib/cimi/models/collection.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/models/collection.rb b/server/lib/cimi/models/collection.rb
index b06a1e9..b1dc264 100644
--- a/server/lib/cimi/models/collection.rb
+++ b/server/lib/cimi/models/collection.rb
@@ -122,6 +122,16 @@ module CIMI::Model
     # Return a collection of entities
     def list(id, entries, params = {})
       params[:id] = id
+      if params[:system]
+        entries.each do |sys|
+          entry_id = sys.model.id
+          sys.model.attribute_values.each do |k,v|
+            if v.is_a? CIMI::Model::Collection
+              v.href ||= "#{entry_id}/#{k.to_s}"
+            end
+          end
+        end
+      end
       params[:entries] = entries
       params[:count] = params[:entries].size
       if params[:add_url]

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/a749c43f/server/lib/cimi/service/base.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/service/base.rb b/server/lib/cimi/service/base.rb
index b829e6a..612542d 100644
--- a/server/lib/cimi/service/base.rb
+++ b/server/lib/cimi/service/base.rb
@@ -124,6 +124,9 @@ module CIMI::Service
       params = {}
       params[:desc] = "#{self.name.split("::").last} Collection for the #{ctx.driver.name.capitalize} driver"
       params[:add_url] = create_url(ctx)
+      if model_class == CIMI::Model::System
+        params[:system] = id
+      end
       model_class.list(id, entries, params).select_by(ctx.params['$select']).filter_by(ctx.params['$filter'])
     end
 

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/a749c43f/server/lib/deltacloud/helpers/rabbit_helper.rb
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/helpers/rabbit_helper.rb b/server/lib/deltacloud/helpers/rabbit_helper.rb
index b249dc6..cdd0ae1 100644
--- a/server/lib/deltacloud/helpers/rabbit_helper.rb
+++ b/server/lib/deltacloud/helpers/rabbit_helper.rb
@@ -81,6 +81,7 @@ module Sinatra::Rabbit
           path = operation.full_path
         end
         path.slice!(root_url) if path.start_with?(root_url)
+        path.chop! if path.end_with?("/")
         url(path)
       end unless respond_to?(helper_method_name)
     end, helper_method_name]


[3/7] git commit: CIMI: CIMI Systems - convert returned Model::System to Service::System & typo on SystemCreate

Posted by ma...@apache.org.
CIMI: CIMI Systems - convert returned Model::System to Service::System & typo on SystemCreate

(CIMI::Service::SystemCreate was not using resolved template)


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/84c7bbd8
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/84c7bbd8
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/84c7bbd8

Branch: refs/heads/master
Commit: 84c7bbd876ec2c2aef2c21e7fd6ca609d09ad883
Parents: ac2495e
Author: marios <ma...@redhat.com>
Authored: Mon Apr 22 19:29:44 2013 +0300
Committer: marios <ma...@redhat.com>
Committed: Mon Apr 22 19:29:44 2013 +0300

----------------------------------------------------------------------
 server/lib/cimi/service/system.rb        |    3 ++-
 server/lib/cimi/service/system_create.rb |    2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/84c7bbd8/server/lib/cimi/service/system.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/service/system.rb b/server/lib/cimi/service/system.rb
index 21a8dfe..550d452 100644
--- a/server/lib/cimi/service/system.rb
+++ b/server/lib/cimi/service/system.rb
@@ -17,10 +17,11 @@ class CIMI::Service::System < CIMI::Service::Base
   def self.find(id, context)
     if id == :all
       systems = context.driver.systems(context.credentials, {:env=>context})
+      systems.collect {|e| CIMI::Service::System.new(context, :model => e)}
     else
       systems = context.driver.systems(context.credentials, {:env=>context, :id=>id})
       raise CIMI::Model::NotFound unless systems.first
-      systems.first
+      CIMI::Service::System.new(context, :model=>systems.first)
     end
   end
 

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/84c7bbd8/server/lib/cimi/service/system_create.rb
----------------------------------------------------------------------
diff --git a/server/lib/cimi/service/system_create.rb b/server/lib/cimi/service/system_create.rb
index 5e58445..f2c9e77 100644
--- a/server/lib/cimi/service/system_create.rb
+++ b/server/lib/cimi/service/system_create.rb
@@ -23,7 +23,7 @@ class CIMI::Service::SystemCreate < CIMI::Service::Base
       # tries to override some aspect of the system template ?
     end
     params = {
-      :system_template => system_template,
+      :system_template => template,
       :name => name,
       :description => description,
       :env => context


[7/7] git commit: CIMI: CIMI (white box) Tests - fixes for start/stop/delete system (+machines)

Posted by ma...@apache.org.
CIMI: CIMI (white box) Tests - fixes for start/stop/delete system (+machines)

Adds rake task for pf2 (rake test:cimiplan_pf2) and skips if no systems


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/f6f2599d
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/f6f2599d
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/f6f2599d

Branch: refs/heads/master
Commit: f6f2599df312d51ae40ffe558b66739340b84765
Parents: a749c43
Author: marios <ma...@redhat.com>
Authored: Mon Apr 22 19:33:36 2013 +0300
Committer: marios <ma...@redhat.com>
Committed: Mon Apr 22 19:33:36 2013 +0300

----------------------------------------------------------------------
 .../mock/data/cimi/system_machine/sysmach1.json    |    8 --
 .../mock/data/cimi/system_volume/sysvol1.json      |    8 --
 tests/Rakefile                                     |    4 +
 tests/cimi/system1_test.rb                         |   65 +++++++++++----
 tests/cimi/test_helper.rb                          |   19 ++++
 5 files changed, 72 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/f6f2599d/server/lib/deltacloud/drivers/mock/data/cimi/system_machine/sysmach1.json
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/cimi/system_machine/sysmach1.json b/server/lib/deltacloud/drivers/mock/data/cimi/system_machine/sysmach1.json
deleted file mode 100644
index 8fe2a92..0000000
--- a/server/lib/deltacloud/drivers/mock/data/cimi/system_machine/sysmach1.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{ "id": "http://cimi.example.org/systems/system1/machines/inst0",
-  "name": "sysmach1",
-  "created": "Fri Feb 08 12:15:15 EET 2013",
-  "machine": { "href": "http://cimi.example.org/machines/inst0" },
-  "operations": [
-    { "rel": "delete", "href": "http://cimi.example.org/systems/system1/machines/inst0" }
-  ]
-}

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/f6f2599d/server/lib/deltacloud/drivers/mock/data/cimi/system_volume/sysvol1.json
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/mock/data/cimi/system_volume/sysvol1.json b/server/lib/deltacloud/drivers/mock/data/cimi/system_volume/sysvol1.json
deleted file mode 100644
index 12e3554..0000000
--- a/server/lib/deltacloud/drivers/mock/data/cimi/system_volume/sysvol1.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{ "id": "http://cimi.example.org/systems/system1/volumes/vol1",
-  "name": "sysvol1",
-  "created": "Fri Feb 08 12:15:15 EET 2013",
-  "volume": { "href": "http://cimi.example.org/volumes/vol1" },
-  "operations": [
-    { "rel": "delete", "href": "http://cimi.example.org/systems/system1/volumes/vol1" }
-  ]
-}

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/f6f2599d/tests/Rakefile
----------------------------------------------------------------------
diff --git a/tests/Rakefile b/tests/Rakefile
index 30f878d..1856c55 100644
--- a/tests/Rakefile
+++ b/tests/Rakefile
@@ -42,4 +42,8 @@ namespace :test do
     t.test_files = FileList["cimi/part*_test.rb", "cimi/cep_test.rb"]
   end
 
+  Rake::TestTask.new(:cimiplan_pf2) do |t|
+    t.test_files =FileList["cimi/system1_test.rb", "cimi/rmd*_test.rb", "cimi/machex*_test.rb"]
+  end
+
 end

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/f6f2599d/tests/cimi/system1_test.rb
----------------------------------------------------------------------
diff --git a/tests/cimi/system1_test.rb b/tests/cimi/system1_test.rb
index c9bd121..6102c37 100644
--- a/tests/cimi/system1_test.rb
+++ b/tests/cimi/system1_test.rb
@@ -23,6 +23,7 @@ class SystemTemplate < CIMI::Test::Spec
 
   ROOTS = [ "machines" , "systemTemplates" , "volumeTemplates"]
   need_capability('add', 'systems')
+  need_collection("systems")
 
   # Cleanup for resources created for the test
   MiniTest::Unit.after_tests {  teardown(@@created_resources, api.basic_auth) }
@@ -66,20 +67,24 @@ class SystemTemplate < CIMI::Test::Spec
   rescue RuntimeError =>e
   end
 
-  system_add_uri = discover_uri_for("add", "systems")
+  if collection_supported("systems")
+    system_add_uri = discover_uri_for("add", "systems")
   # 1.4 Create a new system from the systemTemplate
-  system_created = post(system_add_uri,
-    "<systemCreate xmlns=\"#{CIMI::Test::CIMI_NAMESPACE}\">" +
-    "<name>test_system</name>" +
-    "<systemTemplate href=\"" + get_a(cep_json, "systemTemplate") + "\"/>" +
-    "</systemCreate>", :content_type => :xml)
+    system_created = post(system_add_uri,
+      "<systemCreate xmlns=\"#{CIMI::Test::CIMI_NAMESPACE}\">" +
+      "<name>test_system</name>" +
+      "<systemTemplate href=\"" + get_a(cep_json, "systemTemplate") + "\"/>" +
+      "</systemCreate>", :content_type => :xml)
+  end
 
   model :systems do |fmt|
     get cep_json.json["systems"]["href"], :accept => fmt
   end
 
-  it "should add resource machine resource for cleanup", :only => :json do
-    @@created_resources[:machines] << system_created.headers[:location]
+  it "should add system resource for cleanup", :only => :json do
+    @@created_resources ||= {}
+    @@created_resources[:systems] ||= []
+    @@created_resources[:systems] << system_created.headers[:location]
   end
 
   it "should allow a system to be created" do
@@ -110,13 +115,14 @@ class SystemTemplate < CIMI::Test::Spec
   end
 
   # 1.7 Query the System SystemVolume collection
-  it "should contain a single entry referencing a Volume named as indicated in the SystemTemplate", :only => :json do
+  #OPTIONAL for this pf - commenting out for now (created system from template1.json[mock] has no volumes)
+#  it "should contain a single entry referencing a Volume named as indicated in the SystemTemplate", :only => :json do
     #test_system_created
-    test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
-    system_volumes = get(test_system_created.json["volumes"]["href"], :accept => :json)
-    system_volumes.json["count"].must_equal 1
-    #system_volumes.json["systemVolumes"][0]["id"].must_equal "volume from template"
-  end
+#    test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
+#    system_volumes = get(test_system_created.json["volumes"]["href"], :accept => :json)
+#    system_volumes.json["count"].must_equal 1
+#    #system_volumes.json["systemVolumes"][0]["id"].must_equal "volume from template"
+#  end
 
   # 1.8 Check that the volume is attached to machine(s)
   # Optional - skipping
@@ -135,15 +141,42 @@ class SystemTemplate < CIMI::Test::Spec
             "</Action>",
             :accept => :xml, :content_type => :xml)
       response.code.must_equal 202
-      poll_state(get(fetch(system_created.headers[:location]).id, :accept => :json), "STARTED")
+      poll_state(fetch(system_created.headers[:location]), "STARTED")
       get(fetch(system_created.headers[:location]).id, :accept => :json).json["state"].upcase.must_equal "STARTED"
     end
   end
 
   # 1.11 Check that the machines are started
+  it "should check that the system machines were started successfully", :only => :json do
+    test_system_created = fetch(system_created.headers[:location])
+    sys_mach_coll = fetch(test_system_created.machines.href)
+    sys_mach_coll.system_machines.each do |sys_mach|
+      fetch(sys_mach.machine.href).state.upcase.must_equal "STARTED"
+    end
+  end
 
   # 1.12 Stop the new System
+  it "should be able to stop the system", :only => :json  do
+    test_system_created = get(fetch(system_created.headers[:location]).id, :accept => :json)
+    unless test_system_created.json["state"].eql?("STOPPED")
+      uri = discover_uri_for("stop", "", test_system_created.json["operations"])
+      response = post( uri,
+            "<Action xmlns=\"http://schemas.dmtf.org/cimi/1\">" +
+              "<action> http://http://schemas.dmtf.org/cimi/1/action/stop</action>" +
+            "</Action>",
+            :accept => :xml, :content_type => :xml)
+      response.code.must_equal 202
+      poll_state(fetch(system_created.headers[:location]), "STOPPED")
+      get(fetch(system_created.headers[:location]).id, :accept => :json).json["state"].upcase.must_equal "STOPPED"
+    end
+  end
 
   # 1.13 Check that the machines are stopped
-
+  it "should check that the system machines were stopped successfully", :only => :json do
+    test_system_created = fetch(system_created.headers[:location])
+    sys_mach_coll = fetch(test_system_created.machines.href)
+    sys_mach_coll.system_machines.each do |sys_mach|
+      fetch(sys_mach.machine.href).state.upcase.must_equal "STOPPED"
+    end
+  end
 end

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/f6f2599d/tests/cimi/test_helper.rb
----------------------------------------------------------------------
diff --git a/tests/cimi/test_helper.rb b/tests/cimi/test_helper.rb
index aa614d6..c4bedac 100644
--- a/tests/cimi/test_helper.rb
+++ b/tests/cimi/test_helper.rb
@@ -286,6 +286,12 @@ module CIMI::Test::Methods
       end
     end
 
+    #convenience method for checking if collection :foo is supported:
+    def collection_supported(name)
+      api.collections.include?(name.to_sym)
+    end
+
+
     def need_capability(op, collection)
       before :each do
         begin
@@ -330,6 +336,19 @@ module CIMI::Test::Methods
     def teardown(created_resources, api_basic_auth)
       @@created_resources = created_resources
       puts "CLEANING UP... resources for deletion: #{@@created_resources.inspect}"
+      #systems:
+      if @@created_resources[:systems]
+        @@created_resources[:systems].each do |sys_id|
+          sys = get(sys_id, :accept=>:json)
+          delete_op = sys.json["operations"].find { |op| op["rel"] =~ /delete$/ }
+          if delete_op
+              delete_res = RestClient.delete( delete_op["href"],
+                  {'Authorization' => api_basic_auth, :accept => :json} )
+              @@created_resources[:systems].delete(sys_id)  if (200..207).include? delete_res.code
+              @@created_resources.delete(:systems) if @@created_resources[:systems].empty?
+          end
+        end
+      end
 
       # machines:
       if not @@created_resources[:machines].nil?