ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/test/README.txt
Revision: 1.4
Committed: Mon Mar 28 17:48:43 2016 UTC (8 years, 1 month ago) by schorsch
Content type: text/plain
Branch: MAIN
CVS Tags: rad5R4, rad5R2, rad5R1, rad5R3, HEAD
Changes since 1.3: +68 -53 lines
Log Message:
Refactoring of test suite, use independently of SCons and with Py2.7 or 3.x.

File Contents

# Content
1
2 Radiance Testing Framework
3 --------------------------
4
5 A toolkit to test all (eventually) components of the Radiance
6 synthetic image generation system for conformance to their
7 specification.
8
9
10 Limitations
11
12 We use the Python unittest module to run our tests. This means
13 that we're currently restricted to test only complete programs,
14 and not actual units (since unittest was designed to test Python
15 units, not C). A C-level testing framework may be added later.
16
17 There's no good way to automatically test GUI programs like
18 rview. We have to rely on good human testers to check whether
19 those work correctly or not.
20
21
22 Requirements
23
24 You need a working installation of Python 2.7 or 3.x on your
25 system. Radiance must be either built with the executables still
26 in the source tree (preferrable to test before installing), or as
27 a live installation.
28
29
30 How to run tests
31
32 The simplest way to run tests is to use the SCons build system.
33 The file ray/INSTALL.scons explains the requirements and details.
34 Once you have SCons working, go to the ray directory and type
35
36 $> scons build
37 $> scons test
38
39 The first command will build Radiance, and place the executables
40 in a platform-specific directory below ray/scbuild/.
41 The second command will automatically execute all available tests
42 in the environment created by the build.
43
44 Other build systems may chose to integrate the tests in a similar
45 way. The file "run_tests.py" can either be invoked as a script or
46 imported as a module. Note that in either case, you probably need
47 to supply the correct paths to the Radiance binaries and library.
48
49 As a script:
50
51 usage: run_tests.py [-V] [-H] [-p bindir] [-l radlib] [-c cat]
52
53 optional arguments:
54 -V Verbose: Print all executed test cases to stderr
55 -H Help: print this text to stderr and exit
56 -p bindir Path to Radiance binaries
57 -l radlib Path to Radiance library
58 -c cat Category of tests to run (else all)
59
60 As a module:
61
62 Call the class run_tests.RadianceTests(...) with suitable arguments:
63 bindir=[directory ...] - will be prepended to PATH during tests
64 radlib=[directory ...] - will be prepended to RAYPATH during tests
65 cat=[category ...] - only test those categories (else TESTCATS)
66 V=False - if True, verbose listing of executed tests
67
68 Both methods will run all the tests, or just the category given
69 as the value of the "cat" argument.
70
71
72 What gets tested
73
74 There are several test categories, each containing a number of test
75 suites, each containing one or more tests. When running tests, each
76 test category will be printed to the console. Depending on the
77 settings, the individual test cases may also be listed, or just
78 indicated with a dot. And last the total results for each category are
79 shown.
80
81 If any test fails, there will be diagnostic output about the
82 nature of the failure, but the remaining tests will continue to
83 be executed. Note that several utility programs may be used to
84 access the results of other calculations, so if eg. getinfo is
85 broken, that may cause a number of seemingly unrelated tests to
86 fail as well.
87
88
89 How to report failures
90
91 If any of the tests fail on your platform, please report your
92 results (and as much ancilliary information about your system and
93 Radiance version as possible) to the radiance code development
94 mailing list on http://www.radiance-online.org/
95 The developers will then either try to fix the bug, or instruct
96 you on how to refine your testing to get more information about
97 what went wrong.
98
99
100 How to contribute test cases
101
102 The selection of tests to run is still very much incomplete, but
103 will hopefully grow over time. You can contribute by creating
104 tests too! Please ask on the code development mailing list first,
105 so that we can avoid overlaps between the work of different
106 contributors.
107
108 There are two classes of tests to be considered:
109
110 - Testing individual executables
111 This means that an individual program like ev, xfom, or getinfo
112 is tested with typical input data, and the output is compared
113 against the expected result.
114
115 - Testing specific calculations
116 This will mainly affect the actual simulation programs rpict
117 and rtrace. For example, there should be a test suite for every
118 material (and modifier) type, which uses rtrace to shoot a
119 series of rays against a surface under varying angles, in order
120 to verify material behaviour under different parameters. Tests
121 of this kind may require a custom script.
122
123 Contributed tests can be of two kinds. In the simplest case, you
124 can contribute a small(!) set of test data, the command line(s)
125 used to run your tests on them, and a list of expected results.
126 Result comparisons are typically done in text form (by line).
127 If the result is a picture, we'll use ttyimage to pick out a few
128 scan lines for comparison (the image dimensions must be less than
129 128 pixels). Other binary data needs to be converted into a
130 suitable text representation as well. If you're not sure what to
131 use, the developers will be happy to assist you. They will then
132 also wrap your test case into a Python module for integration
133 with the framework.
134
135 Contributors sufficiently familiar with the Python programming
136 language and the unittest framework can also submit complete
137 test suites in Python. Please use the existing tests below the
138 "testcases" directory as a template, and check out the helper
139 modules in ".../lib/pyradlib" (where ".../lib" is the location of
140 the Radiance support library).
141
142 Also note the pseudo-builtin module "testsupport" temporarily
143 created by the RadianceTests() class (see the docstrings there),
144 which provides information about the various required directory
145 locations.
146
147 And lastly you'll find that we have deliberately included a space
148 character in the name of the "test data" directory, because it is
149 a design requirement that all our executables can handle path
150 names with spaces.
151
152 In any case, remember that we can't use any shell scripts or
153 similar tools in our tests. All tests should be able to run on
154 all supported platforms, where your favourite shell may not be
155 available. The Python programming language is available for
156 pretty much any platform, so we decided to use only that.
157
158
159