VBoxValidationKitReadMe.html revision cf22150eaeeb72431bf1cf65c309a431454fb22b
2N/A<?xml version="1.0" encoding="utf-8" ?>
2N/A<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2N/A<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
2N/A<head>
2N/A<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2N/A<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
2N/A<title>The VirtualBox Validation Kit</title>
2N/A<style type="text/css">
2N/A
2N/A/*
2N/A:Author: David Goodger (goodger@python.org)
2N/A:Id: $Id$
2N/A:Copyright: This stylesheet has been placed in the public domain.
2N/A
2N/ADefault cascading style sheet for the HTML output of Docutils.
2N/A
2N/ASee http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
2N/Acustomize this style sheet.
2N/A*/
2N/A
2N/A/* used to remove borders from tables and images */
2N/A.borderless, table.borderless td, table.borderless th {
2N/A border: 0 }
2N/A
2N/Atable.borderless td, table.borderless th {
2N/A /* Override padding for "table.docutils td" with "! important".
2N/A The right padding separates the table cells. */
2N/A padding: 0 0.5em 0 0 ! important }
2N/A
2N/A.first {
2N/A /* Override more specific margin styles with "! important". */
2N/A margin-top: 0 ! important }
2N/A
2N/A.last, .with-subtitle {
2N/A margin-bottom: 0 ! important }
2N/A
2N/A.hidden {
2N/A display: none }
2N/A
2N/Aa.toc-backref {
2N/A text-decoration: none ;
2N/A color: black }
2N/A
2N/Ablockquote.epigraph {
2N/A margin: 2em 5em ; }
2N/A
2N/Adl.docutils dd {
2N/A margin-bottom: 0.5em }
2N/A
2N/Aobject[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
2N/A overflow: hidden;
2N/A}
2N/A
2N/A/* Uncomment (and remove this text!) to get bold-faced definition list terms
2N/Adl.docutils dt {
2N/A font-weight: bold }
2N/A*/
2N/A
2N/Adiv.abstract {
2N/A margin: 2em 5em }
2N/A
2N/Adiv.abstract p.topic-title {
2N/A font-weight: bold ;
2N/A text-align: center }
2N/A
2N/Adiv.admonition, div.attention, div.caution, div.danger, div.error,
2N/Adiv.hint, div.important, div.note, div.tip, div.warning {
2N/A margin: 2em ;
2N/A border: medium outset ;
2N/A padding: 1em }
2N/A
2N/Adiv.admonition p.admonition-title, div.hint p.admonition-title,
2N/Adiv.important p.admonition-title, div.note p.admonition-title,
2N/Adiv.tip p.admonition-title {
2N/A font-weight: bold ;
2N/A font-family: sans-serif }
2N/A
2N/Adiv.attention p.admonition-title, div.caution p.admonition-title,
2N/Adiv.danger p.admonition-title, div.error p.admonition-title,
2N/Adiv.warning p.admonition-title, .code .error {
2N/A color: red ;
2N/A font-weight: bold ;
2N/A font-family: sans-serif }
2N/A
2N/A/* Uncomment (and remove this text!) to get reduced vertical space in
2N/A compound paragraphs.
2N/Adiv.compound .compound-first, div.compound .compound-middle {
2N/A margin-bottom: 0.5em }
2N/A
2N/Adiv.compound .compound-last, div.compound .compound-middle {
2N/A margin-top: 0.5em }
2N/A*/
2N/A
2N/Adiv.dedication {
2N/A margin: 2em 5em ;
2N/A text-align: center ;
2N/A font-style: italic }
2N/A
2N/Adiv.dedication p.topic-title {
2N/A font-weight: bold ;
2N/A font-style: normal }
2N/A
2N/Adiv.figure {
2N/A margin-left: 2em ;
2N/A margin-right: 2em }
2N/A
2N/Adiv.footer, div.header {
2N/A clear: both;
2N/A font-size: smaller }
2N/A
2N/Adiv.line-block {
2N/A display: block ;
2N/A margin-top: 1em ;
2N/A margin-bottom: 1em }
2N/A
2N/Adiv.line-block div.line-block {
2N/A margin-top: 0 ;
2N/A margin-bottom: 0 ;
2N/A margin-left: 1.5em }
2N/A
2N/Adiv.sidebar {
2N/A margin: 0 0 0.5em 1em ;
2N/A border: medium outset ;
2N/A padding: 1em ;
2N/A background-color: #ffffee ;
2N/A width: 40% ;
2N/A float: right ;
2N/A clear: right }
2N/A
2N/Adiv.sidebar p.rubric {
2N/A font-family: sans-serif ;
2N/A font-size: medium }
2N/A
2N/Adiv.system-messages {
2N/A margin: 5em }
2N/A
2N/Adiv.system-messages h1 {
2N/A color: red }
2N/A
2N/Adiv.system-message {
2N/A border: medium outset ;
2N/A padding: 1em }
2N/A
2N/Adiv.system-message p.system-message-title {
2N/A color: red ;
2N/A font-weight: bold }
2N/A
2N/Adiv.topic {
2N/A margin: 2em }
2N/A
2N/Ah1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
2N/Ah4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
2N/A margin-top: 0.4em }
2N/A
2N/Ah1.title {
2N/A text-align: center }
2N/A
2N/Ah2.subtitle {
2N/A text-align: center }
2N/A
2N/Ahr.docutils {
2N/A width: 75% }
2N/A
2N/Aimg.align-left, .figure.align-left, object.align-left {
2N/A clear: left ;
2N/A float: left ;
2N/A margin-right: 1em }
2N/A
2N/Aimg.align-right, .figure.align-right, object.align-right {
2N/A clear: right ;
2N/A float: right ;
2N/A margin-left: 1em }
2N/A
2N/Aimg.align-center, .figure.align-center, object.align-center {
2N/A display: block;
2N/A margin-left: auto;
2N/A margin-right: auto;
2N/A}
2N/A
2N/A.align-left {
2N/A text-align: left }
2N/A
2N/A.align-center {
2N/A clear: both ;
2N/A text-align: center }
2N/A
2N/A.align-right {
2N/A text-align: right }
2N/A
2N/A/* reset inner alignment in figures */
2N/Adiv.align-right {
2N/A text-align: inherit }
2N/A
2N/A/* div.align-center * { */
2N/A/* text-align: left } */
2N/A
2N/Aol.simple, ul.simple {
2N/A margin-bottom: 1em }
2N/A
2N/Aol.arabic {
2N/A list-style: decimal }
2N/A
2N/Aol.loweralpha {
2N/A list-style: lower-alpha }
2N/A
2N/Aol.upperalpha {
2N/A list-style: upper-alpha }
2N/A
2N/Aol.lowerroman {
2N/A list-style: lower-roman }
2N/A
2N/Aol.upperroman {
2N/A list-style: upper-roman }
2N/A
2N/Ap.attribution {
2N/A text-align: right ;
2N/A margin-left: 50% }
2N/A
2N/Ap.caption {
2N/A font-style: italic }
2N/A
2N/Ap.credits {
2N/A font-style: italic ;
2N/A font-size: smaller }
2N/A
2N/Ap.label {
2N/A white-space: nowrap }
2N/A
2N/Ap.rubric {
2N/A font-weight: bold ;
2N/A font-size: larger ;
2N/A color: maroon ;
2N/A text-align: center }
2N/A
2N/Ap.sidebar-title {
2N/A font-family: sans-serif ;
2N/A font-weight: bold ;
2N/A font-size: larger }
2N/A
2N/Ap.sidebar-subtitle {
2N/A font-family: sans-serif ;
2N/A font-weight: bold }
2N/A
2N/Ap.topic-title {
2N/A font-weight: bold }
2N/A
2N/Apre.address {
2N/A margin-bottom: 0 ;
2N/A margin-top: 0 ;
2N/A font: inherit }
2N/A
2N/Apre.literal-block, pre.doctest-block, pre.math, pre.code {
2N/A margin-left: 2em ;
2N/A margin-right: 2em }
2N/A
2N/Apre.code .ln { color: grey; } /* line numbers */
2N/Apre.code, code { background-color: #eeeeee }
2N/Apre.code .comment, code .comment { color: #5C6576 }
2N/Apre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
2N/Apre.code .literal.string, code .literal.string { color: #0C5404 }
2N/Apre.code .name.builtin, code .name.builtin { color: #352B84 }
2N/Apre.code .deleted, code .deleted { background-color: #DEB0A1}
2N/Apre.code .inserted, code .inserted { background-color: #A3D289}
2N/A
2N/Aspan.classifier {
2N/A font-family: sans-serif ;
2N/A font-style: oblique }
2N/A
2N/Aspan.classifier-delimiter {
2N/A font-family: sans-serif ;
2N/A font-weight: bold }
2N/A
2N/Aspan.interpreted {
2N/A font-family: sans-serif }
2N/A
2N/Aspan.option {
2N/A white-space: nowrap }
2N/A
2N/Aspan.pre {
2N/A white-space: pre }
2N/A
2N/Aspan.problematic {
2N/A color: red }
2N/A
2N/Aspan.section-subtitle {
2N/A /* font-size relative to parent (h1..h6 element) */
2N/A font-size: 80% }
2N/A
2N/Atable.citation {
2N/A border-left: solid 1px gray;
2N/A margin-left: 1px }
2N/A
2N/Atable.docinfo {
2N/A margin: 2em 4em }
2N/A
2N/Atable.docutils {
2N/A margin-top: 0.5em ;
2N/A margin-bottom: 0.5em }
2N/A
2N/Atable.footnote {
2N/A border-left: solid 1px black;
2N/A margin-left: 1px }
2N/A
2N/Atable.docutils td, table.docutils th,
2N/Atable.docinfo td, table.docinfo th {
2N/A padding-left: 0.5em ;
2N/A padding-right: 0.5em ;
2N/A vertical-align: top }
2N/A
2N/Atable.docutils th.field-name, table.docinfo th.docinfo-name {
2N/A font-weight: bold ;
2N/A text-align: left ;
2N/A white-space: nowrap ;
2N/A padding-left: 0 }
2N/A
2N/Ah1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
2N/Ah4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
2N/A font-size: 100% }
2N/A
2N/Aul.auto-toc {
2N/A list-style-type: none }
2N/A
2N/A</style>
2N/A</head>
2N/A<body>
2N/A<div class="document" id="the-virtualbox-test-suite">
2N/A<h1 class="title">The VirtualBox Validation Kit</h1>
2N/A
2N/A<div class="section" id="introduction">
2N/A<h1>Introduction</h1>
2N/A<p>The VirtualBox test suite is the new way we're doing automated testing of
2N/AVirtualBox and is still rather incomplete, in fact it will probably always be
2N/Aincomplete as there will always be new features and guest OSes to test.</p>
2N/A<p>We're warmly welcoming contributions, new ideas for good tests, and fixes.</p>
2N/A</div>
2N/A<div class="section" id="directory-layout">
2N/A<h1>Directory Layout</h1>
2N/A<dl class="docutils">
2N/A<dt>/docs/</dt>
2N/A<dd><p class="first">The documentation for the test suite mostly lives here, the exception being
2N/Areadme.txt files that are better off living near what they concern.</p>
2N/A<p class="last">For a definition of terms used here, see the Definitions / Glossary section
2N/Aof /docs/AutomaticTestingRevamp.txt / /docs/AutomaticTestingRevamp.html.</p>
2N/A</dd>
2N/A<dt>/testdriver/</dt>
2N/A<dd><p class="first">Python module implementing the base test drivers and supporting stuff.
2N/AThe base test driver implementation is found in /testdriver/base.py while
2N/Athe VBox centric specialization is in /testdriver/vbox.py. Various VBox
2N/AAPI wrappers that makes things easier to use and glosses over a lot of API
2N/Aversion differences that live in /testdriver/vboxwrappers.py.</p>
2N/A<p>Test VM collections are often managed thru /testdriver/vboxtestvms.py, but
2N/Adoesn't necessarily have to be, it's up to the individual test driver.</p>
2N/A<p>For logging, reporting result, uploading useful files and such we have a
2N/Areporter singleton sub-package, /testdriver/reporter.py. It implements
2N/Aboth local (for local testing) and remote (for testboxes + test manager)
2N/Areporting.</p>
2N/A<p class="last">There is also a VBoxTXS client implementation in txsclient.py and a stacked
2N/Atest driver for installing VBox (vboxinstaller.py). Most test drivers will
2N/Ause the TXS client indirectly thru vbox.py methods. The installer driver
2N/Ais a special trick for the testbox+testmanager setup.</p>
2N/A</dd>
2N/A<dt>/tests/</dt>
2N/A<dd>The python scripts driving the tests. These are organized by what they
2N/Atest and are all derived from the base classes in /testdriver (mostly from
2N/Avbox.py of course). Most tests use one or more VMs from a standard set of
2N/Apreconfigured VMs defined by /testdriver/vboxtestvms.py (mentioned above),
2N/Athough the installation tests used prepared ISOs and floppy images.</dd>
2N/A<dt>/vms/</dt>
2N/A<dd>Text documents describing the preconfigured test VMs defined by
2N/A/testdrive/vboxtestvms.py. This will also contain description of how to
2N/Aprepare installation ISOs when we get around to it (soon).</dd>
2N/A<dt>/utils/</dt>
2N/A<dd><p class="first">Test utilities and lower level test programs, compiled from C, C++ and
2N/AAssembly mostly. Generally available for both host and guest, i.e. in the
2N/Azip and on the VBoxValidationKit.iso respectively.</p>
2N/A<p>The Test eXecution Service (VBoxTXS) found in /utils/TestExecServ is one
2N/Aof the more important utilities. It implements a remote execution service
2N/Afor running programs/tests inside VMs and on other test boxes. See
2N/A/utils/TestExecServ/vboxtxs-readme.txt for more details.</p>
2N/A<p class="last">A simple network bandwidth and latency test program can be found in
2N/A/utils/network/NetPerf.cpp.</p>
2N/A</dd>
2N/A<dt>/bootsectors/</dt>
2N/A<dd><p class="first">Boot sector test environment. This allows creating floppy images in
2N/Aassembly that tests specific CPU or device behaviour. Most tests can be
2N/Aput on a USB stick, floppy or similar and booted up on real hardware for
2N/Acomparison. All floppy images can be used for manual testing by developers
2N/Aand most will be used by test drivers (/tests/<em>/td</em>.py) sooner or later.</p>
2N/A<p class="last">The boot sector environment is heavily bound to yasm and it's ability to
2N/Alink binary images for single assembly input units. There is a &quot;library&quot;
2N/Aof standard initialization code and runtime code, which include switch to
2N/Aall (well V8086 mode is still missing, but we'll get that done eventually)
2N/Aprocessor modes and paging modes. The image specific code is split into
2N/Ainit/driver code and test template, the latter can be instantiated for each
2N/Aprocess execution+paging mode.</p>
2N/A</dd>
2N/A<dt>/common/</dt>
2N/A<dd>Python package containing common python code.</dd>
2N/A<dt>/testboxscript/</dt>
2N/A<dd>The testbox script. This is installed on testboxes used for automatic
2N/Atesting with the testmanager.</dd>
2N/A<dt>/testmanager/</dt>
2N/A<dd>The VirtualBox Test Manager (server side code). This is written in Python
2N/Aand currently uses postgresql as database backend for no particular reason
2N/Aother than that it was already installed on the server the test manager was
2N/Agoing to run on. It's relatively generic, though there are of course
2N/Athings in there that are of more use when testing VirtualBox than other
2N/Athings. A more detailed account (though perhaps a little dated) of the
2N/Atest manager can be found in /docs/AutomaticTestingRevamp.txt and
2N/A/docs/AutomaticTestingRevamp.html.</dd>
2N/A<dt>/testanalysis/</dt>
2N/A<dd>A start a local test result analysis, comparing network test output. We'll
2N/Aprobably be picking this up again later.</dd>
2N/A<dt>/snippets/</dt>
2N/A<dd>Various code snippets that may be turned into real tests at some point.</dd>
2N/A</dl>
2N/A<table class="docutils field-list" frame="void" rules="none">
2N/A<col class="field-name" />
2N/A<col class="field-body" />
2N/A<tbody valign="top">
2N/A<tr class="field"><th class="field-name">Status:</th><td class="field-body">$Id$</td>
2N/A</tr>
2N/A<tr class="field"><th class="field-name">Copyright:</th><td class="field-body">Copyright (C) 2010-2014 Oracle Corporation.</td>
2N/A</tr>
2N/A</tbody>
2N/A</table>
2N/A</div>
2N/A</div>
2N/A</body>
2N/A</html>
2N/A