You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by ma...@redhat.com on 2011/11/16 18:28:01 UTC

[PATCH] CIMI MachineAdmin model and spec

From: marios <ma...@redhat.com>


Signed-off-by: marios <ma...@redhat.com>
---
 server/lib/cimi/model.rb                     |    1 +
 server/lib/cimi/model/machine_admin.rb       |   26 +++++++
 server/spec/cimi/data/machine_admin.json     |   14 ++++
 server/spec/cimi/data/machine_admin.xml      |   10 +++
 server/spec/cimi/model/machine_admin_spec.rb |   99 ++++++++++++++++++++++++++
 5 files changed, 150 insertions(+), 0 deletions(-)
 create mode 100644 server/lib/cimi/model/machine_admin.rb
 create mode 100644 server/spec/cimi/data/machine_admin.json
 create mode 100644 server/spec/cimi/data/machine_admin.xml
 create mode 100644 server/spec/cimi/model/machine_admin_spec.rb

diff --git a/server/lib/cimi/model.rb b/server/lib/cimi/model.rb
index 1e4a34a..cfcff72 100644
--- a/server/lib/cimi/model.rb
+++ b/server/lib/cimi/model.rb
@@ -25,3 +25,4 @@ require 'cimi/model/base'
 require 'cimi/model/machine_template'
 require 'cimi/model/machine_image'
 require 'cimi/model/machine_configuration'
+require 'cimi/model/machine_admin'
diff --git a/server/lib/cimi/model/machine_admin.rb b/server/lib/cimi/model/machine_admin.rb
new file mode 100644
index 0000000..d175bbb
--- /dev/null
+++ b/server/lib/cimi/model/machine_admin.rb
@@ -0,0 +1,26 @@
+# 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.
+
+class CIMI::Model::MachineAdmin < CIMI::Model::Base
+
+  scalar :username
+  scalar :password
+  text :key
+
+  array :operations do
+    scalar :rel, :href
+  end
+
+end
diff --git a/server/spec/cimi/data/machine_admin.json b/server/spec/cimi/data/machine_admin.json
new file mode 100644
index 0000000..d6d2622
--- /dev/null
+++ b/server/spec/cimi/data/machine_admin.json
@@ -0,0 +1,14 @@
+{
+  "uri": "http://cimi.example.org/machine_admin/1",
+  "name": "credentials1",
+  "description": "Machine Admin One",
+  "created": "2011-11-16",
+  "username": "mockuser",
+  "password": "mockpassword",
+  "operations": [
+  { "rel": "edit",
+    "href": "http://cimi.example.org/machine_admin/1/edit" },
+  { "rel": "delete",
+    "href": "http://cimi.example.org/machine_admin/1/delete" }
+  ]
+}
diff --git a/server/spec/cimi/data/machine_admin.xml b/server/spec/cimi/data/machine_admin.xml
new file mode 100644
index 0000000..a3cfd35
--- /dev/null
+++ b/server/spec/cimi/data/machine_admin.xml
@@ -0,0 +1,10 @@
+<MachineAdmin xmlns="http://www.dmtf.org/cimi">
+  <uri>http://cimi.example.org/machine_admin/1</uri>
+  <name>credentials1</name>
+  <description>Machine Admin One</description>
+  <created>2011-11-16</created>
+  <username>mockuser</username>
+  <password>mockpassword</password>
+  <operation rel="edit" href="http://cimi.example.org/machine_admin/1/edit"/>
+  <operation rel="delete" href="http://cimi.example.org/machine_admin/1/delete"/>
+</MachineAdmin>
diff --git a/server/spec/cimi/model/machine_admin_spec.rb b/server/spec/cimi/model/machine_admin_spec.rb
new file mode 100644
index 0000000..a8763a0
--- /dev/null
+++ b/server/spec/cimi/model/machine_admin_spec.rb
@@ -0,0 +1,99 @@
+# 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.
+#
+
+describe "MachineAdmin model" do
+
+  before(:all) do
+    @xml = IO::read(File::join(DATA_DIR, "machine_admin.xml"))
+    @json = IO::read(File::join(DATA_DIR, "machine_admin.json"))
+  end
+
+  describe "XML" do
+    it "can be constructed" do
+      admin = CIMI::Model::MachineAdmin.from_xml(@xml)
+      admin.should_not be_nil
+      admin.should serialize_to @xml, :fmt => :xml
+    end
+
+    it "should have default properties" do
+      admin = CIMI::Model::MachineAdmin.from_xml(@xml)
+      admin.uri.should == "http://cimi.example.org/machine_admin/1"
+      admin.name.should == "credentials1"
+      admin.description.should == "Machine Admin One"
+      admin.created.should == "2011-11-16"
+    end
+
+    it "should have username and password properties" do
+      admin = CIMI::Model::MachineAdmin.from_xml(@xml)
+      admin.username.should_not be_nil
+      admin.username.first["content"].should == "mockuser"
+      admin.password.should_not be_nil
+      admin.password.first["content"].should == "mockpassword"
+    end
+
+    it "should have edit and delete operations" do
+      admin = CIMI::Model::MachineAdmin.from_xml(@xml)
+      admin.operations.any? { |operation| operation.rel == 'edit' }.should be_true
+      admin.operations.any? { |operation| operation.rel == 'delete' }.should be_true
+      admin.operations.each { |operation| operation.href.should =~ /^http:\/\/.*\/(#{operation.rel})$/ }
+    end
+
+    it "should convert strings in keys to symbols when contructed from XML" do
+      admin = CIMI::Model::MachineAdmin.from_xml(@xml)
+      admin.should_not be_nil
+      admin.attribute_values.keys.each { |key| key.should be_a_kind_of(Symbol) }
+    end
+  end
+
+  describe 'JSON' do
+    it "can be constructed" do
+      admin = CIMI::Model::MachineAdmin.from_json(@json)
+      admin.should_not be_nil
+      admin.should serialize_to @json, :fmt => :json
+    end
+
+    it "should have default properties" do
+      admin = CIMI::Model::MachineAdmin.from_json(@json)
+      admin.uri.should == "http://cimi.example.org/machine_admin/1"
+      admin.name.should == "credentials1"
+      admin.description.should == "Machine Admin One"
+      admin.created.should == "2011-11-16"
+    end
+
+    it "should have username and password properties" do
+      admin = CIMI::Model::MachineAdmin.from_json(@json)
+      admin.username.should_not be_nil
+      admin.username.should == "mockuser"
+      admin.password.should_not be_nil
+      admin.password.should == "mockpassword"
+    end
+
+    it "should have edit and delete operations" do
+      admin = CIMI::Model::MachineAdmin.from_json(@json)
+      admin.operations.any? { |operation| operation.rel == 'edit' }.should be_true
+      admin.operations.any? { |operation| operation.rel == 'delete' }.should be_true
+      admin.operations.each { |operation| operation.href.should =~ /^http:\/\/.*\/(#{operation.rel})$/ }
+    end
+
+
+    it "should convert strings in keys to symbols when contructed from JSON" do
+      admin = CIMI::Model::MachineAdmin.from_json(@json)
+      admin.should_not be_nil
+      admin.attribute_values.keys.each { |key| key.should be_a_kind_of(Symbol) }
+    end
+  end
+
+end
-- 
1.7.6.4