[CMake] How to test classes requiring a server ?

Bill Hoffman bill.hoffman at kitware.com
Tue Sep 14 13:17:51 EDT 2010


On 9/14/2010 6:23 AM, Jean-Christophe Fillion-Robin wrote:
> Hi Folks,
>
> Would be great if some people having experience in testing classes
> required a server could share their knowhow :)
>
> Within our project, we have a set of classes that required an instance
> of a server running to be properly unit tested.
>
> Note that the server can be started easily from a command line, no
> installation steps are required.
>
> The ideas are the following:
>
> 1) Start the server at the beginning of each unit test / kill it at the end
>    => The project depending on Qt, we could use QProcess to start the
> server and kill it ...
>    => We need to make sure port are unique for each test ( to properly
> handle parallel testing and multiple dashboard running at the same time
> ... ).  We were thinking to may be rely on an environment variable used
> as a counter ...
>
> 2) -> have a "initialize_server" test in charge of starting the server
>       -> run all unit test against the same instance of the server  (all
> tests would be run sequentially)
>       -> have a "finalize_server" test in charge of killing/stopping the
> server: Is there a cross-platform way of stopping a previously started
> process in ctest ?
>

We have done this in two ways:

1. Create the process outside of the ctest framework.
   Drive the test with a .sh or .bat file, and at the beginning before 
you run ctest, you start the server process.  At the end you end the 
process.

2. Start/Stop the server with each test.   I think this is how paraview 
client server tests work.   We created a TestDriver application that 
starts the server, then runs the test, then stops the server.

There is no cross platform way to do 1 with in ctest, but it might be a 
nice feature.  A startup process could be specified.  This does not yet 
exist, or even have a plan to exist, but might be a good idea someday. 
If you would be interested in implementing something like this... :)


-Bill


More information about the CMake mailing list