<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Daedius</id>
		<title>OpenSimulator - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Daedius"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Special:Contributions/Daedius"/>
		<updated>2026-04-06T11:53:47Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-03-08T06:33:41Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Technologies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
* Communication&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
Use NUnit, NCover&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
Need to ponder&lt;br /&gt;
&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
[[Statistics Server]]&lt;br /&gt;
&lt;br /&gt;
==Code Introspection==&lt;br /&gt;
Use [http://mono-project.com/Gendarme Gendarme]&lt;br /&gt;
&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
==Communication==&lt;br /&gt;
We should be able to notify the right people of various important changes (or not so important if they wish) via Email, IRC, etc.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [http://code.google.com/p/nanobot/ NanoBot]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-11T23:00:56Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Code Introspection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
* Communication&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
Use NUnit, NCover&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
Need to ponder&lt;br /&gt;
&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
[[Statistics Server]]&lt;br /&gt;
&lt;br /&gt;
==Code Introspection==&lt;br /&gt;
Use [http://mono-project.com/Gendarme Gendarme]&lt;br /&gt;
&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
==Communication==&lt;br /&gt;
We should be able to notify the right people of various important changes (or not so important if they wish) via Email, IRC, etc.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-11T23:00:34Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Code Introspection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
* Communication&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
Use NUnit, NCover&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
Need to ponder&lt;br /&gt;
&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
[[Statistics Server]]&lt;br /&gt;
&lt;br /&gt;
==Code Introspection==&lt;br /&gt;
Use [Genderme http://mono-project.com/Gendarme]&lt;br /&gt;
&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
==Communication==&lt;br /&gt;
We should be able to notify the right people of various important changes (or not so important if they wish) via Email, IRC, etc.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-11T22:56:53Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Code Style */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
* Communication&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
Use NUnit, NCover&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
Need to ponder&lt;br /&gt;
&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
[[Statistics Server]]&lt;br /&gt;
&lt;br /&gt;
==Code Introspection==&lt;br /&gt;
Use Genderme&lt;br /&gt;
&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
==Communication==&lt;br /&gt;
We should be able to notify the right people of various important changes (or not so important if they wish) via Email, IRC, etc.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:51:16Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Testing Objectives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
* Communication&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
Use NUnit, NCover&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
Need to ponder&lt;br /&gt;
&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
[[Statistics Server]]&lt;br /&gt;
&lt;br /&gt;
==Code Style==&lt;br /&gt;
Use FxCop&lt;br /&gt;
&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
==Communication==&lt;br /&gt;
We should be able to notify the right people of various important changes (or not so important if they wish) via Email, IRC, etc.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:49:31Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Code Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
* Communication&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
Use NUnit&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
==Communication==&lt;br /&gt;
We should be able to notify the right people of various important changes (or not so important if they wish) via Email, IRC, etc.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:48:45Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Web site results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
* Communication&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
==Communication==&lt;br /&gt;
We should be able to notify the right people of various important changes (or not so important if they wish) via Email, IRC, etc.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:47:47Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
* Communication&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:47:11Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Web site results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run for some spiffy grids&lt;br /&gt;
* Build results for showing us what happens when things break&lt;br /&gt;
* Code test results for showing us what tasts ran&lt;br /&gt;
* Code performance for showing us how all our profiled code worked&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results for showing which code structure names are non-standard&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:45:20Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing result information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run&lt;br /&gt;
* Build results&lt;br /&gt;
* Code test results&lt;br /&gt;
* Code performance results&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:43:41Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Goal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation so we can have better awareness of our changes to OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run&lt;br /&gt;
* Build results&lt;br /&gt;
* Code test results&lt;br /&gt;
* Code performance results&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:39:59Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Build Stability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
Ensure that the build is intact.&lt;br /&gt;
&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run&lt;br /&gt;
* Build results&lt;br /&gt;
* Code test results&lt;br /&gt;
* Code performance results&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:38:55Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Crossplatform Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
* Build Stability - Make sure all our builds compile on every operating system&lt;br /&gt;
* Code Test - Make sure all our tests run on every operating system&lt;br /&gt;
* Code Performance - See how our functions run on every operating system&lt;br /&gt;
* Runtime Performance - See how operating systems actually run opensim&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run&lt;br /&gt;
* Build results&lt;br /&gt;
* Code test results&lt;br /&gt;
* Code performance results&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:37:20Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Crossplatform Support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
There are a number of objectives that should report on which operating system they ran&lt;br /&gt;
&lt;br /&gt;
==Build Stability==&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run&lt;br /&gt;
* Build results&lt;br /&gt;
* Code test results&lt;br /&gt;
* Code performance results&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:36:41Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Code Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
==Build Stability==&lt;br /&gt;
==Code Test==&lt;br /&gt;
&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run&lt;br /&gt;
* Build results&lt;br /&gt;
* Code test results&lt;br /&gt;
* Code performance results&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:36:21Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Web site results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
==Build Stability==&lt;br /&gt;
==Code Test==&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
* Crossplatform Support information on tests that have been run&lt;br /&gt;
* Build results&lt;br /&gt;
* Code test results&lt;br /&gt;
* Code performance results&lt;br /&gt;
* Runtime Performance statistics information for bar graphs and charts&lt;br /&gt;
* Code Style results&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:34:35Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Web site results */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
==Build Stability==&lt;br /&gt;
==Code Test==&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
Results of our testing should be accessible web service. This web service will be available via a maintained plugin for build bot so when running a build bot master, one only need a website that can access the web service and properly show it how they wish.  Our web service needs to be able to hand off a variety of information:&lt;br /&gt;
* Realtime status information of operations&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:27:24Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Testing Objectives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
==Crossplatform Support==&lt;br /&gt;
==Build Stability==&lt;br /&gt;
==Code Test==&lt;br /&gt;
==Code Performance==&lt;br /&gt;
==Runtime Performance==&lt;br /&gt;
==Code Style==&lt;br /&gt;
==Web site results==&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:25:39Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
To properly test OpenSim, we will need to address a number of objectives:&lt;br /&gt;
&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
We will be using a number of in-house technologies as well as 3rd party (NUnit, Nant, etc.) to address our challenges. We will strive to maintain all our testing tools in a package that any one can use on any computers with any operating system.  For convience, a centralized site for this testing information on opensim will be created on http://testing.ambientunion.com .&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:22:12Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Testing Objectives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:22:01Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Goal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Summary =&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
A centralized site for this testing information will be created on http://testing.ambientunion.com&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:21:47Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Testing Objectives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
* Web site results&lt;br /&gt;
&lt;br /&gt;
A centralized site for this testing information will be created on http://testing.ambientunion.com&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:21:03Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Testing Objectives */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
&lt;br /&gt;
A centralized site for this testing information will be created on http://testing.ambientunion.com&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:18:21Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Testing Objective */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objectives =&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:17:04Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Testing Objective */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objective =&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
* Code Style&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:16:32Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system of automatic building, testing, and simulation for OpenSim.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Objective =&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Style&lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:12:36Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* People */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system that allows us to automatically build, simulate and test OpenSim.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Testing Criteria =&lt;br /&gt;
* Crossplatform Support&lt;br /&gt;
* Build Stability&lt;br /&gt;
* Code Test &lt;br /&gt;
* Code Style&lt;br /&gt;
* Code Performance&lt;br /&gt;
* Runtime Performance&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:08:57Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system that allows us to automatically build, simulate and test OpenSim.&lt;br /&gt;
&lt;br /&gt;
= People =&lt;br /&gt;
* Daedius Moskvitch ( daedius @@@@  daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:07:33Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system that allows us to automatically build,simulate and test OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
* [[Statistics Server]]&lt;br /&gt;
* [[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:07:21Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: Replacing page with '= Goal =
To create a system that allows us to automatically build,simulate and test OpenSim.

= Technologies =
Statistics Server
Build Bot'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a system that allows us to automatically build,simulate and test OpenSim.&lt;br /&gt;
&lt;br /&gt;
= Technologies =&lt;br /&gt;
[[Statistics Server]]&lt;br /&gt;
[[Build Bot]]&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-09T18:05:36Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Build Bot]]&lt;br /&gt;
&lt;br /&gt;
= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
= Sources =&lt;br /&gt;
 svn co http://ambientunion.com/svn/buildbot/trunk&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Released: January 5th, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, multithread a build process (or multiple build processes), distribute nant files locally, attempt compile, and return status&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.2.zip Sources]&lt;br /&gt;
===Features===&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* Interfacing of master-slave architecture&lt;br /&gt;
* Linux, Windows, and OSX support&lt;br /&gt;
* Initial slave configuration in external xml&lt;br /&gt;
* Working slave that can multi-thread builds from masters&lt;br /&gt;
* Simple status and result chain in  builds run on slaves&lt;br /&gt;
* Nant-based builds&lt;br /&gt;
* Custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Be sure to copy the write App.Config to BuildBot.Net.exe.config,  and set the argument BuildContainer equal to the path of the directory &amp;quot;BuildContainer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.3 ==&lt;br /&gt;
Create a real master slave architecture (albiet simple one) to distribute our nant builds and retrieve statuses in real time&lt;br /&gt;
&lt;br /&gt;
* Build master to distribute nant files to build slave&lt;br /&gt;
* Simple status plugin&lt;br /&gt;
* Working status chain&lt;br /&gt;
&lt;br /&gt;
== 0.4 ==&lt;br /&gt;
Finally get some results that are viewable to the public!&lt;br /&gt;
* Create a website that uses javascript to display build statuses in realtime&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Statistics_Server</id>
		<title>Statistics Server</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Statistics_Server"/>
				<updated>2008-01-09T18:01:05Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: New page: = Goal = Create a server that can poll a grid or region for statistics and report them to various outputs.  = Why is this needed? = * There are more stats than those provided by the SL cli...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
Create a server that can poll a grid or region for statistics and report them to various outputs.&lt;br /&gt;
&lt;br /&gt;
= Why is this needed? =&lt;br /&gt;
* There are more stats than those provided by the SL client a person is interested in&lt;br /&gt;
* Statistics should be viewable without a SL client&lt;br /&gt;
* Testing should make good use of grid/region statistics so we can know that our changes not only just work, but work well.&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Statistics Output Plugin Architecture ( IM, log files, console output, web pages, etc.)&lt;br /&gt;
* Statistic Plugin Architecture (&amp;quot;I want to know how many people are on a grid&amp;quot;, &amp;quot;I want to know what my system CPU is&amp;quot; )&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-08T07:09:24Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* People */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
= Sources =&lt;br /&gt;
 svn co http://ambientunion.com/svn/buildbot/trunk&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Released: January 5th, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, multithread a build process (or multiple build processes), distribute nant files locally, attempt compile, and return status&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.2.zip Sources]&lt;br /&gt;
===Features===&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* Interfacing of master-slave architecture&lt;br /&gt;
* Linux, Windows, and OSX support&lt;br /&gt;
* Initial slave configuration in external xml&lt;br /&gt;
* Working slave that can multi-thread builds from masters&lt;br /&gt;
* Simple status and result chain in  builds run on slaves&lt;br /&gt;
* Nant-based builds&lt;br /&gt;
* Custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Be sure to copy the write App.Config to BuildBot.Net.exe.config,  and set the argument BuildContainer equal to the path of the directory &amp;quot;BuildContainer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.3 ==&lt;br /&gt;
Create a real master slave architecture (albiet simple one) to distribute our nant builds and retrieve statuses in real time&lt;br /&gt;
&lt;br /&gt;
* Build master to distribute nant files to build slave&lt;br /&gt;
* Simple status plugin&lt;br /&gt;
* Working status chain&lt;br /&gt;
&lt;br /&gt;
== 0.4 ==&lt;br /&gt;
Finally get some results that are viewable to the public!&lt;br /&gt;
* Create a website that uses javascript to display build statuses in realtime&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-05T08:07:36Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* 0.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Released: January 5th, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, multithread a build process (or multiple build processes), distribute nant files locally, attempt compile, and return status&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.2.zip Sources]&lt;br /&gt;
===Features===&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* Interfacing of master-slave architecture&lt;br /&gt;
* Linux, Windows, and OSX support&lt;br /&gt;
* Initial slave configuration in external xml&lt;br /&gt;
* Working slave that can multi-thread builds from masters&lt;br /&gt;
* Simple status and result chain in  builds run on slaves&lt;br /&gt;
* Nant-based builds&lt;br /&gt;
* Custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Be sure to copy the write App.Config to BuildBot.Net.exe.config,  and set the argument BuildContainer equal to the path of the directory &amp;quot;BuildContainer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.3 ==&lt;br /&gt;
Create a real master slave architecture (albiet simple one) to distribute our nant builds and retrieve statuses in real time&lt;br /&gt;
&lt;br /&gt;
* Build master to distribute nant files to build slave&lt;br /&gt;
* Simple status plugin&lt;br /&gt;
* Working status chain&lt;br /&gt;
&lt;br /&gt;
== 0.4 ==&lt;br /&gt;
Finally get some results that are viewable to the public!&lt;br /&gt;
* Create a website that uses javascript to display build statuses in realtime&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-05T08:06:34Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* 0.4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Released: January 5th, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, multithread a build process (or multiple build processes), distribute nant files locally, attempt compile, and return status&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.2.zip Sources]&lt;br /&gt;
===Features===&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* Interfacing of master-slave architecture&lt;br /&gt;
* Linux, Windows, and OSX support&lt;br /&gt;
* Initial slave configuration in external xml&lt;br /&gt;
* Working slave that can multi-thread builds from masters&lt;br /&gt;
* Simple status and result chain in  builds run on slaves&lt;br /&gt;
* Nant-based builds&lt;br /&gt;
* Custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Be sure to copy the write App.Config to BuildBot.Net.exe.config,  and set the argument BuildContainer equal to the path of the directory &amp;quot;BuildContainer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.3 ==&lt;br /&gt;
Create a real master slave architecture to distribute our nant builds and retrieve statuses in realtime&lt;br /&gt;
&lt;br /&gt;
* Build master to distribute nant files to build slave&lt;br /&gt;
* Simple status plugin&lt;br /&gt;
* Working status chain&lt;br /&gt;
&lt;br /&gt;
== 0.4 ==&lt;br /&gt;
Finally get some results that are viewable to the public!&lt;br /&gt;
* Create a website that uses javascript to display build statuses in realtime&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-05T08:06:03Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Released: January 5th, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, multithread a build process (or multiple build processes), distribute nant files locally, attempt compile, and return status&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.2.zip Sources]&lt;br /&gt;
===Features===&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* Interfacing of master-slave architecture&lt;br /&gt;
* Linux, Windows, and OSX support&lt;br /&gt;
* Initial slave configuration in external xml&lt;br /&gt;
* Working slave that can multi-thread builds from masters&lt;br /&gt;
* Simple status and result chain in  builds run on slaves&lt;br /&gt;
* Nant-based builds&lt;br /&gt;
* Custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Be sure to copy the write App.Config to BuildBot.Net.exe.config,  and set the argument BuildContainer equal to the path of the directory &amp;quot;BuildContainer&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.3 ==&lt;br /&gt;
Create a real master slave architecture to distribute our nant builds and retrieve statuses in realtime&lt;br /&gt;
&lt;br /&gt;
* Build master to distribute nant files to build slave&lt;br /&gt;
* Simple status plugin&lt;br /&gt;
* Working status chain&lt;br /&gt;
&lt;br /&gt;
== 0.4 ==&lt;br /&gt;
* Create a website that uses javascript to display build statuses in realtime&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-04T16:35:56Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* 0.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* Interfacing of master-slave architecture&lt;br /&gt;
* Linux, Windows, and OSX support&lt;br /&gt;
* Initial slave configuration in external xml&lt;br /&gt;
* Working slave that can multi-thread builds from masters&lt;br /&gt;
* Simple status and result chain in  builds run on slaves&lt;br /&gt;
* Nant-based builds&lt;br /&gt;
* Custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-04T16:34:49Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* 0.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* Interfacing of master-slave architecture&lt;br /&gt;
* Linux, Windows, and OSX support&lt;br /&gt;
* Initial buildbot.net slave configuration via xml&lt;br /&gt;
* Eorking slave that can multi-thread builds from masters&lt;br /&gt;
* Simple status and result chain in  builds run on slaves&lt;br /&gt;
* Nant-based builds&lt;br /&gt;
* Custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-04T16:32:15Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* 0.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* interfacing of master-slave architecture&lt;br /&gt;
* linux, windows, and osx support&lt;br /&gt;
* initial buildbot.net slave configuration via xml&lt;br /&gt;
* working slave that can multi-thread builds from masters&lt;br /&gt;
* status and result passing chain in slave&lt;br /&gt;
* nant-based builds&lt;br /&gt;
* custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-04T16:31:41Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* 0.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* interfacing of master-slave architecture&lt;br /&gt;
* linux, windows, and osx support&lt;br /&gt;
* initial buildbot.net slave configuration via xml&lt;br /&gt;
* working slave that can multi-thread builds from masters&lt;br /&gt;
* nant-based builds&lt;br /&gt;
* status and result passing chain in slave&lt;br /&gt;
* custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-04T16:31:08Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* 0.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* interfacing of master-slave architecture&lt;br /&gt;
* linux, windows, and osx support&lt;br /&gt;
* initial buildbot.net slave configuration&lt;br /&gt;
* working slave that can multi-thread builds from masters&lt;br /&gt;
* nant-based builds&lt;br /&gt;
* status and result passing chain in slave&lt;br /&gt;
* custom nant tags for notification of status within a nant process (i.e. &amp;lt;status value=&amp;quot;Running&amp;quot; Description=&amp;quot;Compiling OpenSim&amp;quot; buildid=&amp;quot;${build.id}&amp;quot;/&amp;gt; )&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-02T04:54:39Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* 0.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build step support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python as a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:50:45Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Status Delivery Architecture */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by web plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:47:55Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* BuildBot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by the html.Waterfall plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing which we will be using extensively as a general direction&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:46:30Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Comparison To Automated Build/Testing Methods */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by the html.Waterfall plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Other Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:46:15Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Architecture Plans */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
The Buildbot consists of a single buildmaster and one or more buildslaves, connected in a star topology. The buildmaster makes all decisions about what, when, and how to build. It sends commands to be run on the build slaves, which simply execute the commands and return the results. (certain steps involve more local decision making, where the overhead of sending a lot of commands back and forth would be inappropriate, but in general the buildmaster is responsible for everything).&lt;br /&gt;
&lt;br /&gt;
The buildmaster is usually fed Changes by some sort of version control system (see Change Sources), which may cause builds to be run. As the builds are performed, various status messages are produced, which are then sent to any registered Status Targets (see Status Delivery).&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
&lt;br /&gt;
The buildmaster is configured and maintained by the “buildmaster admin”, who is generally the project team member responsible for build process issues. Each buildslave is maintained by a “buildslave admin”, who do not need to be quite as involved. Generally slaves are run by anyone who has an interest in seeing the project work well on their favorite platform. &lt;br /&gt;
&lt;br /&gt;
==Build Slave Connections==&lt;br /&gt;
&lt;br /&gt;
The buildslaves are typically run on a variety of separate machines, at least one per platform of interest. These machines connect to the buildmaster over a TCP connection to a publically-visible port. As a result, the buildslaves can live behind a NAT box or similar firewalls, as long as they can get to buildmaster. The TCP connections are initiated by the buildslave and accepted by the buildmaster, but commands and results travel both ways within this connection. The buildmaster is always in charge, so all commands travel exclusively from the buildmaster to the buildslave.&lt;br /&gt;
&lt;br /&gt;
To perform builds, the buildslaves must typically obtain source code from a CVS/SVN/etc repository. Therefore they must also be able to reach the repository. The buildmaster provides instructions for performing builds, but does not provide the source code itself. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
==Buildmaster Architecture==&lt;br /&gt;
&lt;br /&gt;
The Buildmaster consists of several pieces:&lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
&lt;br /&gt;
    * Change Sources, which create a Change object each time something is modified in the VC repository. Most ChangeSources listen for messages from a hook script of some sort. Some sources actively poll the repository on a regular basis. All Changes are fed to the Schedulers.&lt;br /&gt;
    * Schedulers, which decide when builds should be performed. They collect Changes into BuildRequests, which are then queued for delivery to Builders until a buildslave is available.&lt;br /&gt;
    * Builders, which control exactly how each build is performed (with a series of BuildSteps, configured in a BuildFactory). Each Build is run on a single buildslave.&lt;br /&gt;
    * Status plugins, which deliver information about the build results through protocols like HTTP, mail, and IRC. &lt;br /&gt;
&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
&lt;br /&gt;
Each Builder is configured with a list of BuildSlaves that it will use for its builds. These buildslaves are expected to behave identically: the only reason to use multiple BuildSlaves for a single Builder is to provide a measure of load-balancing.&lt;br /&gt;
&lt;br /&gt;
Within a single BuildSlave, each Builder creates its own SlaveBuilder instance. These SlaveBuilders operate independently from each other. Each gets its own base directory to work in. It is quite common to have many Builders sharing the same buildslave. For example, there might be two buildslaves: one for i386, and a second for PowerPC. There may then be a pair of Builders that do a full compile/test run, one for each architecture, and a lone Builder that creates snapshot source tarballs if the full builders complete successfully. The full builders would each run on a single buildslave, whereas the tarball creation step might run on either buildslave (since the platform doesn't matter when creating source tarballs). In this case, the mapping would look like:&lt;br /&gt;
&lt;br /&gt;
     Builder(full-i386)  -&amp;gt;  BuildSlaves(slave-i386)&lt;br /&gt;
     Builder(full-ppc)   -&amp;gt;  BuildSlaves(slave-ppc)&lt;br /&gt;
     Builder(source-tarball) -&amp;gt; BuildSlaves(slave-i386, slave-ppc)&lt;br /&gt;
&lt;br /&gt;
and each BuildSlave would have two SlaveBuilders inside it, one for a full builder, and a second for the source-tarball builder.&lt;br /&gt;
&lt;br /&gt;
Once a SlaveBuilder is available, the Builder pulls one or more BuildRequests off its incoming queue. (It may pull more than one if it determines that it can merge the requests together; for example, there may be multiple requests to build the current HEAD revision). These requests are merged into a single Build instance, which includes the SourceStamp that describes what exact version of the source code should be used for the build. The Build is then randomly assigned to a free SlaveBuilder and the build begins. &lt;br /&gt;
&lt;br /&gt;
==Status Delivery Architecture==&lt;br /&gt;
&lt;br /&gt;
The buildmaster maintains a central Status object, to which various status plugins are connected. Through this Status object, a full hierarchy of build status objects can be obtained.&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
The configuration file controls which status plugins are active. Each status plugin gets a reference to the top-level Status object. From there they can request information on each Builder, Build, Step, and LogFile. This query-on-demand interface is used by the html.Waterfall plugin to create the main status page each time a web browser hits the main URL.&lt;br /&gt;
&lt;br /&gt;
The status plugins can also subscribe to hear about new Builds as they occur: this is used by the MailNotifier to create new email messages for each recently-completed Build.&lt;br /&gt;
&lt;br /&gt;
The Status object records the status of old builds on disk in the buildmaster's base directory. This allows it to return information about historical builds.&lt;br /&gt;
&lt;br /&gt;
There are also status objects that correspond to Schedulers and BuildSlaves. These allow status plugins to report information about upcoming builds, and the online/offline status of each buildslave&lt;br /&gt;
&lt;br /&gt;
= Comparison To Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:40:03Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Architecture Plans */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
[[Image:BuildSystemHighLevel.png]]&lt;br /&gt;
[[Image:BuildSystemBuildSlaves.png]]&lt;br /&gt;
[[Image:BuildSystemBuildMasterBuildSlaves.png]]&lt;br /&gt;
[[Image:BuildSystemBuildDistrobution.png]]&lt;br /&gt;
[[Image:BuildSystemStatusDelivery.png]]&lt;br /&gt;
&lt;br /&gt;
= Comparison To Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Comparison To Automated Build/Testing Projects */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
&lt;br /&gt;
= Comparison To Automated Build/Testing Methods=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:28:29Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a crossplatform, distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
&lt;br /&gt;
= Comparison To Automated Build/Testing Projects=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:28:03Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
&lt;br /&gt;
= Comparison To Automated Build/Testing Projects=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/wiki/Automated_Testing</id>
		<title>Automated Testing</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/wiki/Automated_Testing"/>
				<updated>2008-01-01T21:27:14Z</updated>
		
		<summary type="html">&lt;p&gt;Daedius: /* Other Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Goal =&lt;br /&gt;
To create a distributed continuous integration system for open simulator grids which can automate both builds and testing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= People = &lt;br /&gt;
The list of people who are working to develop a solution:&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Features =&lt;br /&gt;
* Crossplatform&lt;br /&gt;
* Notification via email,irc,web&lt;br /&gt;
* Master-Slave architecture&lt;br /&gt;
* Nant support&lt;br /&gt;
* NUnit support&lt;br /&gt;
* Support for grid testing&lt;br /&gt;
&lt;br /&gt;
= Released Versions =&lt;br /&gt;
== 0.1 ==&lt;br /&gt;
Released: January 1st, 2008&amp;lt;br&amp;gt;&lt;br /&gt;
A simple application that can detect changes on the opensim svn, attempt compile, and return whether it was successful or not&lt;br /&gt;
* [http://buildbot.ambientunion.com/BuildBot.Net-0.1.zip Sources]&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* svn source control support&lt;br /&gt;
* svn change detection&lt;br /&gt;
* linux and windows support&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
Right now there is nant build files and visual studio 2005 solution. &lt;br /&gt;
&lt;br /&gt;
===Special Notes For Running===&lt;br /&gt;
After compiling the application, make sure you have the correct application configuration file for your operating system (the current default is Windows, it will fail on Linux if you do not change). Just rename the right App.config to &amp;quot;BuildBot.exe.config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===Other Notes===&lt;br /&gt;
* Deletion can be problematic on windows&lt;br /&gt;
* I think TortoiseSVN on win32 causes alot of trouble when deleting source control directories&lt;br /&gt;
* Need more user friendly exceptions&lt;br /&gt;
* A good way to force building, is to change the LatestTime.txt to a few days back ( to gaurantee that new changes are detected)&lt;br /&gt;
* HAPPY NEW YEARS!&lt;br /&gt;
&lt;br /&gt;
===Contributors===&lt;br /&gt;
* Daedius Moskvitch (daedius @@@@@ daedius.com)&lt;br /&gt;
&lt;br /&gt;
= Planned Versions =&lt;br /&gt;
== 0.2 ==&lt;br /&gt;
Create a more configurable build runner via xml.  This release will hopefully be a good precursor to having a real operational slave.&lt;br /&gt;
&lt;br /&gt;
* xml-defined build command support&lt;br /&gt;
* osx support&lt;br /&gt;
* initial buildbot.net configuration&lt;br /&gt;
&lt;br /&gt;
= Architecture Plans =&lt;br /&gt;
&lt;br /&gt;
= Comparison To Automated Build/Testing Projects=&lt;br /&gt;
== CruiseControl.Net ==&lt;br /&gt;
* Supporting the master slave architecture will be vastly different from CC's centralized approach, but it will allow us more flexability and decentralization of tests on many platforms. It will also enable us to run certain tests which require multiple computers for grid testing.&lt;br /&gt;
* This project has a great system of xml specification for projects and support for Nant,Nunit,NCop, etc we could learn from thoug&lt;br /&gt;
&lt;br /&gt;
== CruiseControl ==&lt;br /&gt;
* Once again, our project will have a focus on distributed testing and building.&lt;br /&gt;
* Our support for C# technologies will be within our control if something goes wrong.  Also, knowing how mono works on all platforms is much easier than knowing how both Java and Mono work on all platforms.&lt;br /&gt;
&lt;br /&gt;
== BuildBot ==&lt;br /&gt;
* Buildbot has a great architecture for distributed builds and testing&lt;br /&gt;
* We will not use Python is a configuration language, rather we will be using XML structures more similar in CruiseControl&lt;br /&gt;
* We will have more direct support for C# technologies&lt;br /&gt;
&lt;br /&gt;
== Manual Building &amp;amp; Testing ==&lt;br /&gt;
* More efficient&lt;br /&gt;
* More automated&lt;br /&gt;
* More proven&lt;/div&gt;</summary>
		<author><name>Daedius</name></author>	</entry>

	</feed>