<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://linux-kvm.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Drorr</id>
	<title>KVM - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://linux-kvm.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Drorr"/>
	<link rel="alternate" type="text/html" href="https://linux-kvm.org/page/Special:Contributions/Drorr"/>
	<updated>2026-04-06T00:51:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM-Autotest/TODO&amp;diff=2134</id>
		<title>KVM-Autotest/TODO</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM-Autotest/TODO&amp;diff=2134"/>
		<updated>2009-03-15T13:59:07Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== KVM-Autotest to do list ==&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM-Autotest&amp;diff=2133</id>
		<title>KVM-Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM-Autotest&amp;diff=2133"/>
		<updated>2009-03-15T13:25:21Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KVM-Autotest =&lt;br /&gt;
&lt;br /&gt;
The KVM-Autotest system is based on the [http://test.kernel.org/autotest/ autotest] framework. Its main purpose is to serve as an automated regression testing tool for KVM developers, as well as a means for users to verify the stability of a KVM release before using it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kvm_runtest_2 ==&lt;br /&gt;
&lt;br /&gt;
* [[KVM-Autotest/Getting Started|Installation &amp;amp; Getting Started]]&lt;br /&gt;
* [[KVM-Autotest/Test Config File|The test configuration file format]]&lt;br /&gt;
* [[KVM-Autotest/Parameters|Framework parameters]] -- lists and explains the parameters used by the framework&lt;br /&gt;
* [[KVM-Autotest/Tests|Tests]] -- lists the available tests and their parameters&lt;br /&gt;
* [[KVM-Autotest/Steps|Working with step files]] -- background on step files, usage information for Stepmaker and Stepeditor and step file creation tips&lt;br /&gt;
* [[KVM-Autotest/TODO|To do]]&lt;br /&gt;
&lt;br /&gt;
== kvm_runtest (old wiki) ==&lt;br /&gt;
&lt;br /&gt;
http://il.qumranet.com/kvmwiki/KVM_RegressionTest&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM-Autotest&amp;diff=2132</id>
		<title>KVM-Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM-Autotest&amp;diff=2132"/>
		<updated>2009-03-15T13:22:19Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KVM-Autotest =&lt;br /&gt;
&lt;br /&gt;
The KVM-Autotest system is based on the [http://test.kernel.org/autotest/ autotest] framework. Its main purpose is to serve as an automated regression testing tool for KVM developers, as well as a means for users to verify the stability of a KVM release before using it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kvm_runtest_2 ==&lt;br /&gt;
&lt;br /&gt;
* [[KVM-Autotest/Getting Started|Installation &amp;amp; Getting Started]]&lt;br /&gt;
* [[KVM-Autotest/Test Config File|The test configuration file format]]&lt;br /&gt;
* [[KVM-Autotest/Parameters|Framework parameters]] -- lists and explains the parameters used by the framework&lt;br /&gt;
* [[KVM-Autotest/Tests|Tests]] -- lists the available tests and their parameters&lt;br /&gt;
* [[KVM-Autotest/Steps|Working with step files]] -- background on step files, usage information for Stepmaker and Stepeditor and step file creation tips&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== kvm_runtest (old wiki) ==&lt;br /&gt;
&lt;br /&gt;
http://il.qumranet.com/kvmwiki/KVM_RegressionTest&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1979</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1979"/>
		<updated>2009-03-09T16:30:45Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
* To verify KVM stability&lt;br /&gt;
* Easy to use by developers that make changes to the code and want to make sure that no regression has been made&lt;br /&gt;
* Easy to use by users that want to verify the release is stable, before using it&lt;br /&gt;
* Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
* [[Installation &amp;amp; Getting Started]]&lt;br /&gt;
* [[Test Configuration]]&lt;br /&gt;
* [[Test Cases]]&lt;br /&gt;
== Dev Documentation ==&lt;br /&gt;
* [[TO DO]]&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1978</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1978"/>
		<updated>2009-03-09T16:28:28Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
* To verify KVM stability&lt;br /&gt;
* Easy to use by developers that make changes to the code and want to make sure that no regression has been made&lt;br /&gt;
* Easy to use by users that want to verify the release is stable, before using it&lt;br /&gt;
* Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Installation &amp;amp; Getting Started]]&lt;br /&gt;
* [[Test Configuration]]&lt;br /&gt;
* [[Test Cases]]&lt;br /&gt;
* [[TO DO]]&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1976</id>
		<title>Test Configuration</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1976"/>
		<updated>2009-03-09T16:12:37Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Weird Cartesian Product KVM Test Config File Format (TWCPKVMTCFF) =&lt;br /&gt;
&lt;br /&gt;
This is the format used by test configuration files in kvm_runtest_2. It was designed to meet several requirements:&lt;br /&gt;
* Support for quick definition of multiple test scenarios (drive format, ACPI support, SMP configuration and other QEMU params) for all guests and tests&lt;br /&gt;
* Support for exceptions applying to specific guests/tests/scenarios&lt;br /&gt;
* Support for dependencies between tests&lt;br /&gt;
* Unification of the various config files currently used into a single (hopefully simple) framework&lt;br /&gt;
&lt;br /&gt;
== General Description ==&lt;br /&gt;
&lt;br /&gt;
* The parser relies on indentation.&lt;br /&gt;
* The parser produces a list of dictionaries (dicts). Each dictionary contains a set of key-value pairs.&lt;br /&gt;
* Each dict contains at least three keys: &#039;name&#039;, &#039;shortname&#039; and &#039;depend&#039;. The values of &#039;name&#039; and &#039;shortname&#039; are strings, and the value of &#039;depend&#039; is a list of strings.&lt;br /&gt;
* A list of dictionaries will henceforth be referred to as a frame.&lt;br /&gt;
* The initial frame contains a single dict, whose &#039;name&#039; and &#039;shortname&#039; are empty strings, and whose &#039;depend&#039; is an empty list.&lt;br /&gt;
* Parsing dict contents:&lt;br /&gt;
** The dict parser operates on a frame, which will henceforth be referred to as the current frame.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; = &amp;lt;value&amp;gt;&#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; += &amp;lt;value&amp;gt;&#039; appends &amp;lt;value&amp;gt; to the value of &amp;lt;key&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; &amp;lt;= &amp;lt;value&amp;gt;&#039; pre-pends &amp;lt;value&amp;gt; to the value of &amp;lt;key&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; ?= &amp;lt;value&amp;gt;&#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt;, in all dicts of the current frame, but only if &amp;lt;key&amp;gt; exists in the dict. The operators ?+= and ?&amp;lt;= are also supported.&lt;br /&gt;
** A statement of the form &#039;no &amp;lt;regex&amp;gt;&#039; removes from the current frame all dicts whose &#039;name&#039; field matches &amp;lt;regex&amp;gt;.&lt;br /&gt;
* A statement of the form &#039;only &amp;lt;regex&amp;gt;&#039; removes from the current frame all dicts whose &#039;name&#039; field does not match &amp;lt;regex&amp;gt;.&lt;br /&gt;
* Parsing &#039;variants&#039;:&lt;br /&gt;
** A &#039;variants&#039; block is opened by a &#039;variants:&#039; statement. The contents of the block should follow the &#039;variants:&#039; line and should be indented.&lt;br /&gt;
** A line in a &#039;variants&#039; block should be of the format &#039;- &amp;lt;variant_name&amp;gt;:&#039;. The contents of this variant should be specified following that line, and should be indented. The contents are parsed by the dict parser described above; they may be of the format &#039;&amp;lt;key&amp;gt; &amp;lt;op&amp;gt; &amp;lt;value&amp;gt;&#039;. They may also contain &#039;variants:&#039; statements, or whatever the dict parser recognizes.&lt;br /&gt;
** Each variant in a &#039;variants&#039; block inherits a copy of the frame in which the &#039;variants:&#039; statement appears. The &#039;current frame&#039;, which may be modified by the dict parser, becomes this copy.&lt;br /&gt;
** The name of the variant (specified in the line &#039;- &amp;lt;variant_name&amp;gt;:&#039;) is pre-pended to the &#039;name&#039; field of each dict of the variant&#039;s frame, along with a separator dot (&#039;.&#039;).&lt;br /&gt;
** If the name of the variant is not preceeded by a &#039;@&#039; (i.e. &#039;- @&amp;lt;variant_name&amp;gt;:&#039;), it is pre-pended to the &#039;shortname&#039; field of each dict of the variant&#039;s frame. In other words, if a variant&#039;s name is preceeded by a &#039;@&#039;, it is omitted from the &#039;shortname&#039; field.&lt;br /&gt;
** The frames of the variants defined in the &#039;variants&#039; block are joined into a single frame which replaces the frame in which the &#039;variants:&#039; statement appears.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
=== A single dictionary ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
 &lt;br /&gt;
 key1 = value1&lt;br /&gt;
 key2 = value2&lt;br /&gt;
 key3 = value3&lt;br /&gt;
&lt;br /&gt;
results in the following list of dictionaries (a single dictionary):&lt;br /&gt;
&lt;br /&gt;
 Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = &lt;br /&gt;
    shortname =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adding a &#039;variants&#039; block ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
 key1 = value1&lt;br /&gt;
 key2 = value2&lt;br /&gt;
 key3 = value3 &lt;br /&gt;
 variants:&lt;br /&gt;
    - one:&lt;br /&gt;
    - two:&lt;br /&gt;
    - three:&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
 Dictionary #1:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
 Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
&lt;br /&gt;
=== Modifying dictionaries inside a variant ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 key1 = value1&lt;br /&gt;
 key2 = value2&lt;br /&gt;
 key3 = value3&lt;br /&gt;
 variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two:&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three:&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
 Dictionary #1:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
 Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
&lt;br /&gt;
=== Adding dependencies ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 key1 = value1&lt;br /&gt;
 key2 = value2&lt;br /&gt;
 key3 = value3&lt;br /&gt;
 variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
 Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
 Dictionary #1:&lt;br /&gt;
    depend = [&#039;one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
 Dictionary #2:&lt;br /&gt;
    depend = [&#039;one&#039;, &#039;two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
&lt;br /&gt;
=== Multiple &#039;variants&#039; blocks ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 key1 = value1&lt;br /&gt;
 key2 = value2&lt;br /&gt;
 key3 = value3&lt;br /&gt;
 variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
 variants:&lt;br /&gt;
    - A:&lt;br /&gt;
    - B:&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
 Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.one&lt;br /&gt;
    shortname = A.one&lt;br /&gt;
 Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = A.two&lt;br /&gt;
 Dictionary #2:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = A.three&lt;br /&gt;
 Dictionary #3:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
 Dictionary #4:&lt;br /&gt;
    depend = [&#039;B.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.two&lt;br /&gt;
    shortname = B.two&lt;br /&gt;
 Dictionary #5:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
&lt;br /&gt;
=== Using &#039;no&#039; and &#039;only&#039; ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
 key1 = value1&lt;br /&gt;
 key2 = value2&lt;br /&gt;
 key3 = value3&lt;br /&gt;
 variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
 variants:&lt;br /&gt;
    - A:&lt;br /&gt;
        no one&lt;br /&gt;
    - B:&lt;br /&gt;
        only one|three&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
 Dictionary #0:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = A.two&lt;br /&gt;
 Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = A.three&lt;br /&gt;
 Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
 Dictionary #3:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
&lt;br /&gt;
=== Using &#039;@&#039; ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
 key1 = value1&lt;br /&gt;
 key2 = value2&lt;br /&gt;
 key3 = value3&lt;br /&gt;
 variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
 variants:&lt;br /&gt;
    - @A:&lt;br /&gt;
        no one&lt;br /&gt;
    - B:&lt;br /&gt;
        only one|three&lt;br /&gt;
&lt;br /&gt;
results in the following list (note the difference between the &#039;name&#039; and &#039;shortname&#039; fields):&lt;br /&gt;
&lt;br /&gt;
 Dictionary #0:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = two&lt;br /&gt;
 Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = three&lt;br /&gt;
 Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
 Dictionary #3:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1975</id>
		<title>Test Configuration</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1975"/>
		<updated>2009-03-09T16:04:46Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Weird Cartesian Product KVM Test Config File Format (TWCPKVMTCFF) =&lt;br /&gt;
&lt;br /&gt;
This is the format used by test configuration files in kvm_runtest_2. It was designed to meet several requirements:&lt;br /&gt;
* Support for quick definition of multiple test scenarios (drive format, ACPI support, SMP configuration and other QEMU params) for all guests and tests&lt;br /&gt;
* Support for exceptions applying to specific guests/tests/scenarios&lt;br /&gt;
* Support for dependencies between tests&lt;br /&gt;
* Unification of the various config files currently used into a single (hopefully simple) framework&lt;br /&gt;
&lt;br /&gt;
== General Description ==&lt;br /&gt;
&lt;br /&gt;
* The parser relies on indentation.&lt;br /&gt;
* The parser produces a list of dictionaries (dicts). Each dictionary contains a set of key-value pairs.&lt;br /&gt;
* Each dict contains at least three keys: &#039;name&#039;, &#039;shortname&#039; and &#039;depend&#039;. The values of &#039;name&#039; and &#039;shortname&#039; are strings, and the value of &#039;depend&#039; is a list of strings.&lt;br /&gt;
* A list of dictionaries will henceforth be referred to as a frame.&lt;br /&gt;
* The initial frame contains a single dict, whose &#039;name&#039; and &#039;shortname&#039; are empty strings, and whose &#039;depend&#039; is an empty list.&lt;br /&gt;
* Parsing dict contents:&lt;br /&gt;
** The dict parser operates on a frame, which will henceforth be referred to as the current frame.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; = &amp;lt;value&amp;gt;&#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; += &amp;lt;value&amp;gt;&#039; appends &amp;lt;value&amp;gt; to the value of &amp;lt;key&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; &amp;lt;= &amp;lt;value&amp;gt;&#039; pre-pends &amp;lt;value&amp;gt; to the value of &amp;lt;key&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; ?= &amp;lt;value&amp;gt;&#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt;, in all dicts of the current frame, but only if &amp;lt;key&amp;gt; exists in the dict. The operators ?+= and ?&amp;lt;= are also supported.&lt;br /&gt;
** A statement of the form &#039;no &amp;lt;regex&amp;gt;&#039; removes from the current frame all dicts whose &#039;name&#039; field matches &amp;lt;regex&amp;gt;.&lt;br /&gt;
* A statement of the form &#039;only &amp;lt;regex&amp;gt;&#039; removes from the current frame all dicts whose &#039;name&#039; field does not match &amp;lt;regex&amp;gt;.&lt;br /&gt;
* Parsing &#039;variants&#039;:&lt;br /&gt;
** A &#039;variants&#039; block is opened by a &#039;variants:&#039; statement. The contents of the block should follow the &#039;variants:&#039; line and should be indented.&lt;br /&gt;
** A line in a &#039;variants&#039; block should be of the format &#039;- &amp;lt;variant_name&amp;gt;:&#039;. The contents of this variant should be specified following that line, and should be indented. The contents are parsed by the dict parser described above; they may be of the format &#039;&amp;lt;key&amp;gt; &amp;lt;op&amp;gt; &amp;lt;value&amp;gt;&#039;. They may also contain &#039;variants:&#039; statements, or whatever the dict parser recognizes.&lt;br /&gt;
** Each variant in a &#039;variants&#039; block inherits a copy of the frame in which the &#039;variants:&#039; statement appears. The &#039;current frame&#039;, which may be modified by the dict parser, becomes this copy.&lt;br /&gt;
** The name of the variant (specified in the line &#039;- &amp;lt;variant_name&amp;gt;:&#039;) is pre-pended to the &#039;name&#039; field of each dict of the variant&#039;s frame, along with a separator dot (&#039;.&#039;).&lt;br /&gt;
** If the name of the variant is not preceeded by a &#039;@&#039; (i.e. &#039;- @&amp;lt;variant_name&amp;gt;:&#039;), it is pre-pended to the &#039;shortname&#039; field of each dict of the variant&#039;s frame. In other words, if a variant&#039;s name is preceeded by a &#039;@&#039;, it is omitted from the &#039;shortname&#039; field.&lt;br /&gt;
** The frames of the variants defined in the &#039;variants&#039; block are joined into a single frame which replaces the frame in which the &#039;variants:&#039; statement appears.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
=== A single dictionary ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
results in the following list of dictionaries (a single dictionary):&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = &lt;br /&gt;
    shortname =&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
=== Adding a &#039;variants&#039; block ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
    - two:&lt;br /&gt;
    - three:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Modifying dictionaries inside a variant ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two:&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Adding dependencies ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&#039;one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = [&#039;one&#039;, &#039;two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Multiple &#039;variants&#039; blocks ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - A:&lt;br /&gt;
    - B:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.one&lt;br /&gt;
    shortname = A.one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = A.two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = A.three&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #4:&lt;br /&gt;
    depend = [&#039;B.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.two&lt;br /&gt;
    shortname = B.two&lt;br /&gt;
Dictionary #5:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Using &#039;no&#039; and &#039;only&#039; ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - A:&lt;br /&gt;
        no one&lt;br /&gt;
    - B:&lt;br /&gt;
        only one|three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = A.two&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = A.three&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Using &#039;@&#039; ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - @A:&lt;br /&gt;
        no one&lt;br /&gt;
    - B:&lt;br /&gt;
        only one|three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list (note the difference between the &#039;name&#039; and &#039;shortname&#039; fields):&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = three&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1974</id>
		<title>Test Configuration</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Test_Configuration&amp;diff=1974"/>
		<updated>2009-03-09T15:48:38Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Weird Cartesian Product KVM Test Config File Format (TWCPKVMTCFF) =&lt;br /&gt;
&lt;br /&gt;
This is the format used by test configuration files in kvm_runtest_2. It was designed to meet several requirements:&lt;br /&gt;
* Support for quick definition of multiple test scenarios (drive format, ACPI support, SMP configuration and other QEMU params) for all guests and tests&lt;br /&gt;
* Support for exceptions applying to specific guests/tests/scenarios&lt;br /&gt;
* Support for dependencies between tests&lt;br /&gt;
* Unification of the various config files currently used into a single (hopefully simple) framework&lt;br /&gt;
&lt;br /&gt;
== General Description ==&lt;br /&gt;
&lt;br /&gt;
* The parser relies on indentation.&lt;br /&gt;
* The parser produces a list of dictionaries (dicts). Each dictionary contains a set of key-value pairs.&lt;br /&gt;
* Each dict contains at least three keys: &#039;name&#039;, &#039;shortname&#039; and &#039;depend&#039;. The values of &#039;name&#039; and &#039;shortname&#039; are strings, and the value of &#039;depend&#039; is a list of strings.&lt;br /&gt;
* A list of dictionaries will henceforth be referred to as a frame.&lt;br /&gt;
* The initial frame contains a single dict, whose &#039;name&#039; and &#039;shortname&#039; are empty strings, and whose &#039;depend&#039; is an empty list.&lt;br /&gt;
* Parsing dict contents:&lt;br /&gt;
** The dict parser operates on a frame, which will henceforth be referred to as the current frame.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; = &amp;lt;value&amp;gt;&#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; += &amp;lt;value&amp;gt;&#039; appends &amp;lt;value&amp;gt; to the value of &amp;lt;key&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; &amp;lt;= &amp;lt;value&amp;gt;&#039; pre-pends &amp;lt;value&amp;gt; to the value of &amp;lt;key&amp;gt; in all dicts of the current frame. If a dict lacks &amp;lt;key&amp;gt;, it will be created.&lt;br /&gt;
** A statement of the form &#039;&amp;lt;key&amp;gt; ?= &amp;lt;value&amp;gt;&#039; sets the value of &amp;lt;key&amp;gt; to &amp;lt;value&amp;gt;, in all dicts of the current frame, but only if &amp;lt;key&amp;gt; exists in the dict. The operators ?+= and ?&amp;lt;= are also supported.&lt;br /&gt;
** A statement of the form &#039;no &amp;lt;regex&amp;gt;&#039; removes from the current frame all dicts whose &#039;name&#039; field matches &amp;lt;regex&amp;gt;.&lt;br /&gt;
 * A statement of the form &#039;only &amp;lt;regex&amp;gt;&#039; removes from the current frame all dicts whose &#039;name&#039; field does not match &amp;lt;regex&amp;gt;.&lt;br /&gt;
* Parsing &#039;variants&#039;:&lt;br /&gt;
** A &#039;variants&#039; block is opened by a &#039;variants:&#039; statement. The contents of the block should follow the &#039;variants:&#039; line and should be indented.&lt;br /&gt;
** A line in a &#039;variants&#039; block should be of the format &#039;- &amp;lt;variant_name&amp;gt;:&#039;. The contents of this variant should be specified following that line, and should be indented. The contents are parsed by the dict parser described above; they may be of the format &#039;&amp;lt;key&amp;gt; &amp;lt;op&amp;gt; &amp;lt;value&amp;gt;&#039;. They may also contain &#039;variants:&#039; statements, or whatever the dict parser recognizes.&lt;br /&gt;
** Each variant in a &#039;variants&#039; block inherits a copy of the frame in which the &#039;variants:&#039; statement appears. The &#039;current frame&#039;, which may be modified by the dict parser, becomes this copy.&lt;br /&gt;
** The name of the variant (specified in the line &#039;- &amp;lt;variant_name&amp;gt;:&#039;) is pre-pended to the &#039;name&#039; field of each dict of the variant&#039;s frame, along with a separator dot (&#039;.&#039;).&lt;br /&gt;
** If the name of the variant is not preceeded by a &#039;@&#039; (i.e. &#039;- @&amp;lt;variant_name&amp;gt;:&#039;), it is pre-pended to the &#039;shortname&#039; field of each dict of the variant&#039;s frame. In other words, if a variant&#039;s name is preceeded by a &#039;@&#039;, it is omitted from the &#039;shortname&#039; field.&lt;br /&gt;
** The frames of the variants defined in the &#039;variants&#039; block are joined into a single frame which replaces the frame in which the &#039;variants:&#039; statement appears.&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
&lt;br /&gt;
=== A single dictionary ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list of dictionaries (a single dictionary):&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = &lt;br /&gt;
    shortname =&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Adding a &#039;variants&#039; block ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
    - two:&lt;br /&gt;
    - three:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Modifying dictionaries inside a variant ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two:&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Adding dependencies ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = one&lt;br /&gt;
    shortname = one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&#039;one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = [&#039;one&#039;, &#039;two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = three&lt;br /&gt;
    shortname = three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Multiple &#039;variants&#039; blocks ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - A:&lt;br /&gt;
    - B:&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.one&lt;br /&gt;
    shortname = A.one&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = A.two&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = A.three&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #4:&lt;br /&gt;
    depend = [&#039;B.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.two&lt;br /&gt;
    shortname = B.two&lt;br /&gt;
Dictionary #5:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Using &#039;no&#039; and &#039;only&#039; ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - A:&lt;br /&gt;
        no one&lt;br /&gt;
    - B:&lt;br /&gt;
        only one|three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = A.two&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = A.three&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
=== Using &#039;@&#039; ===&lt;br /&gt;
&lt;br /&gt;
The following file:&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
key1 = value1&lt;br /&gt;
key2 = value2&lt;br /&gt;
key3 = value3&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - one:&lt;br /&gt;
        key1 = Hello World&lt;br /&gt;
        key2 &amp;lt;= some_prefix_&lt;br /&gt;
    - two: one&lt;br /&gt;
        key2 &amp;lt;= another_prefix_&lt;br /&gt;
    - three: one two&lt;br /&gt;
&lt;br /&gt;
variants:&lt;br /&gt;
    - @A:&lt;br /&gt;
        no one&lt;br /&gt;
    - B:&lt;br /&gt;
        only one|three&lt;br /&gt;
}}}&lt;br /&gt;
&lt;br /&gt;
results in the following list (note the difference between the &#039;name&#039; and &#039;shortname&#039; fields):&lt;br /&gt;
&lt;br /&gt;
{{{&lt;br /&gt;
Dictionary #0:&lt;br /&gt;
    depend = [&#039;A.one&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = another_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.two&lt;br /&gt;
    shortname = two&lt;br /&gt;
Dictionary #1:&lt;br /&gt;
    depend = [&#039;A.one&#039;, &#039;A.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = A.three&lt;br /&gt;
    shortname = three&lt;br /&gt;
Dictionary #2:&lt;br /&gt;
    depend = []&lt;br /&gt;
    key1 = Hello World&lt;br /&gt;
    key2 = some_prefix_value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.one&lt;br /&gt;
    shortname = B.one&lt;br /&gt;
Dictionary #3:&lt;br /&gt;
    depend = [&#039;B.one&#039;, &#039;B.two&#039;]&lt;br /&gt;
    key1 = value1&lt;br /&gt;
    key2 = value2&lt;br /&gt;
    key3 = value3&lt;br /&gt;
    name = B.three&lt;br /&gt;
    shortname = B.three&lt;br /&gt;
}}}&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=Test_Cases&amp;diff=1973</id>
		<title>Test Cases</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=Test_Cases&amp;diff=1973"/>
		<updated>2009-03-09T15:41:47Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== KVM Autotest Available Test Cases ==&lt;br /&gt;
{|border=1&lt;br /&gt;
| &#039;&#039;&#039;Test Case&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;Description&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| kvm_install &lt;br /&gt;
|   &lt;br /&gt;
|-&lt;br /&gt;
| fetch_kvm_version &lt;br /&gt;
|   &lt;br /&gt;
|-&lt;br /&gt;
| kvm_boot &lt;br /&gt;
|   &lt;br /&gt;
|-&lt;br /&gt;
| kvm_reboot &lt;br /&gt;
|   &lt;br /&gt;
|-&lt;br /&gt;
| kvm_migration &lt;br /&gt;
|   &lt;br /&gt;
|-&lt;br /&gt;
| kvm_guest autotest suite &lt;br /&gt;
|   &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1972</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1972"/>
		<updated>2009-03-09T15:36:07Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
* To verify KVM stability&lt;br /&gt;
* Easy to use by developers that make changes to the code and want to make sure that no regression has been made&lt;br /&gt;
* Easy to use by users that want to verify the release is stable, before using it&lt;br /&gt;
* Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Installation &amp;amp; Getting Started]]&lt;br /&gt;
* [[Test Configuration]]&lt;br /&gt;
* [[Test Cases]]&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1971</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1971"/>
		<updated>2009-03-09T15:31:18Z</updated>

		<summary type="html">&lt;p&gt;Drorr: /* User Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
* To verify KVM stability&lt;br /&gt;
* Easy to use by developers that make changes to the code and want to make sure that no regression has been made.&lt;br /&gt;
* Easy to use by users that want to verify the release is stable, before using it.&lt;br /&gt;
* Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Installation &amp;amp; Getting Started]]&lt;br /&gt;
* [[Test Configuration]]&lt;br /&gt;
* [[Test Cases]]&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1970</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1970"/>
		<updated>2009-03-09T15:28:22Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
* To verify KVM stability&lt;br /&gt;
* Easy to use by developers that make changes to the code and want to make sure that no regression has been made.&lt;br /&gt;
* Easy to use by users that want to verify the release is stable, before using it.&lt;br /&gt;
* Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
&lt;br /&gt;
* Installation &amp;amp; Getting Started&lt;br /&gt;
* Test Configuration&lt;br /&gt;
* Test Cases&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1969</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1969"/>
		<updated>2009-03-09T15:27:53Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== KVM Autotest ==&lt;br /&gt;
&lt;br /&gt;
The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
* To verify KVM stability&lt;br /&gt;
* Easy to use by developers that make changes to the code and want to make sure that no regression has been made.&lt;br /&gt;
* Easy to use by users that want to verify the release is stable, before using it.&lt;br /&gt;
* Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== KVM Autotest User Documentation ==&lt;br /&gt;
&lt;br /&gt;
* Installation &amp;amp; Getting Started&lt;br /&gt;
* Test Configuration&lt;br /&gt;
* Test Cases&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1968</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1968"/>
		<updated>2009-03-09T15:27:35Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== KVM Autotest ==&lt;br /&gt;
&lt;br /&gt;
The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
* To verify KVM stability&lt;br /&gt;
* Easy to use by developers that make changes to the code and want to make sure that no regression has been made.&lt;br /&gt;
* Easy to use by users that want to verify the release is stable, before using it.&lt;br /&gt;
* Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== KVM Autotest User Documentation ==&lt;br /&gt;
&lt;br /&gt;
* Installation &amp;amp; Getting Started]&lt;br /&gt;
* Test Configuration]&lt;br /&gt;
* Test Cases]&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1967</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1967"/>
		<updated>2009-03-09T15:26:16Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== KVM Autotest ==&lt;br /&gt;
&lt;br /&gt;
The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
* To verify KVM stability&lt;br /&gt;
* Easy to use by developers that make changes to the code and want to make sure that no regression has been made.&lt;br /&gt;
* Easy to use by users that want to verify the release is stable, before using it.&lt;br /&gt;
* Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Installation &amp;amp; Getting Started]&lt;br /&gt;
* Test Configuration]&lt;br /&gt;
* Test Cases]&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
	<entry>
		<id>https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1966</id>
		<title>KVM Autotest</title>
		<link rel="alternate" type="text/html" href="https://linux-kvm.org/index.php?title=KVM_Autotest&amp;diff=1966"/>
		<updated>2009-03-09T15:19:21Z</updated>

		<summary type="html">&lt;p&gt;Drorr: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The KVM automated regression testing environment is based on [http://test.kernel.org/autotest/ autotest] framework.&lt;br /&gt;
The purpose:&lt;br /&gt;
 i. To verify KVM stability&lt;br /&gt;
 i. Easy to use by developers that make changes to the code and want to make sure that no regression has been made.&lt;br /&gt;
 i. Easy to use by users that want to verify the release is stable, before using it.&lt;br /&gt;
 i. Collaborate and share kvm test results&lt;br /&gt;
&lt;br /&gt;
== User Documentation ==&lt;br /&gt;
&lt;br /&gt;
 * [wiki:/KvmAutotestGettingStarted Installation &amp;amp; Getting Started]&lt;br /&gt;
 * [wiki:/KvmAutotestConfig Test Configuration]&lt;br /&gt;
 * [wiki:/KvmAutotestTestCases Test Cases]&lt;/div&gt;</summary>
		<author><name>Drorr</name></author>
	</entry>
</feed>