<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>White Box Tests Source Description</title>
    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le JavaScript -->
    <script src="/assets/js/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script src="/assets/js/bootstrap-dropdown.js" type="text/javascript"></script>
    <script src="/assets/js/jquery.tweet.js" type="text/javascript"></script>
    <script src="/assets/js/application.js" type="text/javascript"></script>
    <script src="/assets/js/bootstrap-transition.js"></script>
    <script src="/assets/js/bootstrap-alert.js"></script>
    <script src="/assets/js/bootstrap-modal.js"></script>
    <script src="/assets/js/bootstrap-scrollspy.js"></script>
    <script src="/assets/js/bootstrap-tab.js"></script>
    <script src="/assets/js/bootstrap-tooltip.js"></script>
    <script src="/assets/js/bootstrap-popover.js"></script>
    <script src="/assets/js/bootstrap-button.js"></script>
    <script src="/assets/js/bootstrap-collapse.js"></script>
    <script src="/assets/js/bootstrap-carousel.js"></script>
    <script src="/assets/js/bootstrap-typeahead.js"></script>

    <!-- Le styles -->
    <link href="/assets/css/bootstrap.css" rel="stylesheet">
    <link href="/assets/css/application.css" rel="stylesheet">
    <link rel="shortcut icon" href="/assets/img/favicon.ico">
  </head>

  <body><div style="background: red"><h1>2015/07/20 - Apache Deltacloud has been retired. </h1><h2>For more information, please explore the <a href="http://attic.apache.org/">Attic</a>. </h2></div>

    <div class="navbar navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container">
          <a class="brand" href="/"><img src="/assets/img/logo.png" width="152"
            alt="Deltacloud API"/></a>
          <ul class="nav top-nav">
  <li><a href="/">Home</a></li>
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">About<b class="caret"></b></a>
    <ul class="dropdown-menu">
      <li><a href="/about.html">What is Deltacloud?</a></li>
      <li><a href="/drivers.html#drivers">Supported Providers</a></li>
    </ul>
  </li>
  <li><a href="/download.html">Download</a></li>
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Installation<b class="caret"></b></a>
    <ul class="dropdown-menu">
      <li><a href="/install-deltacloud.html">Install Deltacloud</a></li>
      <li><a href="/run-deltacloud-server.html">Run the Deltacloud Server</a></li>
    </ul>
  </li>
  <li class="dropdown">
    <a href="/usage.html" class="dropdown-toggle" data-toggle="dropdown">Usage<b class="caret"></b></a>
    <ul class="dropdown-menu">
      <li><a href="/usage.html#usingapi">Using API</a></li>
      <li><a href="/usage.html#clients">Client Libraries</a></li>
      <li><a href="/command-tools.html">Command Line Tools</a></li>
    </ul>
  </li>
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Contribute<b class="caret"></b></a>
    <ul class="dropdown-menu">
      <li><a href="/getting-sources.html">Getting Sources</a></li>
      <li><a href="/how-to-contribute.html">How Can I Contribute?</a></li>
    </ul>
  </li>
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">API<b class="caret"></b></a>
    <ul class="dropdown-menu">
      <li><a href="/rest-api.html">Deltacloud REST API</a></li>
      <li><a href="/curl-examples.html">Deltacloud API cURL examples</a></li>
      <li><a href="/drivers.html">Drivers API</a></li>
    </ul>
  </li>
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown">CIMI<b class="caret"></b></a>
    <ul class="dropdown-menu">
      <li><a href="/cimi-rest.html">CIMI REST API</a></li>
      <li><a href="/cimi-curl.html">CIMI cURL Examples</a></li>
    </ul>
  </li>
  <li><a href="/contact.html">Contact</a></li>
</ul>

        </div>
      </div>

    </div>

    <div class="container content">

      <p><br></p>

<ul class="breadcrumb">
  <li>
    <a href="white-box-tests.html">White Box Tests?</a> <span class="divider">/</span>
  </li>
  <li class="active">White Box Tests Source Description</li>
</ul>

<h3>Where Are The White Box Tests:</h3>

<p>The following depicts where in the deltacloud directory source structure the
white box tests are located:</p>
<div class="row">
  <div class="span1"></div>
  <div class="span10 offset1">
<pre>
deltacloud
|-----------------------------------------------------------------------------
|-d--&gt; server
  |---------------------------------------------------------------------------
  |-d--&gt;tests               Contains unit tests for drivers
  |---------------------------------------------------------------------------
    |-d--&gt;cimi              Contains Frontend CIMI tests
    |-------------------------------------------------------------------------
    |-d--&gt;deltacloud        Contains Frontend deltacloud tests
    |-------------------------------------------------------------------------
    |-d--&gt;ec2               Contains Frontend ec2 tests
    |-------------------------------------------------------------------------
    |-d--&gt;drivers           Contains Backend driver gem tests
    |-------------------------------------------------------------------------
      |-d--&gt;base
      |-d--&gt;ec2
      |-d--&gt;fgcp
      |-d--&gt;gogrid
      |-d--&gt;google          Contains the varios driver tests
      |-d--&gt;mock                and
      |-d--&gt;models          VCR YAML fixtures
      |-d--&gt;openstack
      |-d--&gt;rhevm
    |-------------------------------------------------------------------------
    |-d--&gt;helpers           Contains helper code common to multiple tests
    |-------------------------------------------------------------------------
    |-f--&gt;test_helper.rb    Contains the common test helper routes
    |-------------------------------------------------------------------------
</pre>

  </div>
</div>

<p><br></p>

<h3>Driver tests</h3>

<u><b>REPO</b>/deltacloud/server/tests/drivers</u>

<p><br></p>

<p>
This directory provides all the <i><b>driver</b></i> tests. Each driver tests is
placed into a separate directory with the driver name.  Everything that touchs
the driver API goes here as well. It is good practice to divide the tests into
logical collections, in this case driver methods.
</p>

<p>
Driver tests use the Deltacloud::new method to create new instance of a driver.
This method is usually called in a <i>before</i> block and takes two parameters:
<i>driver name</i> and <i>credentials</i>. The driver methods can be called
directly on the instance of Deltacloud::new.
</p>

<p>
Some driver tests may use the <a href="https://github.com/vcr/vcr">VCR</a> gem
to record and then mock the real communication with the backend server. The fixtures
are maintained in the <i>tests/drivers/<b>DRIVER</b>/fixtures</i> directory.
</p>

<p>
For more informations about recording, look at the file: <i>tests/drivers/ec2/common.rb</i>,
<a href="why-update-vcr-test-fixtures-data.html">Why Updating the VCR Fixtures</a>
and <a href="update-vcr-test-fixtures-data-example.html">Updating VCR Fixtures Example</a>
</p>

<h3>Test Helpers</h3>

<u><b>REPO</b>/deltacloud/server/tests/helpers</u>

<p><br></p>

<p>
The <i>base</i> directory contain tests for Deltacloud::Driver class and the Library
class.
</p>

<h3>Frontend tests</h3>

<p>
In addition to the default <i>deltacloud</i> frontend Deltacloud may also
operate using different frontends. In this case, instead of exposing the
DC API specification to the client, Deltacloud will provide its drivers
API through different frontends (like CIMI or Amazon EC2).
</p>

<p>
Some tests might use the Mock driver to call the <i>control</i> blocks in Rabbit
collections.  These tests are <b>not</b> driver tests, they just use the mock
driver to make sure the Rabbit operation <i>control blocks</i> works as expected
and they provide expected output.
</p>

<u><b>REPO</b>/deltacloud/server/tests/deltacloud</u>

<p>
This directory provides tests for Deltacloud API frontend. It contains tests
for collections that this frontend provides and also tests helpers that this
frontend use.
</p>

<u><b>REPO</b>/deltacloud/server/tests/ec2</u>

<p>
This directory provides tests for the EC2 frontend. Tests make sure that mapping
between EC2 actions and Deltacloud driver API works correctly. All tests
relevant to EC2 frontend tests should go here. **NOTE** this directory does not
provide Amazon EC2 driver tests.
</p>

<u><b>REPO</b>/deltacloud/server/tests/cimi</u>

<p>
This directory provides tests for the CIMI frotend. They make sure that
JSON/XML serialization of the CIMI models works correctly. Also there are tests
to make sure the output provided by CIMI collections is correct.
</p>


      <footer class="footer">
        <p class="pull-right"><span class='icon-circle-arrow-up'>&nbsp;</span><a href="#">Back to top</a></p>
        <div class='row'>
          <div class='span3'>
            <img src="/assets/img/asf.png" alt="Apache Software Foundation"/>
          </div>
          <div class='span9'>
            <strong>Apache Deltacloud</strong> is a top-level project at the <a
              href="http://www.apache.org">Apache Software Foundation</a>,
            having graduated from the ASF Incubator in October
            2011. Through a collaborative and meritocratic development process, Apache
            projects deliver enterprise-grade, freely available software products that
            attract large communities of users. 
          </div>
        </div>
      </footer>

    </div> <!-- /container -->

<!-- Piwik -->
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.salasaga.org/aeolus/piwik/" : "http://stats.salasaga.org/aeolus/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 2);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://stats.salasaga.org/aeolus/piwik/piwik.php?idsite=2" style="border:0" alt="" /></p></noscript>
<!-- End Piwik Tracking Code -->

  </body>
</html>
