<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.meego.com/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.meego.com/index.php?title=Special:Contributions/Villen&amp;feed=atom&amp;limit=50&amp;target=Villen&amp;year=&amp;month=</id>
		<title>MeeGo wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.meego.com/index.php?title=Special:Contributions/Villen&amp;feed=atom&amp;limit=50&amp;target=Villen&amp;year=&amp;month="/>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Special:Contributions/Villen"/>
		<updated>2013-05-20T04:57:57Z</updated>
		<subtitle>From MeeGo wiki</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Installation_rpm</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Installation rpm</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Installation_rpm"/>
				<updated>2011-11-23T08:30:19Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Preparation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS 0.8.x installation RPM =&lt;br /&gt;
&lt;br /&gt;
These instructions have been tested with Fedora 13. Execute commands as root.&lt;br /&gt;
&lt;br /&gt;
In MeeGo netbook, at least following packages needs to be installed manually:&lt;br /&gt;
 python-amqp, python-django, minixsv, rabbitmq-server&lt;br /&gt;
&lt;br /&gt;
== Network Setup ==&lt;br /&gt;
&lt;br /&gt;
Using static IP addresses on all OTS machines is strongly recommended. It is possible to setup the system also with dynamic IP addresses but it might cause problems every now and then because IP's and hostnames change.&lt;br /&gt;
&lt;br /&gt;
'''Note''' All OTS machines need to be able to access other OTS machines based on their hostname.&lt;br /&gt;
&lt;br /&gt;
How to check that DNS names are correct:&lt;br /&gt;
&lt;br /&gt;
1. Check OTS server's hostname&lt;br /&gt;
 hostname&lt;br /&gt;
2. Ping the OTS server's hostname from the OTS worker&lt;br /&gt;
 ping &amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ping fails, add manually OTS server's hostname to OTS workers '''/etc/hosts''' file&lt;br /&gt;
 &amp;lt;IP&amp;gt; &amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of getting OTS binary packages: from '''the source code'''&lt;br /&gt;
or from the '''MeeGo Tools:Testing repository'''. From the repository you can get&lt;br /&gt;
the stable version and from the source code the development version.&lt;br /&gt;
&lt;br /&gt;
* Add Tools:Testing source to /etc/yum.repos.d/&lt;br /&gt;
 cd /etc/yum.repos.d/&lt;br /&gt;
 yum install wget nano&lt;br /&gt;
 wget http://download.meego.com/live/Tools:/Testing/Fedora13/Tools:Testing.repo&lt;br /&gt;
&lt;br /&gt;
* Update the repositories&lt;br /&gt;
 yum check-update&lt;br /&gt;
&lt;br /&gt;
'''Build packages from source (optional)'''&lt;br /&gt;
* Install git core&lt;br /&gt;
 yum install git-core&lt;br /&gt;
&lt;br /&gt;
* Get sources&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/ots.git&lt;br /&gt;
&lt;br /&gt;
* List tags&lt;br /&gt;
 git tag -l&lt;br /&gt;
&lt;br /&gt;
* Checkout the latest tag&lt;br /&gt;
 git checkout &amp;lt;tag_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Get building tools&lt;br /&gt;
 yum install rpm-build python-setuptools&lt;br /&gt;
&lt;br /&gt;
* Build packages&lt;br /&gt;
 mv ots python-ots-0.8.x&lt;br /&gt;
 tar czf python-ots-0.8.x.tar.gz python-ots-0.8.x&lt;br /&gt;
 rpmbuild -tb python-ots-0.8.x.tar.gz&lt;br /&gt;
&lt;br /&gt;
== OTS server installation ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 yum install Django python-amqplib python-configobj rabbitmq-server test-definition&lt;br /&gt;
 easy_install minixsv&lt;br /&gt;
 yum install python-setuptools&lt;br /&gt;
&lt;br /&gt;
* Install OTS server components&lt;br /&gt;
 yum install python-ots-common python-ots-results python-ots-server&lt;br /&gt;
or if you are using own built packages&lt;br /&gt;
 rpm -i ...&lt;br /&gt;
&lt;br /&gt;
* Add rabbitmq to start on boot&lt;br /&gt;
 chkconfig --add rabbitmq-server&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
&lt;br /&gt;
* Start rabbitmq server&lt;br /&gt;
 /etc/init.d/rabbitmq-server start&lt;br /&gt;
&lt;br /&gt;
* Configure OTS server settings&lt;br /&gt;
 sudo nano /etc/ots/server.conf&lt;br /&gt;
&lt;br /&gt;
Recommended to change following:&lt;br /&gt;
 'example_sw_product', example to 'meego_product'&lt;br /&gt;
 'devicegroup', example to 'meego_n900'&lt;br /&gt;
&lt;br /&gt;
* Install OTS server plug-ins&lt;br /&gt;
&lt;br /&gt;
See plug-ins from [[Quality/QA-tools/OTS/Plugins|OTS Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
* Start OTS server&lt;br /&gt;
 ots_server&lt;br /&gt;
&lt;br /&gt;
== OTS worker installation ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 yum install python-amqplib testrunner-lite&lt;br /&gt;
&lt;br /&gt;
* Install OTS worker packages&lt;br /&gt;
 yum install python-ots-common python-ots-worker&lt;br /&gt;
&lt;br /&gt;
* Configure OTS worker settings&lt;br /&gt;
 sudo nano /etc/ots/worker.conf&lt;br /&gt;
&lt;br /&gt;
Change 'devicegroup', example meego_n900&lt;br /&gt;
&lt;br /&gt;
Change 'host' to server's address&lt;br /&gt;
&lt;br /&gt;
* Start OTS worker (as root)&lt;br /&gt;
 ots_worker&lt;br /&gt;
&lt;br /&gt;
NOTE: if worker failed to start up with error like &amp;quot;socket.error: [Errno 113] No route to host&amp;quot;, check that ots-worker is able to connect to ots-server&lt;br /&gt;
&lt;br /&gt;
== OTS tools ==&lt;br /&gt;
&lt;br /&gt;
Tools are used for triggering test runs from the command line.&lt;br /&gt;
&lt;br /&gt;
* Install OTS tools&lt;br /&gt;
 yum install python-ots-tools&lt;br /&gt;
&lt;br /&gt;
* Trigger a test run&lt;br /&gt;
 ots_trigger -s localhost:8080 -b test_build -i http://url_to_image -p example_sw_product -e test@man.com&lt;br /&gt;
&lt;br /&gt;
* Kickstart file for automation can be found from&lt;br /&gt;
 http://meego.gitorious.org/meego-quality-assurance/enables-automated-testing/blobs/ks/meego-n900-autotest.ks&lt;br /&gt;
&lt;br /&gt;
* You need to build the image with mic-image-creator with parameters:&lt;br /&gt;
 --save-kernel --package=tar.gz&lt;br /&gt;
&lt;br /&gt;
== How to install N900 automation tools to OTS worker ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 yum install meego-ai-flaster eat-host&lt;br /&gt;
 &lt;br /&gt;
* Get N900 flasher from the Nokia's tablets-dev portal&lt;br /&gt;
 http://tablets-dev.nokia.com/maemo-dev-env-downloads.php?f=maemo_flasher-3.5_2.5.2.2.tar.gz&lt;br /&gt;
 Compile the flasher&lt;br /&gt;
&lt;br /&gt;
* Configure conductor to use rpm and fetch /var/log/messages&lt;br /&gt;
 sudo nano /etc/ots/conductor.conf&lt;br /&gt;
&lt;br /&gt;
* Test manually that everything is OK, this is executed in the worker&lt;br /&gt;
 sudo conductor -u &amp;lt;image url&amp;gt;&lt;br /&gt;
* Start OTS worker&lt;br /&gt;
 sudo ots_worker&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/Commands</id>
		<title>Quality/QA-tools/OTS/Plugins/Commands</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/Commands"/>
				<updated>2011-11-18T08:33:27Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: Created page with &amp;quot;= Commands plug-in =  Released in OTS 0.8.11.  == Installation ==  Installation is made to OTS worker.  1. Install plug-in package  sudo apt-get install python-ots-plugin-conduct...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Commands plug-in =&lt;br /&gt;
&lt;br /&gt;
Released in OTS 0.8.11.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Installation is made to OTS worker.&lt;br /&gt;
&lt;br /&gt;
1. Install plug-in package&lt;br /&gt;
 sudo apt-get install python-ots-plugin-conductor-commands&lt;br /&gt;
On Fedora&lt;br /&gt;
 sudo yum install python-ots-plugin-conductor-commands&lt;br /&gt;
&lt;br /&gt;
2. Configure commands plug-in settings&lt;br /&gt;
 sudo nano /etc/ots/plugins/conductor_commands.conf&lt;br /&gt;
&lt;br /&gt;
5. Restart OTS worker&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/DeveloperDocs/Plugins</id>
		<title>Quality/QA-tools/OTS/DeveloperDocs/Plugins</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/DeveloperDocs/Plugins"/>
				<updated>2011-11-18T08:24:13Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Conductor Plugins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Plugins =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
OTS currently consists of two distributed '''Applications''':&lt;br /&gt;
&lt;br /&gt;
* Worker&lt;br /&gt;
&lt;br /&gt;
* Server &lt;br /&gt;
&lt;br /&gt;
These Applications are made up of '''Components'''. The '''Components''' perform a specific task in the system (and are distributable in their own right).&lt;br /&gt;
&lt;br /&gt;
Some of the '''Components''' are essential for the '''Applications''' to operate. The '''Plugins''' are the non-essential (pluggable!) '''Components'''.&lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
OTS allows for a configurable distribution by using a plug-in mechanism using [http://peak.telecommunity.com/DevCenter/PkgResources Package Resources]&lt;br /&gt;
&lt;br /&gt;
== Supported Plugins ==&lt;br /&gt;
&lt;br /&gt;
Some of the plug-ins are requiring [[Quality/QA-tools/OTS/Plugins/Django|Django environment]]. This is mentioned in the plug-ins instructions.&lt;br /&gt;
&lt;br /&gt;
=== Distribution Model Plugins ===&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''Name'''||'''Entry point'''||'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|[[Quality/QA-tools/OTS/Plugins/History|History]]|| ots.plugin.history.distribution_model:get_model || Test package distribution model based on last execution time&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Publisher Plugins ===&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''Name'''||'''Entry point'''||'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|[[Quality/QA-tools/OTS/Plugins/HTTP_logger|HTTP Logger]]|| ots.plugin.logger.logger_plugin:LoggerPlugin || Plug-in for enabling HTTP based logging and monitoring&lt;br /&gt;
|-&lt;br /&gt;
|[[Quality/QA-tools/OTS/Plugins/Email|Email]]|| ots.plugin.email.email_plugin:EmailPlugin || Plug-in for enabling email sending&lt;br /&gt;
|-&lt;br /&gt;
|[[Quality/QA-tools/OTS/Plugins/QAReports|QA-Reports]]|| ots.plugin.qareports.qareports_plugin:QAReportsPlugin || Plug-in for sending results to QA Reports&lt;br /&gt;
|-&lt;br /&gt;
|[[Quality/QA-tools/OTS/Plugins/History|History]]|| ots.plugin.history.history_plugin:HistoryPlugin || Plug-in for storing execution times to database&lt;br /&gt;
|-&lt;br /&gt;
|[[Quality/QA-tools/OTS/Plugins/Monitor|Monitor]]|| ots.plugin.monitor.monitor_plugin:MonitorPlugin || Plug-in for collecting statistical information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Conductor Plugins ===&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|'''Name'''||'''Entry point'''||'''Purpose'''&lt;br /&gt;
|-&lt;br /&gt;
|[[Quality/QA-tools/OTS/Plugins/Rich-core|Rich-core]]|| ots.plugin.conductor.richcore.richcore_plugin:RichCorePlugin || Plug-in for uploading rich-core dumps to post-processing. Rich-core plug-in is part of [[ARM/N900/QA#Crash_analysis_support_for_ARM_core_dumps|crash reporting functionality]].&lt;br /&gt;
|-&lt;br /&gt;
|[[Quality/QA-tools/OTS/Plugins/Commands|Commands]]|| ots.plugin.conductor.commands.commands_plugin:CommandsPlugin || Plug-in for running commands before, in between and after test packages.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS</id>
		<title>Quality/QA-tools/OTS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS"/>
				<updated>2011-11-09T07:28:50Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS Index =&lt;br /&gt;
&lt;br /&gt;
Welcome to the Open Test System (OTS) Wiki Index.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
OTS is the '''Open Test System''' for testing software systems on evolving hardware architectures.&lt;br /&gt;
  &lt;br /&gt;
It was born out of the test framework incrementally developed for use on [http://maemo.org/ Maemo] project and is in use for 24/7 testing service by [http://www.nokia.com/ Nokia].&lt;br /&gt;
&lt;br /&gt;
More detailed info can be found from [[Quality/QA-tools/OTS/About|about]] page.&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
Current release [http://meego.gitorious.org/meego-quality-assurance/ots tag 0.8.10]. See [[Quality/QA-tools/OTS/UserDocumentation/Upgrading|upgrading]] instructions!&lt;br /&gt;
&lt;br /&gt;
Next release [http://bugs.meego.com/show_bug.cgi?id=23933 0.8.11]&lt;br /&gt;
&lt;br /&gt;
See OTS [[Quality/QA-tools/OTS/Roadmap| roadmap.]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/UserDocumentation | User Documentation]]&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Installation | Installation Ubuntu]]&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Installation_rpm | Installation RPM]]&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Upgrading | Upgrading]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs | Developer Documentation]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/AdminDocs | System Administration]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/Glossary | Glossary]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/ExampleSetup | Example OTS Service Setup]]&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Upgrading</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading"/>
				<updated>2011-11-09T07:26:49Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Upgrading OTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Upgrading OTS =&lt;br /&gt;
== 0.8.9 - 0.8.10 ==&lt;br /&gt;
New conductor configuration parameter 'remote_logger'. Add it to existing conductor configuration files (/etc/ots/conductor.conf and /et/ots/conductor_*.conf) or replace old file(s) with new one. 'remote_logger' allows one to use amqp as logging channel instead of http. Currently http is the default logging method.&lt;br /&gt;
&lt;br /&gt;
== 0.8.8 - 0.8.9 ==&lt;br /&gt;
Upgrade to meego-ai-flasher 0.1.8, older versions doesn't work with OTS 0.8.9.&lt;br /&gt;
&lt;br /&gt;
== 0.8.7 - 0.8.8 ==&lt;br /&gt;
New conductor configuration parameter 'target_username'. Add it to existing conductor configuration files (/etc/ots/conductor.conf and /etc/ots/conductor_*.conf) or replace old file(s) with new one.&lt;br /&gt;
&lt;br /&gt;
== 0.8.6 - 0.8.7 ==&lt;br /&gt;
Locations and names of configuration files have been changed. All configuration files are now located in /etc/ots and the plugin configuration files are in /etc/ots/plugins.&lt;br /&gt;
&lt;br /&gt;
If you wish to keep your old settings you have to replace the new files.&lt;br /&gt;
On the server side:&lt;br /&gt;
 sudo mv /etc/ots_server.ini /etc/ots/server.conf&lt;br /&gt;
 sudo mv /etc/ots_plugin_qareports.conf /etc/ots/plugins/qareports.conf&lt;br /&gt;
And email plugin has it's own configuration file so you should move the [ots.email_plugin] section from the old /etc/ots_server.ini file to /etc/ots/plugins/email.conf.&lt;br /&gt;
&lt;br /&gt;
On the worker side:&lt;br /&gt;
 sudo mv /etc/ots.ini /etc/ots/worker.conf&lt;br /&gt;
 sudo mv /etc/conductor.conf /etc/ots/conductor.conf&lt;br /&gt;
 sudo mv /etc/ots_plugin_conductor_richcore.conf /etc/ots/plugins/conductor_richcore.conf&lt;br /&gt;
&lt;br /&gt;
== 0.8.5 - 0.8.6 ==&lt;br /&gt;
Backup all configuration files and database before upgrading.&lt;br /&gt;
&lt;br /&gt;
If you have logger plugin installed update the templates by giving following commands after upgrade:&lt;br /&gt;
 sudo cp -r /usr/share/ots/django/* /var/www/&lt;br /&gt;
 sudo cp -r /usr/share/ots/plugin/* /var/www/&lt;br /&gt;
&lt;br /&gt;
Upgrade also the latest meego-ai-flasher.&lt;br /&gt;
&lt;br /&gt;
=== Updating the database ===&lt;br /&gt;
&lt;br /&gt;
If you want to keep your old log database, add new (user_defined_id) column to the log_messages table. Run database command line interface for OTS database. By default OTS uses sqlite database at /opt/ots/ots.sqlite.&lt;br /&gt;
 sudo sqlite3 /opt/ots/ots.sqlite&lt;br /&gt;
Add new column to the log_messages table by executing following command:&lt;br /&gt;
 ALTER TABLE log_messages ADD COLUMN user_defined_id varchar(255) NOT NULL DEFAULT &amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
If there's no need to keep the old database you can remove the database file (/opt/ots/ots.sqlite) and generate a new one using [[Quality/QA-tools/OTS/Plugins/Django#Create.2Fupdate_databases|the instructions]].&lt;br /&gt;
&lt;br /&gt;
== 0.8.4 - 0.8.5 ==&lt;br /&gt;
* Rich-core conductor plug-in available&lt;br /&gt;
** Changes to /etc/conductor.conf &lt;br /&gt;
** New configuration file for plug-in: /etc/ots_plugin_conductor_richcore.conf&lt;br /&gt;
&lt;br /&gt;
== 0.8.3 - 0.8.4 ==&lt;br /&gt;
* Backup all configuration files before updating&lt;br /&gt;
* Multiple device support added, even if you use '''only one device''' check following:&lt;br /&gt;
** Changes to /etc/conductor.conf&lt;br /&gt;
** Update meego-ai-flasher (&amp;gt;= 0.1.4) and [http://meego-qa-tools.digia.com/meego-ai/meego-ai-optimized.tar.gz meego-ai] packages!&lt;br /&gt;
** Even if you use only one device, remove usb0 configurations from /etc/network/interfaces&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Multiple_device| See this instructions!]]&lt;br /&gt;
* Changes to QAReports configuration file /etc/ots_plugins_qareports.conf&lt;br /&gt;
** Added proxy and attachment upload settings&lt;br /&gt;
&lt;br /&gt;
== 0.8.2 - 0.8.3 ==&lt;br /&gt;
* Changes in ots_plugin_qareports.conf&lt;br /&gt;
** Add new parameters&lt;br /&gt;
* Only new features&lt;br /&gt;
** Test plan based execution&lt;br /&gt;
** Chroot support&lt;br /&gt;
** See [[Quality/QA-tools/OTS/UserDocumentation/Usage|how to]] use these features&lt;br /&gt;
&lt;br /&gt;
== 0.8.1 - 0.8.2 ==&lt;br /&gt;
* New django package added, effects to all plug-ins&lt;br /&gt;
** See [[Quality/QA-tools/OTS/Plugins/Django|Django instructions]].&lt;br /&gt;
** See [[Quality/QA-tools/OTS/DeveloperDocs/Plugins|plug-ins instructions]].&lt;br /&gt;
&lt;br /&gt;
== 0.8.0 - 0.8.1 ==&lt;br /&gt;
* Plug-in namespace changed, effects to Logger and QA-Reports plug-ins&lt;br /&gt;
** For logger update web page content, see step 8 from [[Quality/QA-tools/OTS/Plugins/HTTP_logger|Logger documentation]].&lt;br /&gt;
** For QA-Reports, configuration file name has changed. Move /etc/ots_qareports_plugin.conf to /etc/ots_plugin_qareports.conf&lt;br /&gt;
&lt;br /&gt;
== 0.1.x - 0.8.0 ==&lt;br /&gt;
&lt;br /&gt;
See [[Quality/QA-tools/OTS/UserDocumentation/Migration_0.1_0.8| migration document]].&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Usage</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Usage</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Usage"/>
				<updated>2011-07-12T11:06:35Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Using OTS trigger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS Usage =&lt;br /&gt;
&lt;br /&gt;
== Test execution ==&lt;br /&gt;
&lt;br /&gt;
=== Using conductor ===&lt;br /&gt;
&lt;br /&gt;
Conductor is the executer in the ots-worker. You can use conductor to test device flashing and for semi-automatic test executions.&lt;br /&gt;
&lt;br /&gt;
To test flashing and basic test execution:&lt;br /&gt;
 conductor --imageurl=http://192.168.1.1/image.tar.gz &lt;br /&gt;
&lt;br /&gt;
The conductor flasher the image to the device and executes all available test packages.&lt;br /&gt;
&lt;br /&gt;
To list all supported options:&lt;br /&gt;
 conductor --help&lt;br /&gt;
&lt;br /&gt;
=== Using OTS trigger ===&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Before starting to execute tests with ots_trigger, verify that your ots-worker is configured correctly. That can be done with conductor, see the topic above.&lt;br /&gt;
&lt;br /&gt;
OTS trigger is tool for triggering a testrun to OTS server.&lt;br /&gt;
&lt;br /&gt;
[[Quality/QA-tools/OTS/UserDocumentation/Installation#OTS_tools| How to install OTS trigger]].&lt;br /&gt;
&lt;br /&gt;
Before you can trigger a testrun, you need to have all following:&lt;br /&gt;
* OTS server up-and-running [http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation#Installation]&lt;br /&gt;
* OTS worker with hardware configured [http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation#Installation]&lt;br /&gt;
* Image with eat-device package (enabled test automation environment to hardware) [http://wiki.meego.com/Quality/QA-tools/Autotest-guide]&lt;br /&gt;
&lt;br /&gt;
And one of the following options:&lt;br /&gt;
* Test package installed to the device&lt;br /&gt;
* Test package installed to the ots-worker or&lt;br /&gt;
* Test plan [TODO LINK]&lt;br /&gt;
&lt;br /&gt;
Okey, now we are ready to get dirty. &lt;br /&gt;
&lt;br /&gt;
If we have test package(s) installed into the device and we want to execute all of them:&lt;br /&gt;
 ots_trigger --server=192.168.1.1/xmlrpc --build_id=nightly_testing --image=http://url.to.image/image.tar.gz --sw_product=meego_n900 \&lt;br /&gt;
 --email=my.name@company.com&lt;br /&gt;
&lt;br /&gt;
Let me explain the parameters.&lt;br /&gt;
* '''server''': Defines the address of the OTS server. If you are not using logger plug-in, the address is then 192.168.1.1:8080.&lt;br /&gt;
* '''build_id''': Free string to define the image build id.&lt;br /&gt;
* '''image''': Url path where the image is located. Yes, it must be on the http server.&lt;br /&gt;
* '''sw_product''': The default SW test execution options, you have defined the sw_product in /etc/ots/server.conf.&lt;br /&gt;
* '''email''': Who has requested the testrun and to whom to send notifications.&lt;br /&gt;
&lt;br /&gt;
That was simple. Next you want to execute only one package, no problem, just define test package name to OTS trigger:&lt;br /&gt;
 ots_trigger --server=192.168.1.1/xmlrpc --build_id=nightly_testing --image=http://url.to.image/image.tar.gz --sw_product=meego_n900 \&lt;br /&gt;
 --email=my.name@company.com --testpackages=my-test-package1-tests&lt;br /&gt;
&lt;br /&gt;
In to the '''testpackages''' option, you can define multiple packages like this:&lt;br /&gt;
 --testpackages=my-test-package1-tests,my-test-package2-tests&lt;br /&gt;
&lt;br /&gt;
If you want to add more people to receive email after the execution is done, just add more email addresses to --email option:&lt;br /&gt;
 ots_trigger --server=192.168.1.1/xmlrpc --build_id=nightly_testing --image=http://url.to.image/image.tar.gz --sw_product=meego_n900 \&lt;br /&gt;
 --email=my.name@company.com,second.name@company.com&lt;br /&gt;
&lt;br /&gt;
If you have test package installed to your ots-worker machine, that can be executed with --hostpackages:&lt;br /&gt;
 ots_trigger --server=192.168.1.1/xmlrpc --build_id=nightly_testing --image=http://url.to.image/image.tar.gz --sw_product=meego_n900 \&lt;br /&gt;
 --email=my.name@company.com --hostpackages=my-test-package1-tests&lt;br /&gt;
&lt;br /&gt;
For optimizing the execution time, see distribution models section below.&lt;br /&gt;
&lt;br /&gt;
To list all supported options:&lt;br /&gt;
 ots_trigger --help&lt;br /&gt;
&lt;br /&gt;
== Test plan based executions ==&lt;br /&gt;
&lt;br /&gt;
Test plan based execution means that the user can create a test plan and give it directly to ots_trigger without making any test package. This brings benefits when executing different test against the same test image or release.&lt;br /&gt;
&lt;br /&gt;
The user can create the test plan with [http://wiki.meego.com/Quality/QA-tools/Testplanner Testplanner].&lt;br /&gt;
&lt;br /&gt;
And then give the test plan to ots_trigger with --deviceplan or --hostplan. Difference between these options are that 'deviceplan' is executed in the device and 'hostplan' in the ots-worker.&lt;br /&gt;
 ots_trigger --server=192.168.1.1/xmlrpc --build_id=nightly_testing --image=http://url.to.image/image.tar.gz --sw_product=meego_n900 \&lt;br /&gt;
 --email=my.name@company.com --deviceplan=/path/to/my/test_plan.xml&lt;br /&gt;
&lt;br /&gt;
== Distribution models ==&lt;br /&gt;
&lt;br /&gt;
These are models how the OTS is distributing test executions to ots-workers. There are 2 build-in models and other ones are distribution model plug-ins.&lt;br /&gt;
&lt;br /&gt;
Distribution model can be specified to ots_trigger with --distribution option.&lt;br /&gt;
&lt;br /&gt;
=== Default ===&lt;br /&gt;
&lt;br /&gt;
This is the default model, if nothing else has been specified.&lt;br /&gt;
&lt;br /&gt;
Default model executes all test packages in a single task, so only one ots-worker will handle the test execution. Only exception to this model is test plan based executions, they are always executed as an own task and therefor distributed to multiple workers.&lt;br /&gt;
&lt;br /&gt;
=== Perpackage ===&lt;br /&gt;
&lt;br /&gt;
'''---distribution=perpackage'''&lt;br /&gt;
&lt;br /&gt;
Perpackage is the second build-in distribution model.&lt;br /&gt;
&lt;br /&gt;
This models creates always an own task for each test package and test plan, so multiple ots-worker can handle the testrun at the same time.&lt;br /&gt;
&lt;br /&gt;
=== Optimized ===&lt;br /&gt;
&lt;br /&gt;
'''---distribution=optimized'''&lt;br /&gt;
&lt;br /&gt;
Optimized is a distribution plug-in and it is part of history plug-in.&lt;br /&gt;
&lt;br /&gt;
History plug-in collects test package execution times to a database. When the user triggers a testrun, he/she can specify how long the execution should take and how many device can be used. The optimized model then tries to optimize the execution time to fit the user's requirements.&lt;br /&gt;
&lt;br /&gt;
See how to use the optimized plug-in from the [[Quality/QA-tools/OTS/Plugins/History|plug-in subpage]].&lt;br /&gt;
&lt;br /&gt;
== Running tests in chroot environment ==&lt;br /&gt;
&lt;br /&gt;
﻿Chroot functionality makes possible to use chroot environment with specific software to run the tests. This way a test case which needs specific software can be started at any OTS worker and a worker will stay clean of additional software. Chroot based testing is primarily targeted at executing tests with the [[Quality/QA-tools/TDriver|Testability Driver framework]].&lt;br /&gt;
&lt;br /&gt;
=== How to create rootstrap? ===&lt;br /&gt;
&lt;br /&gt;
Basically you can use any i386 chroot environment you like, but MeeGo Netbook edition is good starting point. First [[Image_Creation|create an image]] with all packages you need for testing and then unpack and compress it to a tar.gz package:&lt;br /&gt;
&lt;br /&gt;
 mic-chroot --unpack-only –save-to=&amp;lt;chroot_directory&amp;gt; &amp;lt;image&amp;gt;&lt;br /&gt;
 cd &amp;lt;chroot_directory&amp;gt;&lt;br /&gt;
 tar -Pczf ../rootstrap.tar.gz .&lt;br /&gt;
&lt;br /&gt;
Now you have a rootstrap ready in rootstrap.tar.gz file.&lt;br /&gt;
&lt;br /&gt;
=== Triggering a chroot test ===&lt;br /&gt;
&lt;br /&gt;
To trigger a chroot test you need to give two arguments for OTS trigger:&lt;br /&gt;
* --chrootpackages=&amp;lt;test_packages&amp;gt;&lt;br /&gt;
** Test packages to be executed on chroot environment&lt;br /&gt;
* --rootstrap=&amp;lt;rootstrap_file&amp;gt;&lt;br /&gt;
** The rootstrap URL&lt;br /&gt;
&lt;br /&gt;
Example like this:&lt;br /&gt;
&lt;br /&gt;
 ots_trigger --server=192.168.1.1/xmlrpc --build_id=nightly_testing --image=http://url.to.image/image.tar.gz --sw_product=meego_n900 \&lt;br /&gt;
 --chrootpackages=mwts-filesystem --rootstrap=http://url.to.rootstrap/rootstrap.tar.gz --email=my.name@company.com&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Multiple_device</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Multiple device</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Multiple_device"/>
				<updated>2011-07-12T11:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* conductor configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Multiple device support =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This feature has been added to 0.8.4 version.&lt;br /&gt;
&lt;br /&gt;
Multiple device support means that one OTS worker can handle multiple devices simultaneously and execute tests parallel. One worker can include multiple ots-worker instances and they work individually. Only limitation is amount of the switchbox ports (if using USB devices), this limitation in HAT switchbox is 2.&lt;br /&gt;
&lt;br /&gt;
'''Note!''' For MeeGo N900, you need the latest [http://meego-qa-tools.digia.com/meego-ai/meego-ai-optimized.tar.gz meego-ai] and [https://meego.gitorious.org/meego-quality-assurance/meego-ai-flasher meego-ai-flasher]!&lt;br /&gt;
&lt;br /&gt;
There is a flasher plug-in example in the OTS source code under the example folder.&lt;br /&gt;
&lt;br /&gt;
See example video from youtube: http://www.youtube.com/watch?v=exmJ6T-fjlM&lt;br /&gt;
&lt;br /&gt;
== Setup and configuration ==&lt;br /&gt;
&lt;br /&gt;
This guideline assumes that you have HAT switchbox and two N900 devices.&lt;br /&gt;
&lt;br /&gt;
Install OTS worker normally, [[Quality/QA-tools/OTS/UserDocumentation|check installation guidelines]].&lt;br /&gt;
&lt;br /&gt;
Remove the '''network-manager''' and remove all usb* settings from the '''/etc/network/interfaces'''.&lt;br /&gt;
&lt;br /&gt;
=== Wiring ===&lt;br /&gt;
&lt;br /&gt;
[[File:20110414_002.jpg]]&lt;br /&gt;
&lt;br /&gt;
You need one HAT, two N900 devices and lots of cables:&lt;br /&gt;
* 3 x USB A-B cables from the PC to HAT&lt;br /&gt;
* 1 x Power cable to HAT&lt;br /&gt;
* 2 x Power cable from HAT to JIGs&lt;br /&gt;
* 2 x USB A-microB cables from HAT to JIGs&lt;br /&gt;
&lt;br /&gt;
=== ots-worker configuration ===&lt;br /&gt;
&lt;br /&gt;
Basically you need to start two ots-worker programs in one PC. &lt;br /&gt;
&lt;br /&gt;
If both devices are using the same OTS server and queue, then you can use the default /etc/ots/worker.conf file. Start workers as '''root''' in different shells or screen windows:&lt;br /&gt;
 ots_worker -n 1&lt;br /&gt;
 ots_worker -n 2&lt;br /&gt;
&lt;br /&gt;
If you want to dedicated the other device to some other server or queue, create a copy from the default worker.conf file and make your changes to that. Start workers as '''root''' in different shells or screen windows:&lt;br /&gt;
 ots_worker -n 1&lt;br /&gt;
 ots_worker -n 2 -c /your/new/worker.conf&lt;br /&gt;
&lt;br /&gt;
Both workers should be able to connect to OTS server normally, check that they have different worker id:&lt;br /&gt;
 ots.worker.worker - INFO - Starting the worker 1...&lt;br /&gt;
&lt;br /&gt;
=== conductor configuration ===&lt;br /&gt;
&lt;br /&gt;
You need always own conductor.conf per device. Copy the default conductor.conf to first device:&lt;br /&gt;
 sudo cp /etc/ots/conductor.conf /etc/ots/conductor_1.conf&lt;br /&gt;
&lt;br /&gt;
And for second device:&lt;br /&gt;
 sudo cp /etc/ots/conductor.conf /etc/ots/conductor_2.conf&lt;br /&gt;
&lt;br /&gt;
The most important thing in those configuration files is to define the default flasher and IP addresses. '''You cannot use 192.168.2.15 address for testing! That is used for setting up the devices!'''&lt;br /&gt;
&lt;br /&gt;
Recommended IPs for devices:&lt;br /&gt;
* conductor_1.conf, host: 192.168.3.14, device: 192.168.3.15&lt;br /&gt;
* conductor_2.conf, host: 192.168.4.14, device: 192.168.4.15&lt;br /&gt;
&lt;br /&gt;
Test that conductors are configured correctly and flashing is working:&lt;br /&gt;
 sudo su&lt;br /&gt;
 export OTS_WORKER_NUMBER=1&lt;br /&gt;
 conductor -u http://url/to/image.bin -v&lt;br /&gt;
&lt;br /&gt;
You should see something like:&lt;br /&gt;
 ...&lt;br /&gt;
 INFO using config file /etc/ots/conductor_1.conf&lt;br /&gt;
 ...&lt;br /&gt;
 INFO Loaded flasher 'meego-ai-flasher-n900'&lt;br /&gt;
 ...&lt;br /&gt;
 INFO Host IP 192.168.3.14;Device IP 192.168.3.15&lt;br /&gt;
 ...&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Multiple_device</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Multiple device</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Multiple_device"/>
				<updated>2011-07-12T10:59:10Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* ots-worker configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Multiple device support =&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This feature has been added to 0.8.4 version.&lt;br /&gt;
&lt;br /&gt;
Multiple device support means that one OTS worker can handle multiple devices simultaneously and execute tests parallel. One worker can include multiple ots-worker instances and they work individually. Only limitation is amount of the switchbox ports (if using USB devices), this limitation in HAT switchbox is 2.&lt;br /&gt;
&lt;br /&gt;
'''Note!''' For MeeGo N900, you need the latest [http://meego-qa-tools.digia.com/meego-ai/meego-ai-optimized.tar.gz meego-ai] and [https://meego.gitorious.org/meego-quality-assurance/meego-ai-flasher meego-ai-flasher]!&lt;br /&gt;
&lt;br /&gt;
There is a flasher plug-in example in the OTS source code under the example folder.&lt;br /&gt;
&lt;br /&gt;
See example video from youtube: http://www.youtube.com/watch?v=exmJ6T-fjlM&lt;br /&gt;
&lt;br /&gt;
== Setup and configuration ==&lt;br /&gt;
&lt;br /&gt;
This guideline assumes that you have HAT switchbox and two N900 devices.&lt;br /&gt;
&lt;br /&gt;
Install OTS worker normally, [[Quality/QA-tools/OTS/UserDocumentation|check installation guidelines]].&lt;br /&gt;
&lt;br /&gt;
Remove the '''network-manager''' and remove all usb* settings from the '''/etc/network/interfaces'''.&lt;br /&gt;
&lt;br /&gt;
=== Wiring ===&lt;br /&gt;
&lt;br /&gt;
[[File:20110414_002.jpg]]&lt;br /&gt;
&lt;br /&gt;
You need one HAT, two N900 devices and lots of cables:&lt;br /&gt;
* 3 x USB A-B cables from the PC to HAT&lt;br /&gt;
* 1 x Power cable to HAT&lt;br /&gt;
* 2 x Power cable from HAT to JIGs&lt;br /&gt;
* 2 x USB A-microB cables from HAT to JIGs&lt;br /&gt;
&lt;br /&gt;
=== ots-worker configuration ===&lt;br /&gt;
&lt;br /&gt;
Basically you need to start two ots-worker programs in one PC. &lt;br /&gt;
&lt;br /&gt;
If both devices are using the same OTS server and queue, then you can use the default /etc/ots/worker.conf file. Start workers as '''root''' in different shells or screen windows:&lt;br /&gt;
 ots_worker -n 1&lt;br /&gt;
 ots_worker -n 2&lt;br /&gt;
&lt;br /&gt;
If you want to dedicated the other device to some other server or queue, create a copy from the default worker.conf file and make your changes to that. Start workers as '''root''' in different shells or screen windows:&lt;br /&gt;
 ots_worker -n 1&lt;br /&gt;
 ots_worker -n 2 -c /your/new/worker.conf&lt;br /&gt;
&lt;br /&gt;
Both workers should be able to connect to OTS server normally, check that they have different worker id:&lt;br /&gt;
 ots.worker.worker - INFO - Starting the worker 1...&lt;br /&gt;
&lt;br /&gt;
=== conductor configuration ===&lt;br /&gt;
&lt;br /&gt;
You need always own conductor.conf per device. Copy the default conductor.conf to first device:&lt;br /&gt;
 sudo cp /etc/conductor.conf /etc/conductor_1.conf&lt;br /&gt;
&lt;br /&gt;
And for second device:&lt;br /&gt;
 sudo cp /etc/conductor.conf /etc/conductor_2.conf&lt;br /&gt;
&lt;br /&gt;
The most important thing in those configuration files is to define the default flasher and IP addresses. '''You cannot use 192.168.2.15 address for testing! That is used for setting up the devices!'''&lt;br /&gt;
&lt;br /&gt;
Recommended IPs for devices:&lt;br /&gt;
* conductor_1.conf, host: 192.168.3.14, device: 192.168.3.15&lt;br /&gt;
* conductor_2.conf, host: 192.168.4.14, device: 192.168.4.15&lt;br /&gt;
&lt;br /&gt;
Test that conductors are configured correctly and flashing is working:&lt;br /&gt;
 sudo su&lt;br /&gt;
 export OTS_WORKER_NUMBER=1&lt;br /&gt;
 conductor -u http://url/to/image.bin -v&lt;br /&gt;
&lt;br /&gt;
You should see something like:&lt;br /&gt;
 ...&lt;br /&gt;
 INFO using config file /etc/conductor_1.conf&lt;br /&gt;
 ...&lt;br /&gt;
 INFO Loaded flasher 'meego-ai-flasher-n900'&lt;br /&gt;
 ...&lt;br /&gt;
 INFO Host IP 192.168.3.14;Device IP 192.168.3.15&lt;br /&gt;
 ...&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS</id>
		<title>Quality/QA-tools/OTS</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS"/>
				<updated>2011-07-12T09:47:55Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Releases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS Index =&lt;br /&gt;
&lt;br /&gt;
Welcome to the Open Test System (OTS) Wiki Index.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
OTS is the '''Open Test System''' for testing software systems on evolving hardware architectures.&lt;br /&gt;
  &lt;br /&gt;
It was born out of the test framework incrementally developed for use on [http://maemo.org/ Maemo] project and is in use for 24/7 testing service by [http://www.nokia.com/ Nokia].&lt;br /&gt;
&lt;br /&gt;
More detailed info can be found from [[Quality/QA-tools/OTS/About|about]] page.&lt;br /&gt;
&lt;br /&gt;
== Releases ==&lt;br /&gt;
&lt;br /&gt;
Current release [http://meego.gitorious.org/meego-quality-assurance/ots tag 0.8.7]. See [[Quality/QA-tools/OTS/UserDocumentation/Upgrading|upgrading]] instructions!&lt;br /&gt;
&lt;br /&gt;
Next release [http://bugs.meego.com/show_bug.cgi?id=20753 0.8.8]&lt;br /&gt;
&lt;br /&gt;
See OTS [[Quality/QA-tools/OTS/Roadmap| roadmap.]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/UserDocumentation | User Documentation]]&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Installation | Installation Ubuntu]]&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Installation_rpm | Installation RPM]]&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Upgrading | Upgrading]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs | Developer Documentation]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/AdminDocs | System Administration]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/Glossary | Glossary]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/ExampleSetup | Example OTS Service Setup]]&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/Configuration</id>
		<title>Quality/QA-tools/OTS/Configuration</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/Configuration"/>
				<updated>2011-07-11T09:56:34Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Location */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Configuration =&lt;br /&gt;
&lt;br /&gt;
Each distributable '''Application''' has a configuration file.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
The default location for the files is /etc/ots/&lt;br /&gt;
and they use the .conf postfix&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The configuration of the '''Component''' is contained in sub-headings of the configuration file by name. &lt;br /&gt;
&lt;br /&gt;
e.g. An ots.wiki would have the configuration parameters as follows&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [ots.wiki]&lt;br /&gt;
 foo = 1&lt;br /&gt;
 bar = 2&lt;br /&gt;
 baz = 3&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SW Products Default Options ==&lt;br /&gt;
&lt;br /&gt;
The default [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/hub/options.py Options] can be configured to vary depending on the Software Product under test.&lt;br /&gt;
&lt;br /&gt;
These defaults override the base defaults in Options. &lt;br /&gt;
&lt;br /&gt;
'''WIP this is currently as a [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/hub/options_defaults.yaml YAML] file but is likely to change.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 example_sw_product:&lt;br /&gt;
     device:&lt;br /&gt;
         devicegroup : examplegroup&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ots.server.hub ===&lt;br /&gt;
&lt;br /&gt;
==== The Timeout ====&lt;br /&gt;
&lt;br /&gt;
The [[Quality/QA-tools/OTS/DeveloperDocs/OTS_Timeouts|Global Timeout from the Server]] is configured here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 timeout = 30 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== The Storage Host ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 storage_host = Hostname&lt;br /&gt;
 storage_port = 1982&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ots.server.xmlrpc ===&lt;br /&gt;
&lt;br /&gt;
Configure the OTS server XMLRPC interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 host = &amp;quot;your_hostname_here&amp;quot;&lt;br /&gt;
 port = 8080&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/Routing</id>
		<title>Quality/QA-tools/OTS/Routing</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/Routing"/>
				<updated>2011-07-11T09:53:12Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Worker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Testrun Routing ==&lt;br /&gt;
&lt;br /&gt;
=== OTS 0.1.2 and Newer ===&lt;br /&gt;
&lt;br /&gt;
Starting from version 0.1.2 OTS now supports additional device properties.&lt;br /&gt;
&lt;br /&gt;
==== Worker ====&lt;br /&gt;
&lt;br /&gt;
'''''The config file format has changed and is not compatible with older OTS versions!'''''&lt;br /&gt;
&lt;br /&gt;
/etc/ots/worker.conf now includes new ''[Device]'' section. Devicegroup is still the only mandatory parameter but in addition to that it's possible to define devicename and deviceid.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###########################################&lt;br /&gt;
# REPLACE `fix_me` WITH YOUR DEVICEGROUP&lt;br /&gt;
###########################################&lt;br /&gt;
[Device]&lt;br /&gt;
devicegroup = fix_me&lt;br /&gt;
&lt;br /&gt;
#############################&lt;br /&gt;
# Optional device properties&lt;br /&gt;
#############################&lt;br /&gt;
&lt;br /&gt;
#devicename = name of the device type&lt;br /&gt;
#deviceid = Specific HW id of the device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Workers are now able to listen to multiple queues. Queues for the worker are generated from these 3 parameters:&lt;br /&gt;
&lt;br /&gt;
* Only devicegroup defined:&lt;br /&gt;
** ''devicegroup''&lt;br /&gt;
* Devicegroup and devicename defined:&lt;br /&gt;
** ''devicegroup''&lt;br /&gt;
** ''devicegroup.devicename''&lt;br /&gt;
* Devicegroup, devicename and deviceid defined:&lt;br /&gt;
** ''devicegroup''&lt;br /&gt;
** ''devicegroup.devicename''&lt;br /&gt;
** ''devicegroup.devicename.deviceid''&lt;br /&gt;
&lt;br /&gt;
Deviceid is a subproperty of devicename so it is not possible to define deviceid only. An exception will be raised in that situation.&lt;br /&gt;
&lt;br /&gt;
The more specific queues have higher priority than the more generic ones.&lt;br /&gt;
&lt;br /&gt;
==== Server ====&lt;br /&gt;
&lt;br /&gt;
On server side the routing key for a particular testrun is defined from the properties as follows:&lt;br /&gt;
&lt;br /&gt;
* Only devicegroup defined:&lt;br /&gt;
** ''devicegroup''&lt;br /&gt;
* Devicegroup and devicename defined:&lt;br /&gt;
** ''devicegroup.devicename''&lt;br /&gt;
* Devicegroup, devicename and deviceid:&lt;br /&gt;
** ''devicegroup.devicename.deviceid''&lt;br /&gt;
&lt;br /&gt;
Defining a deviceid without devicename will raise an exception and cause the testrun to fail.&lt;br /&gt;
&lt;br /&gt;
The format of the device option is:&lt;br /&gt;
&lt;br /&gt;
 devicegroup:&amp;lt;GROUP_1&amp;gt; devicename:&amp;lt;NAME&amp;gt; deviceid:&amp;lt;ID&amp;gt;;devicegroup:&amp;lt;GROUP_1&amp;gt; devicename:&amp;lt;NAME&amp;gt; deviceid:&amp;lt;ID&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This triggers two separate testruns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example with ots_trigger the -d option can be used as follows:&lt;br /&gt;
&lt;br /&gt;
* Route the testrun to group handset, use n900 device with deviceid 1&lt;br /&gt;
&lt;br /&gt;
 -d &amp;quot;devicegroup:handset devicename:n900 deviceid:1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Route the testrun to default devicegroup, use n900 device, don't care about deviceid (Default devicegroup is defined in ots server config)&lt;br /&gt;
&lt;br /&gt;
 -d &amp;quot;devicename:n900&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Route the testrun to &amp;quot;meego_coffee&amp;quot; devicegroup, don't care about devicename or deviceid.&lt;br /&gt;
&lt;br /&gt;
 -d &amp;quot;devicegroup:meego_coffee&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== OTS 0.1.1 and Older ===&lt;br /&gt;
&lt;br /&gt;
Testruns are routed to workers based on devicegroup. Devicegroup is directly used as the AMQP routing key and queue name. AMQP values are directly defined in the ots.ini config file.&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/Rich-core</id>
		<title>Quality/QA-tools/OTS/Plugins/Rich-core</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/Rich-core"/>
				<updated>2011-07-11T09:44:16Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Rich-core plug-in =&lt;br /&gt;
&lt;br /&gt;
Released in OTS 0.8.5.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Installation is made to OTS worker.&lt;br /&gt;
&lt;br /&gt;
1. Install plug-in package&lt;br /&gt;
 sudo apt-get install python-ots-plugin-conductor-richcore&lt;br /&gt;
On Fedora&lt;br /&gt;
 sudo yum install python-ots-plugin-conductor-richcore&lt;br /&gt;
&lt;br /&gt;
2. Make sure that testrunner-lite 1.6.1 or newer is installed&lt;br /&gt;
&lt;br /&gt;
3. Set rich_core_dumps_folder parameter for conductor&lt;br /&gt;
 sudo nano /etc/ots/conductor.conf&lt;br /&gt;
&lt;br /&gt;
4. Configure rich-core plug-in settings&lt;br /&gt;
 sudo nano /etc/ots/plugins/conductor_richcore.conf&lt;br /&gt;
&lt;br /&gt;
5. Restart OTS worker&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/QAReports</id>
		<title>Quality/QA-tools/OTS/Plugins/QAReports</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/QAReports"/>
				<updated>2011-07-11T09:43:02Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= QA-Reports plugin =&lt;br /&gt;
&lt;br /&gt;
Released in OTS 0.8.1.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Installation is made to OTS server.&lt;br /&gt;
&lt;br /&gt;
1. Install plug-in&lt;br /&gt;
 sudo apt-get install python-ots-plugin-qareports&lt;br /&gt;
Fedora:&lt;br /&gt;
 sudo yum install python-ots-plugin-qareports&lt;br /&gt;
2. Instructions how to get token ring&lt;br /&gt;
 [[Quality/QA-tools/QAReports/API]]&lt;br /&gt;
3. Configure QA-Reports settings&lt;br /&gt;
 sudo nano /etc/ots/plugins/qareports.conf&lt;br /&gt;
4a. Restart apache&lt;br /&gt;
 sudo service apache2 restart&lt;br /&gt;
Fedora:&lt;br /&gt;
 sudo /etc/init.d/httpd restart&lt;br /&gt;
4b. Restart OTS server&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Default settings are taken from the configuration file, but if you want to define a testrun specific parameters, you can use &amp;quot;--options&amp;quot; command line parameter in ots_trigger:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ots_trigger --options=&amp;quot;qa_hwproduct:&amp;lt;HWPRODUCT&amp;gt; qa_testtype:&amp;lt;TESTTYPE&amp;gt; qa_target:&amp;lt;TARGET&amp;gt; qa_release_version:&amp;lt;RELEASE_VERSION&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
 ots_trigger --options=&amp;quot;qa_hwproduct:N900 qa_testtype:Nightly qa_target:Core qa_release_version:1.2&amp;quot;&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/Email</id>
		<title>Quality/QA-tools/OTS/Plugins/Email</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/Email"/>
				<updated>2011-07-11T09:41:19Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Email plug-in =&lt;br /&gt;
&lt;br /&gt;
Released in OTS 0.8.0.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Installation is made to OTS server.&lt;br /&gt;
&lt;br /&gt;
1. Install plug-in package&lt;br /&gt;
 sudo apt-get install python-ots-plugin-email&lt;br /&gt;
Fedora&lt;br /&gt;
 sudo yum install python-ots-plugin-email&lt;br /&gt;
2. Configure email settings&lt;br /&gt;
 sudo nano /etc/ots/plugins/email.conf&lt;br /&gt;
3a. Restart apache&lt;br /&gt;
 sudo service apache2 restart&lt;br /&gt;
Fedora:&lt;br /&gt;
 sudo /etc/init.d/httpd restart&lt;br /&gt;
3b. Restart OTS server&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/DeveloperDocs</id>
		<title>Quality/QA-tools/OTS/DeveloperDocs</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/DeveloperDocs"/>
				<updated>2011-07-11T09:38:51Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* XmlFileFormats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS - Open Testing Service =&lt;br /&gt;
&lt;br /&gt;
== Related Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DevelopmentGuidelines | Development Guidelines]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/Packages | Packages]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/ErrorCodes | Error Codes]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/Glossary]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Transition0.1-0.8|Making transition from 0.1 to 0.8]]&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
OTS is a Distributed Test System that takes a Data Driven Approach using XML Files to allow parallel testing of Applications on evolving Hardware platforms.  &lt;br /&gt;
&lt;br /&gt;
Design has been driven by the need for a language neutral test platform that allows testing under different device architectures in parallel.&lt;br /&gt;
&lt;br /&gt;
== High Level Overview ==  &lt;br /&gt;
&lt;br /&gt;
OTS allows a Test Sequence to be fanned out from a hub known as a '''Distributor''' to a remote machine known as a '''Worker'''. &lt;br /&gt;
Each '''Worker''' has a '''Device Group''' associated with it, this is defined in the configuration. The Tests are routed to the '''Worker''' &lt;br /&gt;
on the basis of the '''Device Group'''.&lt;br /&gt;
&lt;br /&gt;
An XML '''Test Definition File''' describes the Tests that are run. The results are returned to the '''Distributor''' in an XML '''Results File'''.&lt;br /&gt;
 &lt;br /&gt;
The '''Distributor''' takes a '''Device Group''' and '''Timeout''' as inputs, as well as the '''Command''' for running '''Tasks'''. Tests are run within a '''Task''' which  &lt;br /&gt;
is currently run as a process. The '''Command''' will typically take a path to the '''Test Definition File''' as an input. &lt;br /&gt;
If the process exceeds the '''Timeout''' the '''Task''' is stopped (the process is killed). &lt;br /&gt;
&lt;br /&gt;
A number of '''Tasks''' can be added to a '''Testrun'''. The '''Testrun''' will normally wait for all '''Tasks''' to finish before completion. &lt;br /&gt;
&lt;br /&gt;
Data (status, error and results) are communicated back from the '''Task''' to the '''Worker'''.  The '''Results Object''' is a container for the files outputted: '''Test Definition File''',  '''Results File''' &lt;br /&gt;
and any other files produced by the test as well as metadata relating to the run. &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
OTS is written in [http://www.python.org/ Python 2.6].&lt;br /&gt;
&lt;br /&gt;
[http://www.amqp.org/confluence/display/AMQP/Advanced+Message+Queuing+Protocol AMQP] protocol is used for communication.&lt;br /&gt;
&lt;br /&gt;
=== XmlFileFormats ===&lt;br /&gt;
&lt;br /&gt;
The XML file formats provide the datum for the system.&lt;br /&gt;
&lt;br /&gt;
Download [http://meego.gitorious.org/meego-quality-assurance/test-definition/trees/master them] and add the path to the '''results_xsd''' parameter in your [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/master/ots.server/ots/server/server.conf server.conf] file&lt;br /&gt;
&lt;br /&gt;
=== Third Party Dependencies ===&lt;br /&gt;
&lt;br /&gt;
==== RabbitMQ ====&lt;br /&gt;
&lt;br /&gt;
You need to install [http://www.rabbitmq.com/server.html RabbitMQ], this is AMQP message server.&lt;br /&gt;
&lt;br /&gt;
===== Managing the Queues =====&lt;br /&gt;
&lt;br /&gt;
If you need to delete or empty the queues there are [http://meego.gitorious.org/meego-quality-assurance/ots/trees/master/ots.server/ots/server/distributor/dev_utils utilities] to help with this.&lt;br /&gt;
&lt;br /&gt;
==== Python Packages ====&lt;br /&gt;
&lt;br /&gt;
The following python packages are needed&lt;br /&gt;
&lt;br /&gt;
* [http://pypi.python.org/pypi/setuptools setuptools]&lt;br /&gt;
&lt;br /&gt;
* [http://www.voidspace.org.uk/python/configobj.html configobj]&lt;br /&gt;
 &lt;br /&gt;
* [http://pypi.python.org/pypi/multiprocessing multiprocessing]&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/py-amqplib/ pyamqplib] (version 0.6.1 or newer)&lt;br /&gt;
&lt;br /&gt;
* [http://www.familieleuthe.de/DownloadMiniXsv.html minixsv]&lt;br /&gt;
&lt;br /&gt;
* [http://www.djangoproject.com/download/1.1.2/tarball/ django]&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/python-nose/ nose]&lt;br /&gt;
&lt;br /&gt;
== Diving In ==&lt;br /&gt;
&lt;br /&gt;
The following steps show how to get a Development Environment up and running&lt;br /&gt;
&lt;br /&gt;
=== 1. Install Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Install the Third Party Dependencies&lt;br /&gt;
&lt;br /&gt;
* Get the XML File Formats and set the OTS_TESTDEFINITION environment variable&lt;br /&gt;
&lt;br /&gt;
=== 2. Build the Eggs === &lt;br /&gt;
&lt;br /&gt;
From the root directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ./setup.sh&lt;br /&gt;
 source ./paths.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Unittests ===&lt;br /&gt;
&lt;br /&gt;
Run the unittests from the root directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ./nose.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. Component Tests ===&lt;br /&gt;
&lt;br /&gt;
Component Tests run high level tests on an OTS Component using Mocks of the dependencies.&lt;br /&gt;
&lt;br /&gt;
You can run these with the component_tests shell script in the root directory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ./component_tests.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. Hello OTS World ===&lt;br /&gt;
&lt;br /&gt;
The source contains a simple demonstration of the way the key elements work. &lt;br /&gt;
&lt;br /&gt;
==== 1. Open two terminal windows. ====&lt;br /&gt;
&lt;br /&gt;
==== 2. In the first window run the server ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cd $SERVER&lt;br /&gt;
 cd hub/demos&lt;br /&gt;
 python demo_hub.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. You should see this: ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
 &amp;lt;snip&amp;gt;&lt;br /&gt;
 20XX-XX-XX XX:XX:XX,XXX - ots.server.distributor.taskrunner - DEBUG - Sending command '['echo', 'hello world']' with key 'foo'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4. In the second window run the worker ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cd $WORKER&lt;br /&gt;
 python worker.py -c config.ini&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Now in the Server terminal the command should run to completion. You should see the following line in the logs: ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  20XX-XX-XX XX:XX:XX,XXX - ots.worker.command - DEBUG - process.communicate() returned echo hello world&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It will raise a PackageException. This is normal as no Tasks that are run return Packages to the Server&lt;br /&gt;
&lt;br /&gt;
==== 6. And on the logs on the Worker side should contain: ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 XXXX-XX-XX XX:XX:XX,XXX - ots.worker.command - DEBUG - process.communicate() returned echo hello world&lt;br /&gt;
 XXXX-XX-XX XX:XX:XX,XXX - ots.worker.task_broker - DEBUG - Task in state: 'finish'&lt;br /&gt;
 XXXX-XX-XX XX:XX:XX,XXX - ots.worker.task_broker - INFO - Recommence consume on queue: foo&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
It is intended that the '''Distributor''' and each '''Worker''' should be installed to separate machines.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Distributor ===&lt;br /&gt;
&lt;br /&gt;
The format of the configuration file is as follows. &lt;br /&gt;
&lt;br /&gt;
The `host` is the name of the RabbitMQ server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [Client]&lt;br /&gt;
 host =  localhost&lt;br /&gt;
 vhost = / &lt;br /&gt;
 port = 5672&lt;br /&gt;
 username = guest&lt;br /&gt;
 password = guest&lt;br /&gt;
 queue = FIXME&lt;br /&gt;
 consumer_tag = worker&lt;br /&gt;
 services_exchange = services&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Worker ===&lt;br /&gt;
&lt;br /&gt;
Edit your config.ini so that the &lt;br /&gt;
&lt;br /&gt;
 * `queue`&lt;br /&gt;
 * `routing_key`&lt;br /&gt;
 * `services_exchange` &lt;br /&gt;
&lt;br /&gt;
Are set for your '''Device Group'''. &lt;br /&gt;
&lt;br /&gt;
And the `host` is the name of your RabbitMQ server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [Worker]&lt;br /&gt;
 host =  localhost&lt;br /&gt;
 vhost = / &lt;br /&gt;
 port = 5672&lt;br /&gt;
 username = guest&lt;br /&gt;
 password = guest&lt;br /&gt;
 queue = foo&lt;br /&gt;
 routing_key = foo&lt;br /&gt;
 services_exchange = foo&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Starting the Worker ====&lt;br /&gt;
&lt;br /&gt;
To start your Worker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 python worker.py -c config.ini&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automated System Tests ==&lt;br /&gt;
&lt;br /&gt;
Automated system tests are available in ots.system_tests. They trigger various testruns with xmlrpc and check return value and log messages.&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
* Fully functional OTS system with one worker.&lt;br /&gt;
* A SW Product &amp;quot;ots-system-tests&amp;quot; configured so that it defaults to the worker.&lt;br /&gt;
* A meego image with test-definition-tests and testrunner-lite-regression-tests.&lt;br /&gt;
* Django based advanced OTS setup.&lt;br /&gt;
* BeautifulSoup python library.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
* make the system test image available for the workers. (for example copy it to your apache static content directory /var/www/static/)&lt;br /&gt;
* Modify system_tests.conf in ots.system_tests directory to match your system.&lt;br /&gt;
* Make sure all the urls in system_tests.conf work.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
* System tests execute multiple full testruns. Running all tests can easily take more than 1.5 hours with N900 worker.&lt;br /&gt;
* Make sure there's no other activities ongoing in the system while running the tests.&lt;br /&gt;
* Some error handling tests expect certain devicegroups and sw products _not_ to be available. If these test cases fail you can remove those queues with ots tools.&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;br /&gt;
&lt;br /&gt;
OTS is distributed under an LGPL license.&lt;br /&gt;
&lt;br /&gt;
== Contributions ==&lt;br /&gt;
&lt;br /&gt;
OTS welcomes contributions.&lt;br /&gt;
&lt;br /&gt;
The following areas would benefit greatly from your help:&lt;br /&gt;
&lt;br /&gt;
* Adding to the list of freely available Publisher Plugins&lt;br /&gt;
* Examples of OTS in use with different hardware architectures&lt;br /&gt;
* Improving the ease of deployment &lt;br /&gt;
&lt;br /&gt;
Please check out the [[Quality/QA-tools/OTS/DevelopmentGuidelines | Guidelines]] and [[Quality/QA-tools/OTS/DevelopmentGuidelines/Review | Review process]].&lt;br /&gt;
&lt;br /&gt;
== Wiki ==&lt;br /&gt;
&lt;br /&gt;
[[Quality/QA-tools/OTS | OTS Wiki Home]]&lt;br /&gt;
&lt;br /&gt;
== Source Code Documentation ==&lt;br /&gt;
&lt;br /&gt;
OTS docstrings are in [http://epydoc.sourceforge.net/manual-epytext.html epytext] format which enables the use of [http://epydoc.sourceforge.net/index.html epydoc] in API documentation generation.&lt;br /&gt;
&lt;br /&gt;
== Mailing List ==&lt;br /&gt;
&lt;br /&gt;
[http://lists.meego.com/listinfo/meego-qa MeeGo QA] mailing list&lt;br /&gt;
&lt;br /&gt;
== IRC Channel ==&lt;br /&gt;
&lt;br /&gt;
The #meego-qa irc channel in freenode&lt;br /&gt;
&lt;br /&gt;
== Bugs == &lt;br /&gt;
&lt;br /&gt;
The [http://bugs.meego.com/ Meego bugs page]&lt;br /&gt;
&lt;br /&gt;
== Platform Dependencies ==&lt;br /&gt;
&lt;br /&gt;
OTS is tested to run on Linux only.&lt;br /&gt;
&lt;br /&gt;
Tested on Ubuntu (8.04, 10.04, 10.10), Fedora 13, MeeGo and Redhat.&lt;br /&gt;
&lt;br /&gt;
Binary support for Ubuntu, Fedora and MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Components | Components]]&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Server | Server]]&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Plugins | Plugins]]&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/DataFlow | DataFlow]]&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Behaviour | Behaviour]]&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
&lt;br /&gt;
==== Server ====&lt;br /&gt;
&lt;br /&gt;
The top level [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/hub/api.py api] for external clients utilises parameters in a dictionary.&lt;br /&gt;
&lt;br /&gt;
The parameters are explicitly defined in [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/hub/options.py options.py]. The conversion from the loosely defined dictionary to a clear API is undertaken by the [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/hub/options_factory.py options_factory.py]&lt;br /&gt;
&lt;br /&gt;
==== [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/distributor/api.py Distributor] ====&lt;br /&gt;
&lt;br /&gt;
==== [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.results/ots/results/api.py Results] ====&lt;br /&gt;
&lt;br /&gt;
==== [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.worker/ots/worker/api.py Worker] ====&lt;br /&gt;
&lt;br /&gt;
== Extending OTS ==&lt;br /&gt;
&lt;br /&gt;
You can extend OTS with your own [[Quality/QA-tools/OTS/CreatingAPublisher|Publisher]]&lt;br /&gt;
and with [[Quality/QA-tools/OTS/DeveloperDocs/CreatingACustomDistributionModel|custom package distribution models.]]&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
&lt;br /&gt;
Documentation for experimental branches, spikes, WIPs etc. can be found in [[Quality/QA-tools/OTS/DeveloperDocs/Experimental]].&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
&lt;br /&gt;
[[Quality/QA-tools/OTS/DeveloperDocs/ErrorSituations| OTS 0.1 Error Situations]]&lt;br /&gt;
&lt;br /&gt;
[[Quality/QA-tools/OTS/DeveloperDocs/TypicalUsage| Typical OTS users and usage scenarios]]&lt;br /&gt;
&lt;br /&gt;
== Project Planning ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/Roadmap | Roadmap]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/Meetings | Meetings]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/ReleaseChecklist | ReleaseChecklist]]&lt;br /&gt;
&lt;br /&gt;
==== Release Practices ====&lt;br /&gt;
&lt;br /&gt;
OTS releases are done when a new release makes sense from OTS point of view. There are no scheduled releases.&lt;br /&gt;
&lt;br /&gt;
The [[Quality/QA tools development#Release_Practices | QA Tools Release Practices]] gives more details.&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Installation_rpm</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Installation rpm</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Installation_rpm"/>
				<updated>2011-07-11T09:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* OTS 0.8.x installation RPM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS 0.8.x installation RPM =&lt;br /&gt;
&lt;br /&gt;
These instructions have been tested with Fedora 13. Execute commands as root.&lt;br /&gt;
&lt;br /&gt;
In MeeGo netbook, at least following packages needs to be installed manually:&lt;br /&gt;
 python-amqp, python-django, minixsv, rabbitmq-server&lt;br /&gt;
&lt;br /&gt;
== Network Setup ==&lt;br /&gt;
&lt;br /&gt;
Using static IP addresses on all OTS machines is strongly recommended. It is possible to setup the system also with dynamic IP addresses but it might cause problems every now and then because IP's and hostnames change.&lt;br /&gt;
&lt;br /&gt;
'''Note''' All OTS machines need to be able to access other OTS machines based on their hostname.&lt;br /&gt;
&lt;br /&gt;
How to check that DNS names are correct:&lt;br /&gt;
&lt;br /&gt;
1. Check OTS server's hostname&lt;br /&gt;
 hostname&lt;br /&gt;
2. Ping the OTS server's hostname from the OTS worker&lt;br /&gt;
 ping &amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ping fails, add manually OTS server's hostname to OTS workers '''/etc/hosts''' file&lt;br /&gt;
 &amp;lt;IP&amp;gt; &amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of getting OTS binary packages: from '''the source code'''&lt;br /&gt;
or from the '''MeeGo Tools:Testing repository'''. From the repository you can get&lt;br /&gt;
the stable version and from the source code the development version.&lt;br /&gt;
&lt;br /&gt;
* Add Tools:Testing source to /etc/yum.repos.d/&lt;br /&gt;
 cd /etc/yum.repos.d/&lt;br /&gt;
 yum install wget nano&lt;br /&gt;
 wget http://download.meego.com/live/Tools:/Testing/Fedora13/Tools:Testing.repo&lt;br /&gt;
&lt;br /&gt;
* Update the repositories&lt;br /&gt;
 yum check-update&lt;br /&gt;
&lt;br /&gt;
'''Build packages from source (optional)'''&lt;br /&gt;
* Install git core&lt;br /&gt;
 yum install git-core&lt;br /&gt;
&lt;br /&gt;
* Get sources&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/ots.git&lt;br /&gt;
&lt;br /&gt;
* List tags&lt;br /&gt;
 git tag -l&lt;br /&gt;
&lt;br /&gt;
* Checkout the latest tag&lt;br /&gt;
 git checkout &amp;lt;tag_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Get building tools&lt;br /&gt;
 yum rpm-build python-setuptools&lt;br /&gt;
&lt;br /&gt;
* Build packages&lt;br /&gt;
 mv ots python-ots-0.8.x&lt;br /&gt;
 tar czf python-ots-0.8.x.tar.gz python-ots-0.8.x&lt;br /&gt;
 rpmbuild -tb python-ots-0.8.x.tar.gz&lt;br /&gt;
&lt;br /&gt;
== OTS server installation ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 yum install Django python-amqplib python-configobj rabbitmq-server test-definition&lt;br /&gt;
 easy_install minixsv&lt;br /&gt;
 yum install python-setuptools&lt;br /&gt;
&lt;br /&gt;
* Install OTS server components&lt;br /&gt;
 yum install python-ots-common python-ots-results python-ots-server&lt;br /&gt;
or if you are using own built packages&lt;br /&gt;
 rpm -i ...&lt;br /&gt;
&lt;br /&gt;
* Add rabbitmq to start on boot&lt;br /&gt;
 chkconfig --add rabbitmq-server&lt;br /&gt;
 chkconfig rabbitmq-server on&lt;br /&gt;
&lt;br /&gt;
* Start rabbitmq server&lt;br /&gt;
 /etc/init.d/rabbitmq-server start&lt;br /&gt;
&lt;br /&gt;
* Configure OTS server settings&lt;br /&gt;
 sudo nano /etc/ots/server.conf&lt;br /&gt;
&lt;br /&gt;
Recommended to change following:&lt;br /&gt;
 'example_sw_product', example to 'meego_product'&lt;br /&gt;
 'devicegroup', example to 'meego_n900'&lt;br /&gt;
&lt;br /&gt;
* Install OTS server plug-ins&lt;br /&gt;
&lt;br /&gt;
See plug-ins from [[Quality/QA-tools/OTS/Plugins|OTS Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
* Start OTS server&lt;br /&gt;
 ots_server&lt;br /&gt;
&lt;br /&gt;
== OTS worker installation ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 yum install python-amqplib testrunner-lite&lt;br /&gt;
&lt;br /&gt;
* Install OTS worker packages&lt;br /&gt;
 yum install python-ots-common python-ots-worker&lt;br /&gt;
&lt;br /&gt;
* Configure OTS worker settings&lt;br /&gt;
 sudo nano /etc/ots/worker.conf&lt;br /&gt;
&lt;br /&gt;
Change 'devicegroup', example meego_n900&lt;br /&gt;
&lt;br /&gt;
Change 'host' to server's address&lt;br /&gt;
&lt;br /&gt;
* Start OTS worker (as root)&lt;br /&gt;
 ots_worker&lt;br /&gt;
&lt;br /&gt;
NOTE: if worker failed to start up with error like &amp;quot;socket.error: [Errno 113] No route to host&amp;quot;, check that ots-worker is able to connect to ots-server&lt;br /&gt;
&lt;br /&gt;
== OTS tools ==&lt;br /&gt;
&lt;br /&gt;
Tools are used for triggering test runs from the command line.&lt;br /&gt;
&lt;br /&gt;
* Install OTS tools&lt;br /&gt;
 yum install python-ots-tools&lt;br /&gt;
&lt;br /&gt;
* Trigger a test run&lt;br /&gt;
 ots_trigger -s localhost:8080 -b test_build -i http://url_to_image -p example_sw_product -e test@man.com&lt;br /&gt;
&lt;br /&gt;
* Kickstart file for automation can be found from&lt;br /&gt;
 http://meego.gitorious.org/meego-quality-assurance/enables-automated-testing/blobs/ks/meego-n900-autotest.ks&lt;br /&gt;
&lt;br /&gt;
* You need to build the image with mic-image-creator with parameters:&lt;br /&gt;
 --save-kernel --package=tar.gz&lt;br /&gt;
&lt;br /&gt;
== How to install N900 automation tools to OTS worker ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 yum install meego-ai-flaster eat-host&lt;br /&gt;
 &lt;br /&gt;
* Get N900 flasher from the Nokia's tablets-dev portal&lt;br /&gt;
 http://tablets-dev.nokia.com/maemo-dev-env-downloads.php?f=maemo_flasher-3.5_2.5.2.2.tar.gz&lt;br /&gt;
 Compile the flasher&lt;br /&gt;
&lt;br /&gt;
* Configure conductor to use rpm and fetch /var/log/messages&lt;br /&gt;
 sudo nano /etc/ots/conductor.conf&lt;br /&gt;
&lt;br /&gt;
* Test manually that everything is OK, this is executed in the worker&lt;br /&gt;
 sudo conductor -u &amp;lt;image url&amp;gt;&lt;br /&gt;
* Start OTS worker&lt;br /&gt;
 sudo ots_worker&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Installation</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Installation"/>
				<updated>2011-07-11T09:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* OTS 0.8.x installation Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS 0.8.x installation Ubuntu =&lt;br /&gt;
&lt;br /&gt;
If using 0.1.x version, see [[Quality/QA-tools/OTS/UserDocumentation/Migration_0.1_0.8| migration from 0.1.x to 0.8.x]] document.&lt;br /&gt;
&lt;br /&gt;
== Used hardware ==&lt;br /&gt;
&lt;br /&gt;
:1 x Server (Ubuntu 10.10)&lt;br /&gt;
:1 x Client (Ubuntu 10.10)&lt;br /&gt;
::1 x HAT controller&lt;br /&gt;
:: 1 x Power cable&lt;br /&gt;
:: 1 x Power supply&lt;br /&gt;
:: 2 x USB A-B cable&lt;br /&gt;
:: 1 x USB A-microB cable&lt;br /&gt;
:: 1 x N900&lt;br /&gt;
&lt;br /&gt;
== Network Setup ==&lt;br /&gt;
&lt;br /&gt;
Using static IP addresses on all OTS machines is strongly recommended. It is possible to setup the system also with dynamic IP addresses but it might cause problems every now and then because IP's and hostnames change.&lt;br /&gt;
&lt;br /&gt;
'''Note''' All OTS machines need to be able to access other OTS machines based on their hostname.&lt;br /&gt;
&lt;br /&gt;
How to check that DNS names are correct:&lt;br /&gt;
&lt;br /&gt;
1. Check OTS server's hostname&lt;br /&gt;
 hostname&lt;br /&gt;
2. Ping the OTS server's hostname from the OTS worker&lt;br /&gt;
 ping &amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ping fails, add manually OTS server's hostname to OTS workers '''/etc/hosts''' file&lt;br /&gt;
 &amp;lt;IP&amp;gt; &amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of getting OTS binary packages: from '''the source code'''&lt;br /&gt;
or from the '''MeeGo Tools:Testing repository'''. From the repository you can get&lt;br /&gt;
the stable version and from the source code the development version.&lt;br /&gt;
&lt;br /&gt;
=== Set up Tools:Testing repository ===&lt;br /&gt;
&lt;br /&gt;
By setting up the repository it allows you to install OTS and other MeeGo QA tools via apt-get command. Follow the [[Quality/QA-tools/How_to_set_up_repositories|instructions]].&lt;br /&gt;
&lt;br /&gt;
=== Build packages from source (optional) ===&lt;br /&gt;
&lt;br /&gt;
If you which to build your own packages and install OTS from them here are the instructions. But it is recommended to install OTS using the repository.&lt;br /&gt;
&lt;br /&gt;
* Install git core&lt;br /&gt;
 sudo apt-get install git-core&lt;br /&gt;
&lt;br /&gt;
* Get sources&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/ots.git&lt;br /&gt;
&lt;br /&gt;
* Get building tools&lt;br /&gt;
 sudo apt-get install dpkg-dev debhelper python-setuptools&lt;br /&gt;
&lt;br /&gt;
* Build packages&lt;br /&gt;
 cd ots&lt;br /&gt;
 dpkg-buildpackage -rfakeroot&lt;br /&gt;
&lt;br /&gt;
== OTS server installation ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 sudo apt-get install python-django python-amqplib python-configobj rabbitmq-server test-definition&lt;br /&gt;
&lt;br /&gt;
* Install OTS server components&lt;br /&gt;
 sudo apt-get install python-ots-common python-ots-results python-ots-server&lt;br /&gt;
Or if you are using own built packages&lt;br /&gt;
 sudo dpkg -i ...&lt;br /&gt;
&lt;br /&gt;
* Configure OTS server settings&lt;br /&gt;
 sudo nano /etc/ots/server.conf&lt;br /&gt;
&lt;br /&gt;
Recommended to change following:&lt;br /&gt;
 'example_sw_product', example to 'meego_product'&lt;br /&gt;
 'devicegroup', example to 'meego_n900'&lt;br /&gt;
&lt;br /&gt;
* Install OTS server plug-ins&lt;br /&gt;
 [[Quality/QA-tools/OTS/Plugins/HTTP_logger|Logger plug-in]] (recommended)&lt;br /&gt;
 [[Quality/QA-tools/OTS/Plugins/Email|Email plug-in]] (recommended)&lt;br /&gt;
&lt;br /&gt;
See more plug-ins from [[Quality/QA-tools/OTS/Plugins|OTS Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
* If logger plug-in is installed&lt;br /&gt;
 Change permissions to logging directory&lt;br /&gt;
 sudo chown www-data:www-data /var/log/ots&lt;br /&gt;
&lt;br /&gt;
Now the OTS server can be used via apache (django_xmlrpc).&lt;br /&gt;
&lt;br /&gt;
* If logger plug-in is not installed&lt;br /&gt;
 Change user permissions to logging directory&lt;br /&gt;
 sudo chown &amp;lt;user&amp;gt;:&amp;lt;group&amp;gt; /var/log/ots&lt;br /&gt;
&lt;br /&gt;
* Now you can start OTS server&lt;br /&gt;
 ots_server&lt;br /&gt;
&lt;br /&gt;
== OTS worker installation ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 sudo apt-get install python-amqplib testrunner-lite&lt;br /&gt;
&lt;br /&gt;
* Install OTS worker packages&lt;br /&gt;
 sudo apt-get install python-ots-common python-ots-worker&lt;br /&gt;
&lt;br /&gt;
* Configure OTS worker settings&lt;br /&gt;
 sudo nano /etc/ots/worker.conf&lt;br /&gt;
&lt;br /&gt;
Change 'devicegroup', example meego_n900&lt;br /&gt;
&lt;br /&gt;
Change 'host' to server's address&lt;br /&gt;
&lt;br /&gt;
* Start OTS worker&lt;br /&gt;
 sudo ots_worker&lt;br /&gt;
&lt;br /&gt;
== OTS tools ==&lt;br /&gt;
&lt;br /&gt;
Tools are used for triggering test runs from the command line.&lt;br /&gt;
&lt;br /&gt;
* Install OTS tools&lt;br /&gt;
 sudo apt-get install python-ots-tools&lt;br /&gt;
&lt;br /&gt;
* Trigger a test run&lt;br /&gt;
 ots_trigger -s localhost/xmlrpc -b test_build -i http://url_to_image -p example_sw_product -e test@man.com&lt;br /&gt;
&lt;br /&gt;
== How to install N900 automation tools to OTS worker ==&lt;br /&gt;
&lt;br /&gt;
* Remove network-manager, because it breaks the USB connection. See more information from autotest-guide.&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 sudo apt-get install meego-ai-flasher eat-host-ubuntu&lt;br /&gt;
&lt;br /&gt;
* Get N900 flasher from the Nokia's tablets-dev portal&lt;br /&gt;
 http://tablets-dev.nokia.com/maemo-dev-env-downloads.php?f=maemo_flasher-3.5_2.5.2.2_i386.deb&lt;br /&gt;
 sudo dpkg -i maemo_flasher-3.5_2.5.2.2_i386.deb&lt;br /&gt;
&lt;br /&gt;
* Start HAT driver&lt;br /&gt;
 sudo hat_drv &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* Test manually that everything is OK, this is executed in the worker&lt;br /&gt;
 sudo conductor -u &amp;lt;image url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Start OTS worker&lt;br /&gt;
 sudo ots_worker&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Installation</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Installation</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Installation"/>
				<updated>2011-07-11T09:29:32Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* OTS server installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS 0.8.x installation Ubuntu =&lt;br /&gt;
&lt;br /&gt;
If using 0.1.x version, see [[Quality/QA-tools/OTS/UserDocumentation/Migration_0.1_0.8| migration from 0.1.x to 0.8.x]] document.&lt;br /&gt;
&lt;br /&gt;
== Used hardware ==&lt;br /&gt;
&lt;br /&gt;
:1 x Server (Ubuntu 10.10)&lt;br /&gt;
:1 x Client (Ubuntu 10.10)&lt;br /&gt;
::1 x HAT controller&lt;br /&gt;
:: 1 x Power cable&lt;br /&gt;
:: 1 x Power supply&lt;br /&gt;
:: 2 x USB A-B cable&lt;br /&gt;
:: 1 x USB A-microB cable&lt;br /&gt;
:: 1 x N900&lt;br /&gt;
&lt;br /&gt;
== Network Setup ==&lt;br /&gt;
&lt;br /&gt;
Using static IP addresses on all OTS machines is strongly recommended. It is possible to setup the system also with dynamic IP addresses but it might cause problems every now and then because IP's and hostnames change.&lt;br /&gt;
&lt;br /&gt;
'''Note''' All OTS machines need to be able to access other OTS machines based on their hostname.&lt;br /&gt;
&lt;br /&gt;
How to check that DNS names are correct:&lt;br /&gt;
&lt;br /&gt;
1. Check OTS server's hostname&lt;br /&gt;
 hostname&lt;br /&gt;
2. Ping the OTS server's hostname from the OTS worker&lt;br /&gt;
 ping &amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If ping fails, add manually OTS server's hostname to OTS workers '''/etc/hosts''' file&lt;br /&gt;
 &amp;lt;IP&amp;gt; &amp;lt;hostname&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of getting OTS binary packages: from '''the source code'''&lt;br /&gt;
or from the '''MeeGo Tools:Testing repository'''. From the repository you can get&lt;br /&gt;
the stable version and from the source code the development version.&lt;br /&gt;
&lt;br /&gt;
=== Set up Tools:Testing repository ===&lt;br /&gt;
&lt;br /&gt;
By setting up the repository it allows you to install OTS and other MeeGo QA tools via apt-get command. Follow the [[Quality/QA-tools/How_to_set_up_repositories|instructions]].&lt;br /&gt;
&lt;br /&gt;
=== Build packages from source (optional) ===&lt;br /&gt;
&lt;br /&gt;
If you which to build your own packages and install OTS from them here are the instructions. But it is recommended to install OTS using the repository.&lt;br /&gt;
&lt;br /&gt;
* Install git core&lt;br /&gt;
 sudo apt-get install git-core&lt;br /&gt;
&lt;br /&gt;
* Get sources&lt;br /&gt;
 git clone git://gitorious.org/meego-quality-assurance/ots.git&lt;br /&gt;
&lt;br /&gt;
* Get building tools&lt;br /&gt;
 sudo apt-get install dpkg-dev debhelper python-setuptools&lt;br /&gt;
&lt;br /&gt;
* Build packages&lt;br /&gt;
 cd ots&lt;br /&gt;
 dpkg-buildpackage -rfakeroot&lt;br /&gt;
&lt;br /&gt;
== OTS server installation ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 sudo apt-get install python-django python-amqplib python-configobj rabbitmq-server test-definition&lt;br /&gt;
&lt;br /&gt;
* Install OTS server components&lt;br /&gt;
 sudo apt-get install python-ots-common python-ots-results python-ots-server&lt;br /&gt;
Or if you are using own built packages&lt;br /&gt;
 sudo dpkg -i ...&lt;br /&gt;
&lt;br /&gt;
* Configure OTS server settings&lt;br /&gt;
 sudo nano /etc/ots/server.conf&lt;br /&gt;
&lt;br /&gt;
Recommended to change following:&lt;br /&gt;
 'example_sw_product', example to 'meego_product'&lt;br /&gt;
 'devicegroup', example to 'meego_n900'&lt;br /&gt;
&lt;br /&gt;
* Install OTS server plug-ins&lt;br /&gt;
 [[Quality/QA-tools/OTS/Plugins/HTTP_logger|Logger plug-in]] (recommended)&lt;br /&gt;
 [[Quality/QA-tools/OTS/Plugins/Email|Email plug-in]] (recommended)&lt;br /&gt;
&lt;br /&gt;
See more plug-ins from [[Quality/QA-tools/OTS/Plugins|OTS Plug-ins]]&lt;br /&gt;
&lt;br /&gt;
* If logger plug-in is installed&lt;br /&gt;
 Change permissions to logging directory&lt;br /&gt;
 sudo chown www-data:www-data /var/log/ots&lt;br /&gt;
&lt;br /&gt;
Now the OTS server can be used via apache (django_xmlrpc).&lt;br /&gt;
&lt;br /&gt;
* If logger plug-in is not installed&lt;br /&gt;
 Change user permissions to logging directory&lt;br /&gt;
 sudo chown &amp;lt;user&amp;gt;:&amp;lt;group&amp;gt; /var/log/ots&lt;br /&gt;
&lt;br /&gt;
* Now you can start OTS server&lt;br /&gt;
 ots_server&lt;br /&gt;
&lt;br /&gt;
== OTS worker installation ==&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 sudo apt-get install python-amqplib testrunner-lite&lt;br /&gt;
&lt;br /&gt;
* Install OTS worker packages&lt;br /&gt;
 sudo apt-get install python-ots-common python-ots-worker&lt;br /&gt;
&lt;br /&gt;
* Configure OTS worker settings&lt;br /&gt;
 sudo nano /etc/ots.ini&lt;br /&gt;
&lt;br /&gt;
Change 'devicegroup', example meego_n900&lt;br /&gt;
&lt;br /&gt;
Change 'host' to server's address&lt;br /&gt;
&lt;br /&gt;
* Start OTS worker&lt;br /&gt;
 sudo ots_worker&lt;br /&gt;
&lt;br /&gt;
== OTS tools ==&lt;br /&gt;
&lt;br /&gt;
Tools are used for triggering test runs from the command line.&lt;br /&gt;
&lt;br /&gt;
* Install OTS tools&lt;br /&gt;
 sudo apt-get install python-ots-tools&lt;br /&gt;
&lt;br /&gt;
* Trigger a test run&lt;br /&gt;
 ots_trigger -s localhost/xmlrpc -b test_build -i http://url_to_image -p example_sw_product -e test@man.com&lt;br /&gt;
&lt;br /&gt;
== How to install N900 automation tools to OTS worker ==&lt;br /&gt;
&lt;br /&gt;
* Remove network-manager, because it breaks the USB connection. See more information from autotest-guide.&lt;br /&gt;
&lt;br /&gt;
* Install dependencies&lt;br /&gt;
 sudo apt-get install meego-ai-flasher eat-host-ubuntu&lt;br /&gt;
&lt;br /&gt;
* Get N900 flasher from the Nokia's tablets-dev portal&lt;br /&gt;
 http://tablets-dev.nokia.com/maemo-dev-env-downloads.php?f=maemo_flasher-3.5_2.5.2.2_i386.deb&lt;br /&gt;
 sudo dpkg -i maemo_flasher-3.5_2.5.2.2_i386.deb&lt;br /&gt;
&lt;br /&gt;
* Start HAT driver&lt;br /&gt;
 sudo hat_drv &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* Test manually that everything is OK, this is executed in the worker&lt;br /&gt;
 sudo conductor -u &amp;lt;image url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Start OTS worker&lt;br /&gt;
 sudo ots_worker&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Upgrading</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading"/>
				<updated>2011-07-11T09:27:23Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Upgrading OTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Upgrading OTS =&lt;br /&gt;
&lt;br /&gt;
== 0.8.6 - 0.8.7 ==&lt;br /&gt;
Locations and names of configuration files have been changed&lt;br /&gt;
All configuration files are now located in /etc/ots&lt;br /&gt;
And the plugin configuration files are in /etc/ots/plugins&lt;br /&gt;
&lt;br /&gt;
If you wish to keep your old settings you have to replace the new files.&lt;br /&gt;
On the server side:&lt;br /&gt;
 sudo mv /etc/ots_server.ini /etc/ots/server.conf&lt;br /&gt;
 sudo mv /etc/ots_plugin_qareports.conf /etc/ots/plugins/qareports.conf&lt;br /&gt;
And email plugin has it's own configuration file so you should move the [ots.email_plugin] section from the old /etc/ots_server.ini file to /etc/ots/plugins/email.conf&lt;br /&gt;
&lt;br /&gt;
On the worker side:&lt;br /&gt;
 sudo mv /etc/ots.ini /etc/ots/worker.conf&lt;br /&gt;
 sudo mv /etc/conductor.conf /etc/ots/conductor.conf&lt;br /&gt;
 sudo mv /etc/ots_plugin_conductor_richcore.conf /etc/ots/plugins/conductor_richcore.conf&lt;br /&gt;
&lt;br /&gt;
== 0.8.5 - 0.8.6 ==&lt;br /&gt;
Backup all configuration files and database before upgrading.&lt;br /&gt;
&lt;br /&gt;
If you have logger plugin installed update the templates by giving following commands after upgrade:&lt;br /&gt;
 sudo cp -r /usr/share/ots/django/* /var/www/&lt;br /&gt;
 sudo cp -r /usr/share/ots/plugin/* /var/www/&lt;br /&gt;
&lt;br /&gt;
Upgrade also the latest meego-ai-flasher.&lt;br /&gt;
&lt;br /&gt;
=== Updating the database ===&lt;br /&gt;
&lt;br /&gt;
If you want to keep your old log database, add new (user_defined_id) column to the log_messages table. Run database command line interface for OTS database. By default OTS uses sqlite database at /opt/ots/ots.sqlite.&lt;br /&gt;
 sudo sqlite3 /opt/ots/ots.sqlite&lt;br /&gt;
Add new column to the log_messages table by executing following command:&lt;br /&gt;
 ALTER TABLE log_messages ADD COLUMN user_defined_id varchar(255) NOT NULL DEFAULT &amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
If there's no need to keep the old database you can remove the database file (/opt/ots/ots.sqlite) and generate a new one using [[Quality/QA-tools/OTS/Plugins/Django#Create.2Fupdate_databases|the instructions]].&lt;br /&gt;
&lt;br /&gt;
== 0.8.4 - 0.8.5 ==&lt;br /&gt;
* Rich-core conductor plug-in available&lt;br /&gt;
** Changes to /etc/conductor.conf &lt;br /&gt;
** New configuration file for plug-in: /etc/ots_plugin_conductor_richcore.conf&lt;br /&gt;
&lt;br /&gt;
== 0.8.3 - 0.8.4 ==&lt;br /&gt;
* Backup all configuration files before updating&lt;br /&gt;
* Multiple device support added, even if you use '''only one device''' check following:&lt;br /&gt;
** Changes to /etc/conductor.conf&lt;br /&gt;
** Update meego-ai-flasher (&amp;gt;= 0.1.4) and [http://meego-qa-tools.digia.com/meego-ai/meego-ai-optimized.tar.gz meego-ai] packages!&lt;br /&gt;
** Even if you use only one device, remove usb0 configurations from /etc/network/interfaces&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Multiple_device| See this instructions!]]&lt;br /&gt;
* Changes to QAReports configuration file /etc/ots_plugins_qareports.conf&lt;br /&gt;
** Added proxy and attachment upload settings&lt;br /&gt;
&lt;br /&gt;
== 0.8.2 - 0.8.3 ==&lt;br /&gt;
* Changes in ots_plugin_qareports.conf&lt;br /&gt;
** Add new parameters&lt;br /&gt;
* Only new features&lt;br /&gt;
** Test plan based execution&lt;br /&gt;
** Chroot support&lt;br /&gt;
** See [[Quality/QA-tools/OTS/UserDocumentation/Usage|how to]] use these features&lt;br /&gt;
&lt;br /&gt;
== 0.8.1 - 0.8.2 ==&lt;br /&gt;
* New django package added, effects to all plug-ins&lt;br /&gt;
** See [[Quality/QA-tools/OTS/Plugins/Django|Django instructions]].&lt;br /&gt;
** See [[Quality/QA-tools/OTS/DeveloperDocs/Plugins|plug-ins instructions]].&lt;br /&gt;
&lt;br /&gt;
== 0.8.0 - 0.8.1 ==&lt;br /&gt;
* Plug-in namespace changed, effects to Logger and QA-Reports plug-ins&lt;br /&gt;
** For logger update web page content, see step 8 from [[Quality/QA-tools/OTS/Plugins/HTTP_logger|Logger documentation]].&lt;br /&gt;
** For QA-Reports, configuration file name has changed. Move /etc/ots_qareports_plugin.conf to /etc/ots_plugin_qareports.conf&lt;br /&gt;
&lt;br /&gt;
== 0.1.x - 0.8.0 ==&lt;br /&gt;
&lt;br /&gt;
See [[Quality/QA-tools/OTS/UserDocumentation/Migration_0.1_0.8| migration document]].&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Upgrading</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading"/>
				<updated>2011-06-13T05:28:55Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Upgrading OTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Upgrading OTS =&lt;br /&gt;
&lt;br /&gt;
== 0.8.5 - 0.8.6 ==&lt;br /&gt;
* If you want to keep your old log database, add new (user_defined_id) column to the log_messages table&lt;br /&gt;
Run database command line interface for ots database. By default ots uses sqlite database at /opt/ots/ots.sqlite&lt;br /&gt;
 sudo sqlite3 /opt/ots/ots.sqlite&lt;br /&gt;
Add new column to the log_messages table by executing following command:&lt;br /&gt;
 ALTER TABLE log_messages ADD COLUMN user_defined_id varchar(255) NOT NULL DEFAULT &amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== 0.8.4 - 0.8.5 ==&lt;br /&gt;
* Rich-core conductor plug-in available&lt;br /&gt;
** Changes to /etc/conductor.conf &lt;br /&gt;
** New configuration file for plug-in: /etc/ots_plugin_conductor_richcore.conf&lt;br /&gt;
&lt;br /&gt;
== 0.8.3 - 0.8.4 ==&lt;br /&gt;
* Backup all configuration files before updating&lt;br /&gt;
* Multiple device support added, even if you use '''only one device''' check following:&lt;br /&gt;
** Changes to /etc/conductor.conf&lt;br /&gt;
** Update meego-ai-flasher (&amp;gt;= 0.1.4) and [http://meego-qa-tools.digia.com/meego-ai/meego-ai-optimized.tar.gz meego-ai] packages!&lt;br /&gt;
** Even if you use only one device, remove usb0 configurations from /etc/network/interfaces&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Multiple_device| See this instructions!]]&lt;br /&gt;
* Changes to QAReports configuration file /etc/ots_plugins_qareports.conf&lt;br /&gt;
** Added proxy and attachment upload settings&lt;br /&gt;
&lt;br /&gt;
== 0.8.2 - 0.8.3 ==&lt;br /&gt;
* Changes in ots_plugin_qareports.conf&lt;br /&gt;
** Add new parameters&lt;br /&gt;
* Only new features&lt;br /&gt;
** Test plan based execution&lt;br /&gt;
** Chroot support&lt;br /&gt;
** See [[Quality/QA-tools/OTS/UserDocumentation/Usage|how to]] use these features&lt;br /&gt;
&lt;br /&gt;
== 0.8.1 - 0.8.2 ==&lt;br /&gt;
* New django package added, effects to all plug-ins&lt;br /&gt;
** See [[Quality/QA-tools/OTS/Plugins/Django|Django instructions]].&lt;br /&gt;
** See [[Quality/QA-tools/OTS/DeveloperDocs/Plugins|plug-ins instructions]].&lt;br /&gt;
&lt;br /&gt;
== 0.8.0 - 0.8.1 ==&lt;br /&gt;
* Plug-in namespace changed, effects to Logger and QA-Reports plug-ins&lt;br /&gt;
** For logger update web page content, see step 8 from [[Quality/QA-tools/OTS/Plugins/HTTP_logger|Logger documentation]].&lt;br /&gt;
** For QA-Reports, configuration file name has changed. Move /etc/ots_qareports_plugin.conf to /etc/ots_plugin_qareports.conf&lt;br /&gt;
&lt;br /&gt;
== 0.1.x - 0.8.0 ==&lt;br /&gt;
&lt;br /&gt;
See [[Quality/QA-tools/OTS/UserDocumentation/Migration_0.1_0.8| migration document]].&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Upgrading</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading"/>
				<updated>2011-06-10T12:24:42Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* 0.8.5 - 0.8.6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Upgrading OTS =&lt;br /&gt;
&lt;br /&gt;
== 0.8.5 - 0.8.6 ==&lt;br /&gt;
* If you want to keep your old log database, add new (user_defined_id) column to the log_messages table&lt;br /&gt;
 ALTER TABLE log_messages ADD COLUMN user_defined_id varchar(255) NOT NULL DEFAULT &amp;lt;nowiki&amp;gt;''&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== 0.8.4 - 0.8.5 ==&lt;br /&gt;
* Rich-core conductor plug-in available&lt;br /&gt;
** Changes to /etc/conductor.conf &lt;br /&gt;
** New configuration file for plug-in: /etc/ots_plugin_conductor_richcore.conf&lt;br /&gt;
&lt;br /&gt;
== 0.8.3 - 0.8.4 ==&lt;br /&gt;
* Backup all configuration files before updating&lt;br /&gt;
* Multiple device support added, even if you use '''only one device''' check following:&lt;br /&gt;
** Changes to /etc/conductor.conf&lt;br /&gt;
** Update meego-ai-flasher (&amp;gt;= 0.1.4) and [http://meego-qa-tools.digia.com/meego-ai/meego-ai-optimized.tar.gz meego-ai] packages!&lt;br /&gt;
** Even if you use only one device, remove usb0 configurations from /etc/network/interfaces&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Multiple_device| See this instructions!]]&lt;br /&gt;
* Changes to QAReports configuration file /etc/ots_plugins_qareports.conf&lt;br /&gt;
** Added proxy and attachment upload settings&lt;br /&gt;
&lt;br /&gt;
== 0.8.2 - 0.8.3 ==&lt;br /&gt;
* Changes in ots_plugin_qareports.conf&lt;br /&gt;
** Add new parameters&lt;br /&gt;
* Only new features&lt;br /&gt;
** Test plan based execution&lt;br /&gt;
** Chroot support&lt;br /&gt;
** See [[Quality/QA-tools/OTS/UserDocumentation/Usage|how to]] use these features&lt;br /&gt;
&lt;br /&gt;
== 0.8.1 - 0.8.2 ==&lt;br /&gt;
* New django package added, effects to all plug-ins&lt;br /&gt;
** See [[Quality/QA-tools/OTS/Plugins/Django|Django instructions]].&lt;br /&gt;
** See [[Quality/QA-tools/OTS/DeveloperDocs/Plugins|plug-ins instructions]].&lt;br /&gt;
&lt;br /&gt;
== 0.8.0 - 0.8.1 ==&lt;br /&gt;
* Plug-in namespace changed, effects to Logger and QA-Reports plug-ins&lt;br /&gt;
** For logger update web page content, see step 8 from [[Quality/QA-tools/OTS/Plugins/HTTP_logger|Logger documentation]].&lt;br /&gt;
** For QA-Reports, configuration file name has changed. Move /etc/ots_qareports_plugin.conf to /etc/ots_plugin_qareports.conf&lt;br /&gt;
&lt;br /&gt;
== 0.1.x - 0.8.0 ==&lt;br /&gt;
&lt;br /&gt;
See [[Quality/QA-tools/OTS/UserDocumentation/Migration_0.1_0.8| migration document]].&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading</id>
		<title>Quality/QA-tools/OTS/UserDocumentation/Upgrading</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/UserDocumentation/Upgrading"/>
				<updated>2011-06-10T11:41:17Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Upgrading OTS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Upgrading OTS =&lt;br /&gt;
&lt;br /&gt;
== 0.8.5 - 0.8.6 ==&lt;br /&gt;
* If you want to keep your old log database, add new (user_defined_id) column to the log_messages table&lt;br /&gt;
 ALTER TABLE log_messages ADD COLUMN user_defined_id varchar(255) NOT NULL DEFAULT ''&lt;br /&gt;
&lt;br /&gt;
== 0.8.4 - 0.8.5 ==&lt;br /&gt;
* Rich-core conductor plug-in available&lt;br /&gt;
** Changes to /etc/conductor.conf &lt;br /&gt;
** New configuration file for plug-in: /etc/ots_plugin_conductor_richcore.conf&lt;br /&gt;
&lt;br /&gt;
== 0.8.3 - 0.8.4 ==&lt;br /&gt;
* Backup all configuration files before updating&lt;br /&gt;
* Multiple device support added, even if you use '''only one device''' check following:&lt;br /&gt;
** Changes to /etc/conductor.conf&lt;br /&gt;
** Update meego-ai-flasher (&amp;gt;= 0.1.4) and [http://meego-qa-tools.digia.com/meego-ai/meego-ai-optimized.tar.gz meego-ai] packages!&lt;br /&gt;
** Even if you use only one device, remove usb0 configurations from /etc/network/interfaces&lt;br /&gt;
** [[Quality/QA-tools/OTS/UserDocumentation/Multiple_device| See this instructions!]]&lt;br /&gt;
* Changes to QAReports configuration file /etc/ots_plugins_qareports.conf&lt;br /&gt;
** Added proxy and attachment upload settings&lt;br /&gt;
&lt;br /&gt;
== 0.8.2 - 0.8.3 ==&lt;br /&gt;
* Changes in ots_plugin_qareports.conf&lt;br /&gt;
** Add new parameters&lt;br /&gt;
* Only new features&lt;br /&gt;
** Test plan based execution&lt;br /&gt;
** Chroot support&lt;br /&gt;
** See [[Quality/QA-tools/OTS/UserDocumentation/Usage|how to]] use these features&lt;br /&gt;
&lt;br /&gt;
== 0.8.1 - 0.8.2 ==&lt;br /&gt;
* New django package added, effects to all plug-ins&lt;br /&gt;
** See [[Quality/QA-tools/OTS/Plugins/Django|Django instructions]].&lt;br /&gt;
** See [[Quality/QA-tools/OTS/DeveloperDocs/Plugins|plug-ins instructions]].&lt;br /&gt;
&lt;br /&gt;
== 0.8.0 - 0.8.1 ==&lt;br /&gt;
* Plug-in namespace changed, effects to Logger and QA-Reports plug-ins&lt;br /&gt;
** For logger update web page content, see step 8 from [[Quality/QA-tools/OTS/Plugins/HTTP_logger|Logger documentation]].&lt;br /&gt;
** For QA-Reports, configuration file name has changed. Move /etc/ots_qareports_plugin.conf to /etc/ots_plugin_qareports.conf&lt;br /&gt;
&lt;br /&gt;
== 0.1.x - 0.8.0 ==&lt;br /&gt;
&lt;br /&gt;
See [[Quality/QA-tools/OTS/UserDocumentation/Migration_0.1_0.8| migration document]].&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/DeveloperDocs</id>
		<title>Quality/QA-tools/OTS/DeveloperDocs</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/DeveloperDocs"/>
				<updated>2011-04-07T09:31:21Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Source Code Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OTS - Open Testing Service =&lt;br /&gt;
&lt;br /&gt;
== Related Documentation ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DevelopmentGuidelines | Development Guidelines]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/Packages | Packages]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/ErrorCodes | Error Codes]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/Glossary]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Transition0.1-0.8|Making transition from 0.1 to 0.8]]&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
OTS is a Distributed Test System that takes a Data Driven Approach using XML Files to allow parallel testing of Applications on evolving Hardware platforms.  &lt;br /&gt;
&lt;br /&gt;
Design has been driven by the need for a language neutral test platform that allows testing under different device architectures in parallel.&lt;br /&gt;
&lt;br /&gt;
== High Level Overview ==  &lt;br /&gt;
&lt;br /&gt;
OTS allows a Test Sequence to be fanned out from a hub known as a '''Distributor''' to a remote machine known as a '''Worker'''. &lt;br /&gt;
Each '''Worker''' has a '''Device Group''' associated with it, this is defined in the configuration. The Tests are routed to the '''Worker''' &lt;br /&gt;
on the basis of the '''Device Group'''.&lt;br /&gt;
&lt;br /&gt;
An XML '''Test Definition File''' describes the Tests that are run. The results are returned to the '''Distributor''' in an XML '''Results File'''.&lt;br /&gt;
 &lt;br /&gt;
The '''Distributor''' takes a '''Device Group''' and '''Timeout''' as inputs, as well as the '''Command''' for running '''Tasks'''. Tests are run within a '''Task''' which  &lt;br /&gt;
is currently run as a process. The '''Command''' will typically take a path to the '''Test Definition File''' as an input. &lt;br /&gt;
If the process exceeds the '''Timeout''' the '''Task''' is stopped (the process is killed). &lt;br /&gt;
&lt;br /&gt;
A number of '''Tasks''' can be added to a '''Testrun'''. The '''Testrun''' will normally wait for all '''Tasks''' to finish before completion. &lt;br /&gt;
&lt;br /&gt;
Data (status, error and results) are communicated back from the '''Task''' to the '''Worker'''.  The '''Results Object''' is a container for the files outputted: '''Test Definition File''',  '''Results File''' &lt;br /&gt;
and any other files produced by the test as well as metadata relating to the run. &lt;br /&gt;
&lt;br /&gt;
== Technology ==&lt;br /&gt;
&lt;br /&gt;
OTS is written in [http://www.python.org/ Python 2.6].&lt;br /&gt;
&lt;br /&gt;
[http://www.amqp.org/confluence/display/AMQP/Advanced+Message+Queuing+Protocol AMQP] protocol is used for communication.&lt;br /&gt;
&lt;br /&gt;
=== XmlFileFormats ===&lt;br /&gt;
&lt;br /&gt;
The XML file formats provide the datum for the system.&lt;br /&gt;
&lt;br /&gt;
Download [http://meego.gitorious.org/meego-quality-assurance/test-definition/trees/master them] and add the path to the '''results_xsd''' parameter in your [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/ots_server.ini ots_server.ini] file&lt;br /&gt;
&lt;br /&gt;
=== Third Party Dependencies ===&lt;br /&gt;
&lt;br /&gt;
==== RabbitMQ ====&lt;br /&gt;
&lt;br /&gt;
You need to install [http://www.rabbitmq.com/server.html RabbitMQ], this is AMQP message server.&lt;br /&gt;
&lt;br /&gt;
===== Managing the Queues =====&lt;br /&gt;
&lt;br /&gt;
If you need to delete or empty the queues there are [http://meego.gitorious.org/meego-quality-assurance/ots/trees/master/ots.server/ots/server/distributor/dev_utils utilities] to help with this.&lt;br /&gt;
&lt;br /&gt;
==== Python Packages ====&lt;br /&gt;
&lt;br /&gt;
The following python packages are needed&lt;br /&gt;
&lt;br /&gt;
* [http://pypi.python.org/pypi/setuptools setuptools]&lt;br /&gt;
&lt;br /&gt;
* [http://www.voidspace.org.uk/python/configobj.html configobj]&lt;br /&gt;
 &lt;br /&gt;
* [http://pypi.python.org/pypi/multiprocessing multiprocessing]&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/py-amqplib/ pyamqplib] (version 0.6.1 or newer)&lt;br /&gt;
&lt;br /&gt;
* [http://www.familieleuthe.de/DownloadMiniXsv.html minixsv]&lt;br /&gt;
&lt;br /&gt;
* [http://www.djangoproject.com/download/1.1.2/tarball/ django]&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/python-nose/ nose]&lt;br /&gt;
&lt;br /&gt;
== Diving In ==&lt;br /&gt;
&lt;br /&gt;
The following steps show how to get a Development Environment up and running&lt;br /&gt;
&lt;br /&gt;
=== 1. Install Dependencies ===&lt;br /&gt;
&lt;br /&gt;
* Install the Third Party Dependencies&lt;br /&gt;
&lt;br /&gt;
* Get the XML File Formats and set the OTS_TESTDEFINITION environment variable&lt;br /&gt;
&lt;br /&gt;
=== 2. Build the Eggs === &lt;br /&gt;
&lt;br /&gt;
From the root directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ./setup.sh&lt;br /&gt;
 source ./paths.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Unittests ===&lt;br /&gt;
&lt;br /&gt;
Run the unittests from the root directory&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ./nose.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. Component Tests ===&lt;br /&gt;
&lt;br /&gt;
Component Tests run high level tests on an OTS Component using Mocks of the dependencies.&lt;br /&gt;
&lt;br /&gt;
You can run these with the component_tests shell script in the root directory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ./component_tests.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. Hello OTS World ===&lt;br /&gt;
&lt;br /&gt;
The source contains a simple demonstration of the way the key elements work. &lt;br /&gt;
&lt;br /&gt;
==== 1. Open two terminal windows. ====&lt;br /&gt;
&lt;br /&gt;
==== 2. In the first window run the server ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cd $SERVER&lt;br /&gt;
 cd hub/demos&lt;br /&gt;
 python demo_hub.py&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3. You should see this: ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
 &amp;lt;snip&amp;gt;&lt;br /&gt;
 20XX-XX-XX XX:XX:XX,XXX - ots.server.distributor.taskrunner - DEBUG - Sending command '['echo', 'hello world']' with key 'foo'&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4. In the second window run the worker ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cd $WORKER&lt;br /&gt;
 python worker.py -c config.ini&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5. Now in the Server terminal the command should run to completion. You should see the following line in the logs: ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  20XX-XX-XX XX:XX:XX,XXX - ots.worker.command - DEBUG - process.communicate() returned echo hello world&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It will raise a PackageException. This is normal as no Tasks that are run return Packages to the Server&lt;br /&gt;
&lt;br /&gt;
==== 6. And on the logs on the Worker side should contain: ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 XXXX-XX-XX XX:XX:XX,XXX - ots.worker.command - DEBUG - process.communicate() returned echo hello world&lt;br /&gt;
 XXXX-XX-XX XX:XX:XX,XXX - ots.worker.task_broker - DEBUG - Task in state: 'finish'&lt;br /&gt;
 XXXX-XX-XX XX:XX:XX,XXX - ots.worker.task_broker - INFO - Recommence consume on queue: foo&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installation == &lt;br /&gt;
&lt;br /&gt;
It is intended that the '''Distributor''' and each '''Worker''' should be installed to separate machines.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Distributor ===&lt;br /&gt;
&lt;br /&gt;
The format of the configuration file is as follows. &lt;br /&gt;
&lt;br /&gt;
The `host` is the name of the RabbitMQ server&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [Client]&lt;br /&gt;
 host =  localhost&lt;br /&gt;
 vhost = / &lt;br /&gt;
 port = 5672&lt;br /&gt;
 username = guest&lt;br /&gt;
 password = guest&lt;br /&gt;
 queue = FIXME&lt;br /&gt;
 consumer_tag = worker&lt;br /&gt;
 services_exchange = services&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Worker ===&lt;br /&gt;
&lt;br /&gt;
Edit your config.ini so that the &lt;br /&gt;
&lt;br /&gt;
 * `queue`&lt;br /&gt;
 * `routing_key`&lt;br /&gt;
 * `services_exchange` &lt;br /&gt;
&lt;br /&gt;
Are set for your '''Device Group'''. &lt;br /&gt;
&lt;br /&gt;
And the `host` is the name of your RabbitMQ server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 [Worker]&lt;br /&gt;
 host =  localhost&lt;br /&gt;
 vhost = / &lt;br /&gt;
 port = 5672&lt;br /&gt;
 username = guest&lt;br /&gt;
 password = guest&lt;br /&gt;
 queue = foo&lt;br /&gt;
 routing_key = foo&lt;br /&gt;
 services_exchange = foo&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Starting the Worker ====&lt;br /&gt;
&lt;br /&gt;
To start your Worker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 python worker.py -c config.ini&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automated System Tests ==&lt;br /&gt;
&lt;br /&gt;
Automated system tests are available in ots.system_tests. They trigger various testruns with xmlrpc and check return value and log messages.&lt;br /&gt;
&lt;br /&gt;
=== Requirements ===&lt;br /&gt;
&lt;br /&gt;
* Fully functional OTS system with one worker.&lt;br /&gt;
* A SW Product &amp;quot;ots-system-tests&amp;quot; configured so that it defaults to the worker.&lt;br /&gt;
* A meego image with test-definition-tests and testrunner-lite-regression-tests.&lt;br /&gt;
* Django based advanced OTS setup.&lt;br /&gt;
* BeautifulSoup python library.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
* make the system test image available for the workers. (for example copy it to your apache static content directory /var/www/static/)&lt;br /&gt;
* Modify system_tests.conf in ots.system_tests directory to match your system.&lt;br /&gt;
* Make sure all the urls in system_tests.conf work.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
* System tests execute multiple full testruns. Running all tests can easily take more than 1.5 hours with N900 worker.&lt;br /&gt;
* Make sure there's no other activities ongoing in the system while running the tests.&lt;br /&gt;
* Some error handling tests expect certain devicegroups and sw products _not_ to be available. If these test cases fail you can remove those queues with ots tools.&lt;br /&gt;
&lt;br /&gt;
== License ==&lt;br /&gt;
&lt;br /&gt;
OTS is distributed under an LGPL license.&lt;br /&gt;
&lt;br /&gt;
== Contributions ==&lt;br /&gt;
&lt;br /&gt;
OTS welcomes contributions.&lt;br /&gt;
&lt;br /&gt;
The following areas would benefit greatly from your help:&lt;br /&gt;
&lt;br /&gt;
* Adding to the list of freely available Publisher Plugins&lt;br /&gt;
* Examples of OTS in use with different hardware architectures&lt;br /&gt;
* Improving the ease of deployment &lt;br /&gt;
&lt;br /&gt;
Please check out the [[Quality/QA-tools/OTS/DevelopmentGuidelines | Guidelines]] and [[Quality/QA-tools/OTS/DevelopmentGuidelines/Review | Review process]].&lt;br /&gt;
&lt;br /&gt;
== Wiki ==&lt;br /&gt;
&lt;br /&gt;
[[Quality/QA-tools/OTS | OTS Wiki Home]]&lt;br /&gt;
&lt;br /&gt;
== Source Code Documentation ==&lt;br /&gt;
&lt;br /&gt;
OTS docstrings are in [http://epydoc.sourceforge.net/manual-epytext.html epytext] format which enables the use of [http://epydoc.sourceforge.net/index.html epydoc] in API documentation generation.&lt;br /&gt;
&lt;br /&gt;
== Mailing List ==&lt;br /&gt;
&lt;br /&gt;
[http://lists.meego.com/listinfo/meego-qa MeeGo QA] mailing list&lt;br /&gt;
&lt;br /&gt;
== IRC Channel ==&lt;br /&gt;
&lt;br /&gt;
The #meego-qa-tools irc channel in freenode&lt;br /&gt;
&lt;br /&gt;
== Bugs == &lt;br /&gt;
&lt;br /&gt;
The [http://bugs.meego.com/ Meego bugs page]&lt;br /&gt;
&lt;br /&gt;
== Platform Dependencies ==&lt;br /&gt;
&lt;br /&gt;
OTS is tested to run on Linux only.&lt;br /&gt;
&lt;br /&gt;
Tested on Ubuntu (8.04, 10.04, 10.10), Fedora 13, MeeGo and Redhat.&lt;br /&gt;
&lt;br /&gt;
Binary support for Ubuntu, Fedora and MeeGo.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Components | Components]]&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Server | Server]]&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Plugins | Plugins]]&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/DataFlow | DataFlow]]&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/DeveloperDocs/Behaviour | Behaviour]]&lt;br /&gt;
&lt;br /&gt;
== APIs ==&lt;br /&gt;
&lt;br /&gt;
==== Server ====&lt;br /&gt;
&lt;br /&gt;
The top level [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/hub/api.py api] for external clients utilises parameters in a dictionary.&lt;br /&gt;
&lt;br /&gt;
The parameters are explicitly defined in [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/hub/options.py options.py]. The conversion from the loosely defined dictionary to a clear API is undertaken by the [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/hub/options_factory.py options_factory.py]&lt;br /&gt;
&lt;br /&gt;
==== [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.server/ots/server/distributor/api.py Distributor] ====&lt;br /&gt;
&lt;br /&gt;
==== [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.results/ots/results/api.py Results] ====&lt;br /&gt;
&lt;br /&gt;
==== [http://meego.gitorious.org/meego-quality-assurance/ots/blobs/dev_branch_0.8/ots.worker/ots/worker/api.py Worker] ====&lt;br /&gt;
&lt;br /&gt;
== Extending OTS ==&lt;br /&gt;
&lt;br /&gt;
You can extend OTS with your own [[Quality/QA-tools/OTS/CreatingAPublisher|Publisher]]&lt;br /&gt;
and with [[Quality/QA-tools/OTS/DeveloperDocs/CreatingACustomDistributionModel|custom package distribution models.]]&lt;br /&gt;
&lt;br /&gt;
== Experimental ==&lt;br /&gt;
&lt;br /&gt;
Documentation for experimental branches, spikes, WIPs etc. can be found in [[Quality/QA-tools/OTS/DeveloperDocs/Experimental]].&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
&lt;br /&gt;
[[Quality/QA-tools/OTS/DeveloperDocs/ErrorSituations| OTS 0.1 Error Situations]]&lt;br /&gt;
&lt;br /&gt;
[[Quality/QA-tools/OTS/DeveloperDocs/TypicalUsage| Typical OTS users and usage scenarios]]&lt;br /&gt;
&lt;br /&gt;
== Project Planning ==&lt;br /&gt;
&lt;br /&gt;
* [[Quality/QA-tools/OTS/Roadmap | Roadmap]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/Meetings | Meetings]]&lt;br /&gt;
* [[Quality/QA-tools/OTS/ReleaseChecklist | ReleaseChecklist]]&lt;br /&gt;
&lt;br /&gt;
==== Release Practices ====&lt;br /&gt;
&lt;br /&gt;
OTS releases are done when a new release makes sense from OTS point of view. There are no scheduled releases.&lt;br /&gt;
&lt;br /&gt;
The [[Quality/QA tools development#Release_Practices | QA Tools Release Practices]] gives more details.&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/DeveloperDocs/Experimental</id>
		<title>Quality/QA-tools/OTS/DeveloperDocs/Experimental</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/DeveloperDocs/Experimental"/>
				<updated>2011-03-01T13:17:50Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Experimental Area ==&lt;br /&gt;
&lt;br /&gt;
Documentation for experimental branches, spikes, WIPs etc. You can also add documentation related to your merge requests or patches here.&lt;br /&gt;
&lt;br /&gt;
The docs should be moved to proper place in OTS wiki after the feature gets integrated to master branch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''This area is relevant for OTS developers only! Information under this area does not apply to master or released OTS versions.'''&lt;br /&gt;
&lt;br /&gt;
=== 0.1 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;s&amp;gt;[[Quality/QA-tools/OTS/DeveloperDocs/Experimental/Django|Advanced OTS server using django]] (Relates to branch dev_branch_0.1_django_server) &amp;lt;/s&amp;gt;&lt;br /&gt;
**Released in 0.1.1 version. Documentation moved to [[Quality/QA-tools/OTS/UserDocumentation/Installation#Django_Based_Server]]&lt;br /&gt;
&lt;br /&gt;
=== 0.8.2 ===&lt;br /&gt;
&lt;br /&gt;
=== How to monitor ots? ===&lt;br /&gt;
&lt;br /&gt;
We have monitor DTO:s. Probably some kind of hierarchy of dto monitor objects.&lt;br /&gt;
&lt;br /&gt;
* Testrun Events for all testrun states (flashing, bootup, testing, test result processing...):&lt;br /&gt;
** Test pkg execution event (start/stop) (minimum requirement for [FEA] 9036)&lt;br /&gt;
** Flashing Event (start/stop) (n:th try)&lt;br /&gt;
** Bootup event  (n:th try)&lt;br /&gt;
** Testsuite/set/case/step event? (What level of detail we want to monitor?) Remember that logging still exists...&lt;br /&gt;
** Testrun overall result&lt;br /&gt;
&lt;br /&gt;
* Worker events:&lt;br /&gt;
** Worker state (Start/stop/busy(testrun id)/free) (information about queues)&lt;br /&gt;
** Heartbeat?&lt;br /&gt;
&lt;br /&gt;
* Failure event dto? (Flashing failed, device failure...)?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What about statistics monitoring? What do we need?&lt;br /&gt;
&lt;br /&gt;
* Number of testruns?&lt;br /&gt;
* Number of workers?&lt;br /&gt;
* Active testruns?&lt;br /&gt;
* PASS/FAIL/ERROR ratios?&lt;br /&gt;
* Error statistics?&lt;br /&gt;
** Most common errors&lt;br /&gt;
** Some kind of grouping of errors and statistics for them (user fault vs catastrophic ots failure vs device/image error vs...)&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* One host can have multiple worker instances running. Dto:s need to have information about the instance, not just hostname.&lt;br /&gt;
* &lt;br /&gt;
&lt;br /&gt;
==== Who receives monitor dto:s? ====&lt;br /&gt;
&lt;br /&gt;
Current implementation uses the same testrun response queue and process for monitor dto:s. This is simple to implement for testrun related events but very limited for generic monitoring of the whole system. For example most of the worker events cannot be sent to testrun queue because they are not related to a specific testrun and we don't know if there even is any testrun response queues around.&lt;br /&gt;
&lt;br /&gt;
Having a separate permanent queue and a separate listener process for monitoring would allow monitoring also outside a testrun.&lt;br /&gt;
&lt;br /&gt;
Pros:&lt;br /&gt;
&lt;br /&gt;
* Can be deployed as a completely separate component&lt;br /&gt;
** even into a different machine&lt;br /&gt;
** Maintenance, update etc. does not affect test execution in any way&lt;br /&gt;
&lt;br /&gt;
Cons:&lt;br /&gt;
&lt;br /&gt;
* One more process/daemon to maintain&lt;br /&gt;
** More complicated install&lt;br /&gt;
* Might cause errors.&lt;br /&gt;
** Not running =&amp;gt; Lots of messages pile up in the queue&lt;br /&gt;
* Dependencies&lt;br /&gt;
** What if for example the distribution model relies on monitor component to provide up to date data?&lt;br /&gt;
* How to provide testrun specific monitor info to Publishers?&lt;br /&gt;
&lt;br /&gt;
==== WebUI performance ====&lt;br /&gt;
Tested with sqlite and MySQL&lt;br /&gt;
It looks like that MySQL does some caching because when a page is loaded for the first time it takes much longer to render the data than on following loads.&lt;br /&gt;
This means that on fixed time frame the pages can be loaded quite quickly, but when the time frame changes then the page loading takes more time.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
200000 testruns and 1160443 events within fixed time frame average page loading time:&lt;br /&gt;
{|&lt;br /&gt;
! page&lt;br /&gt;
! sqlite&lt;br /&gt;
! MySQL&lt;br /&gt;
|-&lt;br /&gt;
|main&lt;br /&gt;
|4.5322&lt;br /&gt;
|0.0378&lt;br /&gt;
|-&lt;br /&gt;
|group details&lt;br /&gt;
|61.3120&lt;br /&gt;
|28.2552&lt;br /&gt;
|-&lt;br /&gt;
|requestor details&lt;br /&gt;
|0.5142&lt;br /&gt;
|0.0653&lt;br /&gt;
|-&lt;br /&gt;
|testrun details&lt;br /&gt;
|0.0033&lt;br /&gt;
|0.0128&lt;br /&gt;
|-&lt;br /&gt;
|testrun list&lt;br /&gt;
|1.0347&lt;br /&gt;
|0.0730&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
200000 testruns and 1160443 events within dynamic time frame:&lt;br /&gt;
{|&lt;br /&gt;
! page&lt;br /&gt;
! MySQL&lt;br /&gt;
|-&lt;br /&gt;
|main&lt;br /&gt;
|6.4605&lt;br /&gt;
|-&lt;br /&gt;
|group details&lt;br /&gt;
|43.5432&lt;br /&gt;
|-&lt;br /&gt;
|requestor details&lt;br /&gt;
|0.2901&lt;br /&gt;
|-&lt;br /&gt;
|testrun details&lt;br /&gt;
|0.0957&lt;br /&gt;
|-&lt;br /&gt;
|testrun list&lt;br /&gt;
|0.5161&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1000 testruns and 5802 events average page loading time:&lt;br /&gt;
{|&lt;br /&gt;
! page&lt;br /&gt;
! sqlite&lt;br /&gt;
|-&lt;br /&gt;
|main&lt;br /&gt;
|0.0619&lt;br /&gt;
|-&lt;br /&gt;
|group details&lt;br /&gt;
|0.3595&lt;br /&gt;
|-&lt;br /&gt;
|requestor details&lt;br /&gt;
|0.0111&lt;br /&gt;
|-&lt;br /&gt;
|testrun details&lt;br /&gt;
|0.0030&lt;br /&gt;
|-&lt;br /&gt;
|testrun list&lt;br /&gt;
|0.0173&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== TODO ====&lt;br /&gt;
&lt;br /&gt;
* Current server side implementation does not send monitor dtos to Publishers in real time. They are sent only after the testrun is done.&lt;br /&gt;
&lt;br /&gt;
=== Bug 9036 - [FEA] Test package distribution based on history (last execution time of a package) ===&lt;br /&gt;
&lt;br /&gt;
Proposal:&lt;br /&gt;
&lt;br /&gt;
* Data provided by monitor dto:s&lt;br /&gt;
* Data stored to a DB&lt;br /&gt;
** A separate DB for this plugin only or dependency to a more common monitor DB?&lt;br /&gt;
* A custom distribution model that reads data from DB and creates tasks based on that&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
&lt;br /&gt;
* We cannot limit to testpackage level. Implementation for set level distribution is already ongoing.&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	<entry>
		<id>http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/Ots.logger_plugin</id>
		<title>Quality/QA-tools/OTS/Plugins/Ots.logger plugin</title>
		<link rel="alternate" type="text/html" href="http://wiki.meego.com/Quality/QA-tools/OTS/Plugins/Ots.logger_plugin"/>
				<updated>2010-11-26T10:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;Villen: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ots.logger_plugin =&lt;br /&gt;
&lt;br /&gt;
'''Version:''' 0.8&lt;br /&gt;
&lt;br /&gt;
'''Author:''' Ville Niutanen&lt;br /&gt;
&lt;br /&gt;
'''Plugin type:''' Publisher plugin&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Install ots.logger_plugin:&lt;br /&gt;
 cd ots/ots.logger_plugin/&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;/div&gt;</summary>
		<author><name>Villen</name></author>	</entry>

	</feed>