From: Ronelle Landy <[email protected]>

---
 tests/cimi/plan/sc2html.xsl |  482 ++++++++++++++++++++++++++++
 tests/cimi/plan/scRMD.xml   |  739 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 1221 insertions(+), 0 deletions(-)
 create mode 100644 tests/cimi/plan/sc2html.xsl
 create mode 100644 tests/cimi/plan/scRMD.xml

diff --git a/tests/cimi/plan/sc2html.xsl b/tests/cimi/plan/sc2html.xsl
new file mode 100644
index 0000000..93f2733
--- /dev/null
+++ b/tests/cimi/plan/sc2html.xsl
@@ -0,0 +1,482 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<xsl:stylesheet version="1.0" exclude-result-prefixes="h w"
+  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
+  xmlns:h="http://www.w3.org/1999/xhtml";
+  xmlns:w="http://www.wstf.org";>
+
+  <xsl:strip-space elements="*" />
+  <xsl:variable name="prereqName">Dependencies</xsl:variable>
+
+  <!--
+
+  Elements:
+
+  scenario        - outer most element
+  metadata        - contains info about the scenario
+   number         - sc00x
+   title          -
+   date           -
+   status         -
+
+  abstract        - summary of scenario
+  section         - sections are listed in the TOC
+  subsection      - indented sub-section - it is numbered 1.2
+  subheading      - non-indented sub-section - it is not numbered
+
+  scope           -
+   technology     -
+
+  timeline        -
+   item           -
+
+  namespaces      -
+   namespace      -
+
+  terms           -
+   term           -
+
+  operation       -
+   action         -
+   headers        -
+   body           -
+
+  exemplar        -
+  xml             -
+  populate        -
+
+  note            -
+  item            -
+  num             -
+  toggle          - adds a toggle section
+
+  part            -
+   group          -
+    tests         -
+     test         -
+      desc        -
+      description -
+      succ        -
+      success     -
+
+  changes         -
+   change         -
+
+  -->
+
+  <xsl:output method="html" encoding="utf-8" indent="yes"
+    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
+    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";
+    media-type="text/html" omit-xml-declaration="no" />
+
+  <xsl:template match="w:scenario">
+   <html>
+    <head>
+      <title>
+       <xsl:value-of select="w:metadata/w:number"/> -
+       <xsl:value-of select="w:metadata/w:title"/>
+      </title>
+       <xsl:if test="not(//w:metadata/w:nowstf)">
+        <link rel="SHORTCUT ICON"
+              href="http://www.wstf.org/images/wstf-ico.gif";
+             type="image/x-icon" />
+       </xsl:if>
+      <link href="http://www.wstf.org/docs/web/scen-v1.css"; type="text/css"
+            rel="stylesheet"/>
+      <script type="text/javascript"
+              src="http://www.wstf.org/docs/web/scen-v1.js"/>
+    </head>
+    <body>
+     <!-- ========== Title Bar Info ========== -->
+     <xsl:if test="not(//w:metadata/w:nowstf)">
+      <img style="position:absolute;top:9px;left:9px;background-color:#d3d3d3"
+           onclick="window.location='http://www.wstf.org'"
+           src="http://www.wstf.org/images/wstf-small.gif"/>
+     </xsl:if>
+     <h1 style="padding-left:43px;padding-right:43px"> <!-- padding to avoid 
icon -->
+       <xsl:value-of select="w:metadata/w:number"/> -
+       <xsl:value-of select="w:metadata/w:title"/>
+     </h1>
+     <p class="date">Produced
+      <xsl:if test="not(//w:metadata/w:nowstf)">
+       by WSTF
+      </xsl:if>
+      : <xsl:value-of select="w:metadata/w:date"/>
+     </p>
+     <p class="status">Status:
+      <xsl:value-of select="w:metadata/w:status"/>
+     </p>
+
+     <xsl:apply-templates select="w:abstract"/>
+     <xsl:apply-templates select="w:timeline"/>
+
+     <!-- ========== TOC ========== -->
+     <xsl:if test="not(contains(//w:metadata/w:status,'Preview'))">
+      <h2>Table of Contents</h2>
+      <p>
+       <ol>
+        <xsl:for-each select="w:section">
+         <li><a href="#sec{position()}"><xsl:value-of 
select="@title"/></a></li>
+        </xsl:for-each>
+       </ol>
+      </p>
+     </xsl:if>
+
+     <!-- ========== Now process each section ========== -->
+     <xsl:apply-templates select="w:section"/>
+
+     <!-- ========== Add in some javascript ========== -->
+     <xsl:for-each select="//w:populate">
+       <script> populateFromURL( "<xsl:value-of select="generate-id(.)"/>", 
"<xsl:value-of select="@url"/>" ); </script>
+     </xsl:for-each>
+
+    </body>
+   </html>
+  </xsl:template>
+
+  <xsl:template match="w:abstract">
+   <h2>Abstract</h2>
+   <p>
+    <xsl:apply-templates/>
+   </p>
+  </xsl:template>
+
+  <xsl:template match="w:timeline">
+   <p>
+    <b>
+     <xsl:choose>
+      <xsl:when test="@title"><xsl:value-of select="@title"/></xsl:when>
+      <xsl:otherwise>Timeline</xsl:otherwise>
+     </xsl:choose>
+    </b>
+    <br/>
+    <table class="mono" cellpadding="2" cellspacing="0">
+     <thead>
+      <tr>
+       <td>Start</td>
+       <td>End</td>
+       <td>Activity</td>
+      </tr>
+     </thead>
+     <tbody>
+      <xsl:for-each select="w:item">
+       <tr>
+        <td><xsl:value-of select="@start"/></td>
+        <td><xsl:value-of select="@end"/></td>
+        <td><xsl:value-of select="@action"/></td>
+       </tr>
+      </xsl:for-each>
+     </tbody>
+    </table>
+   </p>
+  </xsl:template>
+
+  <xsl:template match="w:terms">
+   <h4>Definitions</h4>
+   The following terms will be used throughout this scenario to refer
+   to the various factors that make up the individual tests.
+   <table class="" cellpadding="2" cellspacing="0">
+    <thead>
+     <tr>
+      <td>Term</td>
+      <td>Definition</td>
+     </tr>
+    </thead>
+    <tbody>
+     <xsl:for-each select="w:term">
+      <tr>
+       <td><xsl:value-of select="@term"/></td>
+       <td><xsl:apply-templates/></td>
+      </tr>
+     </xsl:for-each>
+    </tbody>
+   </table>
+  </xsl:template>
+
+  <xsl:template match="w:scope">
+   <h4>Scope</h4>
+   Specifications, standards and technologies being tested:
+   <ul>
+    <xsl:for-each select="w:technology">
+     <li><a href="{@url}"><xsl:value-of select="@name"/></a></li>
+    </xsl:for-each>
+   </ul>
+  </xsl:template>
+
+  <xsl:template match="w:namespaces">
+   <h4>Namespaces</h4>
+   The following table defines the namespaces used in this document:
+   <table class="mono" cellpadding="2" cellspacing="0">
+    <thead>
+     <tr>
+      <td>Prefix</td>
+      <td>Namespace</td>
+      <td>Specification/Document</td>
+     </tr>
+    </thead>
+    <tbody>
+     <xsl:for-each select="w:namespace">
+      <tr>
+       <td><xsl:value-of select="@prefix"/></td>
+       <td><xsl:value-of select="@ns"/></td>
+       <td><a href="{@ns}"><xsl:value-of select="@name"/></a></td>
+      </tr>
+     </xsl:for-each>
+    </tbody>
+   </table>
+  </xsl:template>
+
+  <!-- ========== New Section ========== -->
+  <xsl:template match="w:section">
+   <h2>
+    <a name="sec{position()}">
+     <xsl:if test="not(contains(//w:metadata/w:status,'Preview'))">
+       <xsl:number format="1. "/>
+     </xsl:if>
+     <xsl:value-of select="@title"/>
+    </a>
+   </h2>
+   <p>
+    <xsl:apply-templates/>
+   </p>
+  </xsl:template>
+
+  <xsl:template match="w:subheading">
+   <h4><xsl:value-of select="@title"/></h4>
+   <xsl:apply-templates/>
+  </xsl:template>
+
+  <xsl:template match="w:subsection">
+   <div style="margin-left:10px;margin-bottom:5px">
+    <h3>
+     <xsl:number format="1.1. " level="multiple" 
count="w:section|w:subsection"/><xsl:value-of select="@title"/>
+    </h3>
+    <xsl:apply-templates/>
+   </div>
+  </xsl:template>
+
+  <xsl:template match="w:operation">
+   <h4 style="margin-top:5px"><u><xsl:value-of select="@name"/></u></h4>
+   <div style="margin:0;margin-left:0px">
+    <xsl:apply-templates/>
+   </div>
+  </xsl:template>
+
+  <!-- ===== Bullet item w/o indent ===== -->
+  <xsl:template match="w:note">
+   <ul style="margin-top:0;margin-bottom:0;padding-left:0em;margin-left:1em">
+    <li><xsl:apply-templates/></li>
+   </ul>
+  </xsl:template>
+
+  <!-- ===== Bullet item w/indent ===== -->
+  <xsl:template match="w:item">
+   <ul style="margin-top:0;margin-bottom:0">
+    <li><xsl:apply-templates/></li>
+   </ul>
+  </xsl:template>
+
+  <xsl:template match="w:num">
+   <xsl:variable name="nn" select="@group"/>
+   <xsl:if test="@group">
+    <xsl:variable name="num" 
select="1+count(preceding-sibling::w:num[@group=$nn])"/>
+    <ol start='{$num}' style="margin-top:0px;margin-bottom:0px">
+     <li><xsl:apply-templates/></li>
+    </ol>
+   </xsl:if>
+   <xsl:if test="not(@group)">
+    <xsl:variable name="num" 
select="1+count(preceding-sibling::w:num[not(@group)])"/>
+    <ol start='{$num}' style="margin-top:0px;margin-bottom:0px">
+     <li><xsl:apply-templates/></li>
+    </ol>
+   </xsl:if>
+  </xsl:template>
+
+  <!-- ===== Toggle/Popup ===== -->
+  <xsl:template match="w:toggle">
+   <xsl:variable name="num" select="1+count(preceding::w:toggle)"/>
+   <xsl:variable name="style" select="@style"/>
+   <a href="javascript:toggle('togDiv{$num}')"><xsl:value-of 
select="@title"/></a>
+   <div id="togDiv{$num}" onclick="javascript:toggle('togDiv{$num}')" 
style="display:block;visibility:hidden;height:0;{$style}">
+     <xsl:apply-templates/>
+   </div>
+  </xsl:template>
+
+  <xsl:template match="w:popup">
+   <xsl:variable name="num" select="1+count(preceding::w:popup)"/>
+   <xsl:variable name="style" select="@style"/>
+   <a href="javascript:toggle('togDiv{$num}')"><xsl:value-of 
select="@title"/></a>
+   <div id="togDiv{$num}" style="border:2px ridge 
black;padding:2px;background-color:white;position:absolute;right:10px;display:block;visibility:hidden;height:0;{$style}">
+     <span style="background-color:white;border-top:2px ridge 
black;border-left:2px ridge black;border-right:2px ridge 
black;position:absolute;right:-2px;padding-left:1px;padding-right:1px;cursor:pointer;top:-18px"
 onclick="javascript:toggle('togDiv{$num}')"><b>CLOSE</b></span>
+     <xsl:apply-templates/>
+   </div>
+  </xsl:template>
+
+
+  <!-- ===== Snippet of XML ===== -->
+  <xsl:template match="w:xml">
+   <xsl:if test="@title">
+    <p style="margin:0"><tt><b><xsl:value-of select="@title"/>:</b></tt></p>
+   </xsl:if>
+   <pre class="ex" style="margin-bottom:0"><xsl:apply-templates/></pre>
+  </xsl:template>
+
+  <!-- ===== Pseudo code - soap message ===== -->
+  <xsl:template match="w:exemplar">
+   <xsl:if test="@type!=''">
+    <br/><tt><b><xsl:value-of select="@type"/>:</b></tt>
+   </xsl:if>
+   <pre class="ex" style="margin-bottom:0">
+    <p style="margin:0"><b>[Action]</b></p>
+    <xsl:if test="w:action">
+      <xsl:value-of select="w:action"/>
+    </xsl:if>
+
+    <p style="margin:0;padding-top:10px"><b>[Headers]</b></p>
+    <xsl:if test="w:headers">
+      <xsl:value-of select="w:headers"/>
+    </xsl:if>
+
+    <p style="margin:0;padding-top:10px"><b>[Body]</b></p>
+    <xsl:value-of select="w:body"/>
+   </pre>
+  </xsl:template>
+
+  <!-- Tests are grouped into 'parts'. Each part is a new # -->
+  <xsl:template match="w:part">
+   <p><b>Part <xsl:number level="single" count="w:part"/> -
+         <xsl:value-of select="@title"/></b><p/>
+    <xsl:apply-templates/>
+   </p>
+  </xsl:template>
+
+  <!-- Within a part we can group tests -->
+  <xsl:template match="w:group">
+   <p><b><xsl:value-of select="@title"/></b><br/>
+    <xsl:apply-templates/>
+   </p>
+  </xsl:template>
+
+  <!-- ===== Tests are shown in table format ===== -->
+  <xsl:template match="w:tests">
+   <table class="mono" cellpadding="2" cellspacing="0">
+    <thead>
+     <tr>
+      <td width="4%">Number</td>
+      <td width="48%">Description</td>
+      <td width="48%">Success Criteria</td>
+     </tr>
+    </thead>
+    <tbody>
+     <xsl:apply-templates/>
+    </tbody>
+   </table>
+  </xsl:template>
+
+  <xsl:template match="w:tests/w:test">
+   <tr>
+    <td>
+     <xsl:choose>
+      <xsl:when test="@num"><xsl:value-of select="@num"/></xsl:when>
+      <xsl:otherwise>
+       <xsl:choose>
+        <xsl:when test="ancestor::w:part">
+         <xsl:number level="single" count="w:part"/>
+         <xsl:text>.</xsl:text>
+         <xsl:number level="any" from="w:part" count="w:test"/>
+        </xsl:when>
+        <xsl:when test="not(ancestor::w:part)">
+         <xsl:number level="single" count="w:test"/>
+        </xsl:when>
+       </xsl:choose>
+      </xsl:otherwise>
+     </xsl:choose>
+    </td>
+    <td>
+     <xsl:if test="@name">
+      <b><xsl:value-of select="@name"/></b><br/>
+     </xsl:if>
+     <xsl:apply-templates select="w:description|w:desc"/>
+    </td>
+    <td>
+     <xsl:apply-templates select="w:success|w:succ"/>
+    </td>
+   </tr>
+  </xsl:template>
+
+  <xsl:template match="w:part/w:test">
+   <div style="margin-left:10px">
+   <b>
+    <xsl:choose>
+     <xsl:when test="@num"><xsl:value-of select="@num"/></xsl:when>
+     <xsl:otherwise>
+      <xsl:choose>
+       <xsl:when test="ancestor::w:part">
+        <xsl:number level="single" count="w:part"/>
+        <xsl:text>.</xsl:text>
+        <xsl:number level="any" from="w:part" count="w:test"/>
+       </xsl:when>
+       <xsl:when test="not(ancestor::w:part)">
+        <xsl:number level="single" count="w:test"/>
+       </xsl:when>
+      </xsl:choose>
+     </xsl:otherwise>
+    </xsl:choose>
+   - <xsl:value-of select="@name"/></b><br/>
+   <pre style="margin-top:0px;margin-bottom:0px"><xsl:apply-templates/></pre>
+   </div>
+  </xsl:template>
+
+  <!-- ========== Dynamically load XML files ========== -->
+  <xsl:template match="w:populate">
+   <div id="{generate-id(.)}"/>
+  </xsl:template>
+
+  <!-- ========== Change History Section ========== -->
+  <xsl:template match="w:changes">
+   <table class="mono" cellpadding="2" cellspacing="0">
+    <thead>
+     <tr>
+      <td>Date</td>
+      <td>Who</td>
+      <td>Change</td>
+     </tr>
+    </thead>
+    <tbody>
+     <xsl:for-each select="w:change">
+      <tr>
+       <td nowrap="1"><xsl:value-of select="@date"/></td>
+       <td nowrap="1"><xsl:value-of select="@who"/></td>
+       <td><xsl:apply-templates/></td>
+      </tr>
+     </xsl:for-each>
+    </tbody>
+   </table>
+  </xsl:template>
+
+  <!-- ========== Some Util Templates ========== -->
+
+  <!-- === Just blindly copy all unknown elements/attributes === -->
+  <xsl:template match="w:*" name="copy">
+    <xsl:element name="{local-name(.)}">
+     <xsl:for-each select="@*">
+       <xsl:copy/>
+     </xsl:for-each>
+     <xsl:apply-templates/>
+    </xsl:element>
+  </xsl:template>
+
+  <!--
+  <xsl:template match="@*|node()" name="copy">
+   <xsl:copy>
+    <xsl:apply-templates select="@*|node()"/>
+   </xsl:copy>
+  </xsl:template>
+  -->
+
+  <xsl:template name="echoXML">
+   <xsl:text>&lt;</xsl:text>
+    <xsl:value-of select="name(.)"/>
+   <xsl:text>&gt;</xsl:text>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/tests/cimi/plan/scRMD.xml b/tests/cimi/plan/scRMD.xml
new file mode 100644
index 0000000..c8a74e7
--- /dev/null
+++ b/tests/cimi/plan/scRMD.xml
@@ -0,0 +1,739 @@
+<?xml version="1.0" encoding="utf-8"?>
+<?xml-stylesheet type="text/xsl" href="file:sc2html.xsl" title="scenario"?>
+<scenario xmlns="http://www.wstf.org";>
+
+ <metadata>
+  <number>Entity Metadata</number>
+  <title>Capabilities</title>
+  <date>2013/01/03</date>
+  <status>Draft</status>
+  <nowstf/>
+ </metadata>
+
+ <abstract>
+  These scenarios will test the Resource Metadata Capabilties as defined in 
the CIMI specification. Relevant spec quotes:
+
+  <item>
+   ???Implementations of this specification SHOULD allow for
+Consumers to discover the metadata associated with each supported
+entity. Doing so allows for the discovery of Provider defined
+constraints on the CIMI defined attributes as well as discovery of
+any new extension attributes or operations that the Provider may have
+defined. EntityMetadata can also be used to express any Provider
+specific capabilities or features. The mechanism by which this
+metadata is made available will be protocol specific.???
+  </item>
+  <item> ??? A set of Provider defined metadata that can be used by
+Consumer to discover any capability or feature provided by this
+Provider.???
+  </item>
+ <p/>
+ </abstract>
+
+ <section title="Dependencies">
+  <scope>
+   <technology name="CIMI" 
url="http://dmtf.org/sites/default/files/standards/documents/DSP0263_1.0.0.pdf"/>
+  </scope>
+
+  <namespaces>
+   <namespace prefix="cimi" ns="http://schemas.dmtf.org/cimi/1"; name="CIMI"/>
+   <namespace prefix="xs" ns="http://www.w3.org/2001/XMLSchema";
+                           name="XML Schema"/>
+   <namespace prefix="scRMD" ns="http://www.wstf.org/docs/scenarios/scRMD";
+                           name="SCRMD (this scenario)"/>
+  </namespaces>
+ </section>
+
+ <section title="Testcases">
+  The testcases are ordered by:
+       <item>Resource Metadata Collection</item>
+       <item>Resource Metadata Entry within the collection</item>
+       <item>Capabilty/Attribute/Action associated with the Resource Metadata 
Entry</item>
+
+  <part title="Resource Metadata Collection">
+   <note> Test for the Resource Metadata collection. This test should only
+       be run once ??? not with every capability, attribute or action
+       tested. </note>
+  <tests>
+    <test name="Query the CEP">
+
+      <desc>
+       Consumer queries the CEP to determine the URLs
+       of the ResourceMetadata collection
+      </desc>
+
+      <succ>A serialization of a CEP is
+       returned. This test must adhere to the "Query the CEP"
+       test detailed in:
+       
members.dmtf.org/apps/org/workgroup/vcmf/download.php/68964/cimiTest.html
+
+        <note> CEP.ReourceMetadata must be set </note>
+       <p/>
+
+      <popup title="Sample">
+      <xml>GET /CEP HTTP/1.1</xml>
+       <p/>
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+
+{ "resourceURI": "http://schemas.dmtf.org/cimi/1/CloudEntryPoint";,
+  "id": "http://example.com/CEP";,
+  "baseURI": "http://example.com/";,
+  "resourceMetadata": { "href": "http://example.com/resourceMetadata"; },
+  "machines": { "href": "http://example.com/machines"; }
+}</xml>
+      </popup>
+
+     </succ>
+    </test>
+
+    <test name="Query the resource_metadata collection">
+     <desc>GET request is sent
+       to resource_metadata collection to query the metadata (attributes,
+       capabilities, actions) supported by the Cloud Provider. The
+       response can be returned in either format, XML or JSON.
+     </desc>
+
+     <succ>A representation of the resource_metadata collection is
+       returned ??? using either JSON or XML serialization.
+
+      <note> HTTP response code must be "200 OK" </note>
+      <note> Content-Type header must be either "application/json"
+       or "application/xml" </note>
+      <note> id must be set to the URL of the resource metadata
+       collection</note>
+      <note> resourceURI must be set to point to
+       ResourceMetadataCollection</note>
+      <note> count must match value the number of ResourceMetadata
+       elements returned</note>
+      <note> ResourceMetadata elements must be listed (if they exist
+       for the provider)</note>
+      <note> For each collection appearing in the
+        CEP there should be a ResourceMetadata entry with the corresponding 
typeURI in the
+        ResourceMetadata collection </note>
+      <note> Capabilities, attributes and actions available on the
+       provider must be listed. The entries are returned within
+       ResourceMetadata elements related to the collections they are
+       associated with</note>
+
+    <p/>
+
+      <popup title="Sample">
+       <xml>GET /CEP HTTP/1.1
+Accept: application/json</xml>
+       <p/>
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+
+{"count": 1,
+  "resourceURI": "http://schemas.dmtf.org/cimi/1/ResourceMetadataCollection";,
+  "resourceMetadata":
+    [{"capabilities":
+      
[{"uri":"http://schemas.dmtf.org/cimi/1/capability/Collection/Capability1";, 
"description":"Description of Capability 1", "name":"Capability1", 
"value":"valueOfCapability1"},
+      
{"uri":"http://schemas.dmtf.org/cimi/1/capability/Collection/Capability2";, 
"description":"Description of Capability 2", "name":"Capability2", 
"value":"valueOfCapability2A, valueOfCapability2B"}],
+    "typeUri": "http://schemas.dmtf.org/cimi/1/Collection";,
+    "name": "Collection",
+    "id": "http://example.com/cimi/resource_metadata/collection"}],
+  "id":"http://example.com/cimi/resource_metadata";
+}
+       </xml>
+      </popup>
+
+     </succ>
+    </test>
+
+   </tests>
+  </part>
+
+<part title="Machines Resource Metadata">
+   <note>
+    This test only applies if CEP.machines is present.
+   </note>
+  <tests>
+    <test name="Query the resource_metadata collection">
+     <desc> GET request is sent to resource_metadata collection to query the 
metadata associated
+       with the 'Machine' entry
+     </desc>
+
+     <succ>A representation of the resource_metadata collection is
+      returned ??? using either JSON or XML serialization.
+
+       <note> HTTP response code must be "200 OK" </note>
+       <note>ResourceMetadata.id must be set </note>
+       <note> ResourceMetadata.name must be set to Machine </note>
+       <note> ResourceMetadata.typeUri must be set </note>
+       <note> Capabilities, attributes and actions available on the
+       provider that are associated with the Machine collection must be
+       listed </note>
+
+      <p/>
+
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+"count": 1,
+"resourceURI": "http://schemas.dmtf.org/cimi/1/ResourceMetadataCollection";,
+"resourceMetadata":
+  [{"capabilities":
+    [{"uri":"http://schemas.dmtf.org/cimi/1/capability/Machine/Capability1";, 
"description":"Decsription of Capability 1", "name":"Capability1", 
"value":"valueOfCapability1"},
+    {"uri":"http://schemas.dmtf.org/cimi/1/capability/Machine/capability2";, 
"description":"Description of Capability 2", "name":"Capability2", 
"value":"valueOfCapability2A, valueOfCapability2B"}],
+  "typeUri":"http://schemas.dmtf.org/cimi/1/Machine";,
+  "name":"Machine",
+  "id":"http://example.com/cimi/resource_metadata/machine"}],
+"id":"http://example.com/cimi/resource_metadata";
+}
+      </xml>
+     </popup>
+     </succ>
+    </test>
+
+    <test name="Query the ResourceMetadata entry">
+     <desc> Issue a specific GET
+       request to return the capabilities, attributes and actions
+       associated with the Machine ResourceMetadata entry only
+     </desc>
+
+     <succ>
+     <note> HTTP response code must be "200 OK". </note>
+     <note> Each capability, attribute and action advertised must contain:
+       <note> name </note>
+       <note> uri (unique)</note>
+       <note> description </note>
+       <note> value </note>
+     </note>
+      <p/>
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+"capabilities":
+  [{"uri": "http://schemas.dmtf.org/cimi/1/capability/Machine/Capability1";,
+  "description": "Description of Capability 1",
+  "name": "Capability1",
+  "value": "valueOfCapability1"},
+  {"uri": "http://schemas.dmtf.org/cimi/1/capability/Machine/Capability2";,
+  "description": "Description of Capability 2",
+  "name": "Capability2",
+  "value": "valueOfCapability2A, valueOfCapability2B"}],
+"typeUri": "http://schemas.dmtf.org/cimi/1/Machine";,
+"name": "Machine",
+"resourceURI": "http://schemas.dmtf.org/cimi/1/ResourceMetadata";,
+"id": "http://example.com/cimi/resource_metadata/machine";
+}
+      </xml>
+      </popup>
+     </succ>
+    </test>
+
+   </tests>
+
+  </part>
+
+<part title="Default Initial State ??? Machine Capability">
+  <tests>
+    <test name="Query the ResourceMetadata entry">
+     <desc>
+       Consumer queries Machine
+       ResourceMetadata to find the DefaultInitialState capability
+     </desc>
+
+     <succ>
+       A serialization of the resource_metadata collection is returned
+       ??? using either JSON or XML serialization.  This test must adhere
+       to one of the "Query the ResourceMetadata entry" tests in
+       the previous section.
+
+       <note> The  DefaultInitialState capability must be returned </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/xml
+
+&lt;ResourceMetadata xmlns="http://schemas.dmtf.org/cimi/1"; 
resourceURI="http://schemas.dmtf.org/cimi/1/ResourceMetadata";>
+&lt;id>http://example.com/cimi/resource_metadata/machine&lt;/id>
+&lt;name>Machine&lt;/name>
+&lt;typeUri>http://schemas.dmtf.org/cimi/1/Machine&lt;/typeUri>
+&lt;capability name="DefaultInitialState" 
uri="http://schemas.dmtf.org/cimi/1/capability/Machine/DefaultInitialState"; 
description="Indicates what the default initial state of a new 
Machine">STARTED&lt;/capability>
+&lt;/ResourceMetadata>
+     </xml>
+      </popup>
+     </succ>
+    </test>
+
+
+    <test name="Inspect the capability">
+     <desc> Use the GET request from above to
+       return the all information available about the capability.
+     </desc>
+
+     <succ>The capability advertised must contain:
+      <note> name </note>
+      <note> uri (unique)</note>
+      <note> description </note>
+      <note> a single value </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+"capabilities":
+  [{"name": "DefaultInitialState",
+  "value": "STARTED",
+  "description": "Indicates what the default initial state of a new Machine",
+  "uri": 
"http://schemas.dmtf.org/cimi/1/capability/Machine/DefaultInitialState"}],
+"typeUri": "http://schemas.dmtf.org/cimi/1/Machine";,
+"name": "Machine",
+"resourceURI": "http://schemas.dmtf.org/cimi/1/ResourceMetadata";,
+"id": "http://example.com/cimi/resource_metadata/machine";
+}
+    </xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Put collection member in state to verify capability">
+     <desc>
+       Create a
+       new machine using either a single machineTemplate or a
+       machineImage and a machineConfig ??? without specifying a desired
+       initial state
+     </desc>
+
+
+     <succ>
+       The response returned must adhere to the success criteria
+       described in
+       
members.dmtf.org/apps/org/workgroup/vcmf/download.php/68964/cimiTest.html
+       (Creating a new Machine section)
+
+       <note> HTTP response code must be "201 Created" </note>
+       <note> The state reported by the response to the 'create machine'
+       operation might be a 'PENDING', 'CREATING' or other intermediate
+       state before the machine can be placed into a stable initial
+       state.</note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>POST /machines HTTP/1.1
+Content-Type: application/json
+
+{ "resourceURI": "http://schemas.dmtf.org/cimi/1/MachineCreate";,
+  "name": "machineDefaultInitialState",
+  "description": "Machine to test the default initial state",
+  "machineTemplate": {
+    "machineConfig": { "href": " 
http://example.com/machine_configurations/small"; },
+    "machineImage": { "href": " http://example.com/machine_images/img2"; },
+    "credential": { "href": "http://example.com/creds/12345"; }
+  }
+}
+
+<hr/>HTTP/1.1 201 Created
+Location: http://example.com/machines/machineId12345
+</xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Execute a query/action to expose the capability">
+     <desc>
+       Execute a
+       GET /machines/new_machine_id operation to return the
+       machine stable initial state
+     </desc>
+
+     <succ>
+      <note> HTTP response code must be "200 OK" </note>
+      <note> The state reported by the response to the GET operation
+       might be a 'PENDING', 'CREATING' or other intermediate state
+       before the machine can be placed into a stable initial state. If
+       an intermediate state is returned, poll for the machine state to
+       change to a stable initial state </note>
+     <note> After the machine is in a stable initial state, the value
+       returned in the STATE entry of the response must match the value
+       advertised in the DefaultInitialState capability </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+
+{ "resourceType": "http://schemas.dmtf.org/cimi/1/Machine";,
+  "id": "http://example.com/machines/machineId12345";,
+  "name": "machineDefaultInitialState",
+  "description": "Machine to test the default initial state",
+  "created": "2013-01-02T10:04:00Z",
+  "updated": "2013-01-22T10:04:00Z",
+  "state": "STARTED",
+  "cpu": "1",
+  "memory": 10485760,
+  "disks" : { "href": "http://example.com/machines/machineId12345/disks";,
+  "volumes": { "href": "http://example.com/machines/machineId12345/volumes"; },
+  "networkInterfaces": { "href": 
"http://example.com/machines/machineId12345/NIs";,
+  "operations": [
+    { "rel": "http://schemas.dmtf.org/cimi/1/action/capture";, "href": 
"http://example.com/cimi/machine_images"; },
+    { "rel": "http://schemas.dmtf.org/cimi/1/action/stop";, "href": 
"http://example.com/machines/machineId12345/stop"; }
+  ]
+}
+     </xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Cleanup">
+     <desc>
+       (STOP and) DELETE the machine created in test above
+     </desc>
+
+     <succ>
+
+      <note> HTTP response code must be one of (200-207) </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+       </xml>
+      </popup>
+     </succ>
+    </test>
+
+   </tests>
+
+  </part>
+
+
+  <part title="Initial States ??? Machine Capability">
+   <tests>
+    <test name="Query the ResourceMetadata entry">
+     <desc>
+       Consumer queries Machine
+       ResourceMetadata to find the InitialStates capability
+     </desc>
+
+     <succ>
+       A serialization of the resource_metadata collection is returned
+       ??? using either JSON or XML serialization.  This test must adhere
+       to one of the "Query the ResourceMetadata entry" test in
+       the section.
+
+      <note>The InitialStates capability must be returned </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+"capabilities":
+  [{"name": "InitialStates",
+  "value": "STARTED,STOPPED",
+  "description": "Indicates the list of allowable initial states",
+  "uri": "http://schemas.dmtf.org/cimi/1/capability/Machine/InitialStates"}],
+"typeUri": "http://schemas.dmtf.org/cimi/1/Machine";,
+"name": "Machine",
+"resourceURI": "http://schemas.dmtf.org/cimi/1/ResourceMetadata";,
+"id": "http://example.com/cimi/resource_metadata/machine";
+}
+      </xml>
+      </popup>
+     </succ>
+    </test>
+
+
+    <test name="Inspect the capability">
+     <desc>
+       Use the GET request from above to
+       return the all information available about the capability.
+     </desc>
+
+     <succ>
+       The capability advertised must contain:
+      <note> name </note>
+      <note> uri (unique)</note>
+      <note> description </note>
+      <note> value(s) </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/xml
+
+&lt;ResourceMetadata xmlns="http://schemas.dmtf.org/cimi/1"; 
resourceURI="http://schemas.dmtf.org/cimi/1/ResourceMetadata";>
+&lt;id>http://example.com/cimi/resource_metadata/machine&lt;/id>
+&lt;name>Machine&lt;/name>
+&lt;typeUri>http://schemas.dmtf.org/cimi/1/Machine&lt;/typeUri>
+&lt;capability name="InitialStates" 
uri="http://schemas.dmtf.org/cimi/1/capability/Machine/InitialStates"; 
description="Indicates the list of allowable initial 
states">STARTED,STOPPED&lt;/capability>
+&lt;/ResourceMetadata>
+      </xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Put collection member in state to verify capability">
+     <desc>
+       Create a
+       new machine using either a single machineTemplate or a
+       machineImage and a machineConfig ??? specifying a desired initial
+       state which is different from the default value (see
+       DefaultInitalState capability)
+    </desc>
+
+    <succ>
+       The response returned must adhere to the success criteria
+       described in
+       
members.dmtf.org/apps/org/workgroup/vcmf/download.php/68964/cimiTest.html
+       (Creating a new Machine section)
+
+    <note> HTTP response code must be "201 Created" </note>
+    <note> The state reported by the response to the 'create machine'
+       operation might be a 'PENDING', 'CREATING' or other intermediate
+       state before the machine can be placed into a stable initial
+       state. </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>POST /machines HTTP/1.1
+Content-Type: application/json
+
+{ "resourceURI": "http://schemas.dmtf.org/cimi/1/MachineCreate";,
+  "name": "machineInitialStateStopped",
+  "description": "Machine to test initial states",
+  "machineTemplate": {
+    "initialState": "STOPPED"
+    "machineConfig": { "href": 
"http://example.com/machine_configurations/small"; },
+    "machineImage": { "href": "http://example.com/machine_images/img2"; },
+    "credential": { "href": "http://example.com/creds/12345"; }
+  }
+}
+<hr/>HTTP/1.1 201 Created
+Location: http://example.com/machines/machineId123456
+
+       </xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Execute a query/action to expose the capability">
+     <desc>
+       Execute a
+       GET /machines/new machine id operation to return the
+       machine stable initial state
+     </desc>
+
+     <succ>
+
+      <note> HTTP response code must be "200 OK" </note>
+      <note> The state reported by the response to the GET operation
+       might be a 'PENDING', 'CREATING' or other intermediate state
+       before the machine can be placed into a stable initial state. If
+       an intermediate state is returned, poll for the machine state to
+       change to a stable initial state </note>
+      <note> After the machine is in a stable initial state, the value
+       returned in the STATE entry of the response must match the value
+       specified when the machine was created in test step above </note>
+      <note> The machine response must advertise operations that match
+       the state initial stable state (for example, a machine created
+       with a STOPPED initial state should advertise 'start' as an
+       available operation) </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>TTP/1.1 200 OK
+Content-Type: application/json
+
+{ "resourceType": "http://schemas.dmtf.org/cimi/1/Machine";,
+  "id": "http://example.com/machines/machineId123456";,
+  "name": "machineInitialStateStopped",
+  "description": "Machine to test initial states",
+  "created": "2013-01-02T11:04:00Z",
+  "updated": "2013-01-22T11:04:00Z",
+  "state": "STOPPED",
+  "cpu": "1",
+  "memory": 10485760,
+  "disks" : { "href": "http://example.com/machines/machineId123456/disks";,
+  "volumes": { "href": "http://example.com/machines/machineId123456/volumes"; },
+  "networkInterfaces": { "href": 
"http://example.com/machines/machineId123456/NIs";,
+  "operations": [
+    { "rel": "http://schemas.dmtf.org/cimi/1/action/capture";, "href": 
"http://example.com/cimi/machine_images"; },
+    { "rel": "http://schemas.dmtf.org/cimi/1/action/start";, "href": 
"http://example.com/machines/machineId123456/start"; }
+  ]
+}
+      </xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Cleanup">
+     <desc>
+       (STOP and) DELETE the machine created.
+     </desc>
+
+    <succ>
+     <note> HTTP response code must be one of (200-207) </note>
+
+      <p/>
+      <popup title="Sample">
+       <xml>HTTP/1.1 200 OK
+Content-Type: application/json
+       </xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Repeat the test for initial states advertised (if there are
+                       more states to test)">
+     <desc>
+       Repeat steps to exercise and
+       verify the responses when a machine is created with each of the
+       possible initial states advertised in the capability.
+
+       <note> This test only applies if their are more than one InitialStates. 
</note>
+     </desc>
+
+     <succ>
+       The output results should adhere to the success criteria
+       specified for each step ??? making adjustments relative to the
+       initial state under test.
+     </succ>
+    </test>
+
+   </tests>
+
+  </part>
+
+
+
+  <part title="General case  - test case template per 
capability/action/attribute">
+   <tests>
+    <test name="Query the resource_metadata collection">
+     <desc>
+       GET request is sent
+       to resource_metadata collection to query the metadata associated
+       with the relevant collection
+     </desc>
+
+     <succ>
+       A representation of the resource_metadata collection is
+       returned ??? using either JSON or XML serialization
+
+      <note> HTTP response code must be "200 OK" </note>
+      <note> Content-Type header must be either "application/json"
+       or "application/xml" </note>
+      <note> id must be set to the URL of the resource metadata
+       collection </note>
+      <note> resourceURI must be set to point to
+       ResourceMetadataCollection </note>
+      <note> count must match value the number of ResourceMetadata
+       elements returned </note>
+
+      <p/>
+
+      <popup title="Sample">
+       <xml></xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Inspect the capability">
+     <desc>
+       Use the GET request from above or
+       issue a specific GET request to return the all information
+       available about the capability.
+    </desc>
+
+    <succ>
+       Each capability advertised must contain:
+     <note> name </note>
+     <note> uri (unique)</note>
+     <note> description </note>
+     <note> value </note>
+
+      <p/>
+
+      <popup title="Sample">
+       <xml></xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Put collection member in state to verify capability">
+     <desc>
+       Generally
+       a POST (or PUT/DELETE) request to place the collection member in a
+       state to operate on the capability.
+     </desc>
+
+     <succ>
+       The collection member will contain an attribute or advertise an
+       action in support of the capability under test. The return code
+       will depend on the request performed.
+
+      <p/>
+
+      <popup title="Sample">
+       <xml></xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Execute a query/action to expose the capability">
+     <desc>
+       GET or POST/PUT request that exercises the capability.
+     </desc>
+
+     <succ>
+       The collection member exhibits the behaviour advertised by the
+       capability. If the particular capability is not yet supported, the
+       request returns XXX.
+
+      <p/>
+
+      <popup title="Sample">
+       <xml></xml>
+      </popup>
+     </succ>
+    </test>
+
+    <test name="Cleanup">
+     <desc>
+       DELETE/POST/other actions to reverse any state
+       changes and remove any additional artifacts created in steps above.
+     </desc>
+
+     <succ>
+       The collection member is returned to its initial state before
+       the test and all artifacts created during the test are
+       reverted/removed.
+
+      <p/>
+
+      <popup title="Sample">
+       <xml></xml>
+      </popup>
+     </succ>
+    </test>
+   </tests>
+
+  </part>
+ </section>
+
+ <section title="Findings">
+   <num>
+
+   </num>
+ </section>
+
+ <section title="Change History">
+  <changes>
+   <change date="2013/01/03" who="Ronelle Landy">Initial Draft</change>
+  </changes>
+ </section>
+
+</scenario>
+
-- 
1.7.7.6

Reply via email to