DevelopKit

Running and testing

Overview

Teaching: 10 min
Exercises: 20 min
Questions
  • How to I work with testing?

Objectives
  • Learn about running examples.

  • Learn about running tests.

One of the most important components of writing code is testing. The following section will show you how to run examples in tests in Gaudi; this is also mostly compatible with the packages that are built on top of Gaudi, such as DaVinci and Gauss.

Running an example

The Gaudi examples are available in Gaudi/GaudiExamples. On lxplus, you can grab them and build with a partial checkout:

lb-dev Gaudi v28r1
cd GaudiDev_v28r1
git lb-use Gaudi
git lb-checkout Gaudi/v28r1 GaudiExamples
make

Now, you have Gaudi and just the GaudiExamples subdirectory (project). This is a good place to start looking around to see how Gaudi works; for now we’ll try running an example.

./run gaudirun.py GaudiExamples/options/AlgSequencer.py

This will run a a few algorithms in sequence, and will output info messages for ten “events” (no data).

Testing

Searching the source

In this case, you can search the source in the current directory and below by:

git grep AlgSequencer

To search the online source, you can do:

Lbglimpse AlgSequencer Ganga v28r1

There are two methods to write tests:

QMT tests

For an old-style QMT test, you add a QMT file in tests/qmtest/gaudiexamples.qms/ that looks like testname.qmt. The file contains xml:

 <?xml version="1.0" ?><!DOCTYPE extension  PUBLIC '-//QM/2.3/Extension//EN'  'http://www. codesourcery.com/qm/dtds/2.3/-//qm/2.3/extension//en.dtd'>
 <extension class="GaudiTest.GaudiExeTest" kind="test">
   <argument name="program"><text>gaudirun.py</text></argument>
   <argument name="args"><set><text>$GAUDIEXAMPLESROOT/options/AlgSequencer.py</text></    set></argument>
   <argument name="use_temp_dir"><enumeral>true</enumeral></argument>
   <argument name="reference"><text>refs/AlgSequencer_pyopts.ref</text></argument>
 </extension>

This contains a few important points. The AlgSequencer.ref is a copy of the output that will be used to check the result. It is at tests/refs/AlgSequencer_pyopts.ref. The compare is smart enough to mask out numbers like time and date for you. The opts file to run is also here.

Python tests

Another way to create a test is through a python system; a matching example is at tests/qmtest/newFormat/algsequencer_pyopts_test.py. The contents:

# -*- coding: utf-8 -*-
import BaseTest
from BaseTest import *

class Test(BaseTest):

    def __init__(self):
        BaseTest.__init__(self)
        self.name = os.path.basename(__file__)[:-5]
        self.program="gaudirun.py"
        self.args=["$GAUDIEXAMPLESROOT/options/AlgSequencer.py"]
        self.reference = "refs/AlgSequencer_pyopts.ref"

Running a test

You can run all the tests with make test. This interally runs the ctest command in the build directory. You can pass on arguments to the ctest file through the make command though the ARGS variable. For example, to run a single named test:

make test ARGS="-R algsequencer_pyopts"

The arguments that can be passed to ctest can be found with ctest --help. Some examples:

Note that gaudirun.py can take read and run a .qmt file directly. This allows you to see the output of the run, as ctest hides the output.

See also

Hackathon introduction

Key Points