1lit - LLVM Integrated Tester 2============================ 3 4SYNOPSIS 5-------- 6 7:program:`lit` [*options*] [*tests*] 8 9DESCRIPTION 10----------- 11 12:program:`lit` is a portable tool for executing LLVM and Clang style test 13suites, summarizing their results, and providing indication of failures. 14:program:`lit` is designed to be a lightweight testing tool with as simple a 15user interface as possible. 16 17:program:`lit` should be run with one or more *tests* to run specified on the 18command line. Tests can be either individual test files or directories to 19search for tests (see :ref:`test-discovery`). 20 21Each specified test will be executed (potentially in parallel) and once all 22tests have been run :program:`lit` will print summary information on the number 23of tests which passed or failed (see :ref:`test-status-results`). The 24:program:`lit` program will execute with a non-zero exit code if any tests 25fail. 26 27By default :program:`lit` will use a succinct progress display and will only 28print summary information for test failures. See :ref:`output-options` for 29options controlling the :program:`lit` progress display and output. 30 31:program:`lit` also includes a number of options for controlling how tests are 32executed (specific features may depend on the particular test format). See 33:ref:`execution-options` for more information. 34 35Finally, :program:`lit` also supports additional options for only running a 36subset of the options specified on the command line, see 37:ref:`selection-options` for more information. 38 39Users interested in the :program:`lit` architecture or designing a 40:program:`lit` testing implementation should see :ref:`lit-infrastructure`. 41 42GENERAL OPTIONS 43--------------- 44 45.. option:: -h, --help 46 47 Show the :program:`lit` help message. 48 49.. option:: -j N, --threads=N 50 51 Run ``N`` tests in parallel. By default, this is automatically chosen to 52 match the number of detected available CPUs. 53 54.. option:: --config-prefix=NAME 55 56 Search for :file:`{NAME}.cfg` and :file:`{NAME}.site.cfg` when searching for 57 test suites, instead of :file:`lit.cfg` and :file:`lit.site.cfg`. 58 59.. option:: -D NAME[=VALUE], --param NAME[=VALUE] 60 61 Add a user defined parameter ``NAME`` with the given ``VALUE`` (or the empty 62 string if not given). The meaning and use of these parameters is test suite 63 dependent. 64 65.. _output-options: 66 67OUTPUT OPTIONS 68-------------- 69 70.. option:: -q, --quiet 71 72 Suppress any output except for test failures. 73 74.. option:: -s, --succinct 75 76 Show less output, for example don't show information on tests that pass. 77 78.. option:: -v, --verbose 79 80 Show more information on test failures, for example the entire test output 81 instead of just the test result. 82 83.. option:: -vv, --echo-all-commands 84 85 Echo all commands to stdout, as they are being executed. 86 This can be valuable for debugging test failures, as the last echoed command 87 will be the one which has failed. 88 This option implies ``--verbose``. 89 90.. option:: -a, --show-all 91 92 Show more information about all tests, for example the entire test 93 commandline and output. 94 95.. option:: --no-progress-bar 96 97 Do not use curses based progress bar. 98 99.. option:: --show-unsupported 100 101 Show the names of unsupported tests. 102 103.. option:: --show-xfail 104 105 Show the names of tests that were expected to fail. 106 107.. _execution-options: 108 109EXECUTION OPTIONS 110----------------- 111 112.. option:: --path=PATH 113 114 Specify an additional ``PATH`` to use when searching for executables in tests. 115 116.. option:: --vg 117 118 Run individual tests under valgrind (using the memcheck tool). The 119 ``--error-exitcode`` argument for valgrind is used so that valgrind failures 120 will cause the program to exit with a non-zero status. 121 122 When this option is enabled, :program:`lit` will also automatically provide a 123 "``valgrind``" feature that can be used to conditionally disable (or expect 124 failure in) certain tests. 125 126.. option:: --vg-arg=ARG 127 128 When :option:`--vg` is used, specify an additional argument to pass to 129 :program:`valgrind` itself. 130 131.. option:: --vg-leak 132 133 When :option:`--vg` is used, enable memory leak checks. When this option is 134 enabled, :program:`lit` will also automatically provide a "``vg_leak``" 135 feature that can be used to conditionally disable (or expect failure in) 136 certain tests. 137 138.. option:: --time-tests 139 140 Track the wall time individual tests take to execute and includes the results 141 in the summary output. This is useful for determining which tests in a test 142 suite take the most time to execute. Note that this option is most useful 143 with ``-j 1``. 144 145.. _selection-options: 146 147SELECTION OPTIONS 148----------------- 149 150.. option:: --max-tests=N 151 152 Run at most ``N`` tests and then terminate. 153 154.. option:: --max-time=N 155 156 Spend at most ``N`` seconds (approximately) running tests and then terminate. 157 158.. option:: --shuffle 159 160 Run the tests in a random order. 161 162.. option:: --num-shards=M 163 164 Divide the set of selected tests into ``M`` equal-sized subsets or 165 "shards", and run only one of them. Must be used with the 166 ``--run-shard=N`` option, which selects the shard to run. The environment 167 variable ``LIT_NUM_SHARDS`` can also be used in place of this 168 option. These two options provide a coarse mechanism for paritioning large 169 testsuites, for parallel execution on separate machines (say in a large 170 testing farm). 171 172.. option:: --run-shard=N 173 174 Select which shard to run, assuming the ``--num-shards=M`` option was 175 provided. The two options must be used together, and the value of ``N`` 176 must be in the range ``1..M``. The environment variable 177 ``LIT_RUN_SHARD`` can also be used in place of this option. 178 179.. option:: --filter=REGEXP 180 181 Run only those tests whose name matches the regular expression specified in 182 ``REGEXP``. The environment variable ``LIT_FILTER`` can be also used in place 183 of this option, which is especially useful in environments where the call 184 to ``lit`` is issued indirectly. 185 186ADDITIONAL OPTIONS 187------------------ 188 189.. option:: --debug 190 191 Run :program:`lit` in debug mode, for debugging configuration issues and 192 :program:`lit` itself. 193 194.. option:: --show-suites 195 196 List the discovered test suites and exit. 197 198.. option:: --show-tests 199 200 List all of the discovered tests and exit. 201 202EXIT STATUS 203----------- 204 205:program:`lit` will exit with an exit code of 1 if there are any FAIL or XPASS 206results. Otherwise, it will exit with the status 0. Other exit codes are used 207for non-test related failures (for example a user error or an internal program 208error). 209 210.. _test-discovery: 211 212TEST DISCOVERY 213-------------- 214 215The inputs passed to :program:`lit` can be either individual tests, or entire 216directories or hierarchies of tests to run. When :program:`lit` starts up, the 217first thing it does is convert the inputs into a complete list of tests to run 218as part of *test discovery*. 219 220In the :program:`lit` model, every test must exist inside some *test suite*. 221:program:`lit` resolves the inputs specified on the command line to test suites 222by searching upwards from the input path until it finds a :file:`lit.cfg` or 223:file:`lit.site.cfg` file. These files serve as both a marker of test suites 224and as configuration files which :program:`lit` loads in order to understand 225how to find and run the tests inside the test suite. 226 227Once :program:`lit` has mapped the inputs into test suites it traverses the 228list of inputs adding tests for individual files and recursively searching for 229tests in directories. 230 231This behavior makes it easy to specify a subset of tests to run, while still 232allowing the test suite configuration to control exactly how tests are 233interpreted. In addition, :program:`lit` always identifies tests by the test 234suite they are in, and their relative path inside the test suite. For 235appropriately configured projects, this allows :program:`lit` to provide 236convenient and flexible support for out-of-tree builds. 237 238.. _test-status-results: 239 240TEST STATUS RESULTS 241------------------- 242 243Each test ultimately produces one of the following six results: 244 245**PASS** 246 247 The test succeeded. 248 249**XFAIL** 250 251 The test failed, but that is expected. This is used for test formats which allow 252 specifying that a test does not currently work, but wish to leave it in the test 253 suite. 254 255**XPASS** 256 257 The test succeeded, but it was expected to fail. This is used for tests which 258 were specified as expected to fail, but are now succeeding (generally because 259 the feature they test was broken and has been fixed). 260 261**FAIL** 262 263 The test failed. 264 265**UNRESOLVED** 266 267 The test result could not be determined. For example, this occurs when the test 268 could not be run, the test itself is invalid, or the test was interrupted. 269 270**UNSUPPORTED** 271 272 The test is not supported in this environment. This is used by test formats 273 which can report unsupported tests. 274 275Depending on the test format tests may produce additional information about 276their status (generally only for failures). See the :ref:`output-options` 277section for more information. 278 279.. _lit-infrastructure: 280 281LIT INFRASTRUCTURE 282------------------ 283 284This section describes the :program:`lit` testing architecture for users interested in 285creating a new :program:`lit` testing implementation, or extending an existing one. 286 287:program:`lit` proper is primarily an infrastructure for discovering and running 288arbitrary tests, and to expose a single convenient interface to these 289tests. :program:`lit` itself doesn't know how to run tests, rather this logic is 290defined by *test suites*. 291 292TEST SUITES 293~~~~~~~~~~~ 294 295As described in :ref:`test-discovery`, tests are always located inside a *test 296suite*. Test suites serve to define the format of the tests they contain, the 297logic for finding those tests, and any additional information to run the tests. 298 299:program:`lit` identifies test suites as directories containing ``lit.cfg`` or 300``lit.site.cfg`` files (see also :option:`--config-prefix`). Test suites are 301initially discovered by recursively searching up the directory hierarchy for 302all the input files passed on the command line. You can use 303:option:`--show-suites` to display the discovered test suites at startup. 304 305Once a test suite is discovered, its config file is loaded. Config files 306themselves are Python modules which will be executed. When the config file is 307executed, two important global variables are predefined: 308 309**lit_config** 310 311 The global **lit** configuration object (a *LitConfig* instance), which defines 312 the builtin test formats, global configuration parameters, and other helper 313 routines for implementing test configurations. 314 315**config** 316 317 This is the config object (a *TestingConfig* instance) for the test suite, 318 which the config file is expected to populate. The following variables are also 319 available on the *config* object, some of which must be set by the config and 320 others are optional or predefined: 321 322 **name** *[required]* The name of the test suite, for use in reports and 323 diagnostics. 324 325 **test_format** *[required]* The test format object which will be used to 326 discover and run tests in the test suite. Generally this will be a builtin test 327 format available from the *lit.formats* module. 328 329 **test_source_root** The filesystem path to the test suite root. For out-of-dir 330 builds this is the directory that will be scanned for tests. 331 332 **test_exec_root** For out-of-dir builds, the path to the test suite root inside 333 the object directory. This is where tests will be run and temporary output files 334 placed. 335 336 **environment** A dictionary representing the environment to use when executing 337 tests in the suite. 338 339 **suffixes** For **lit** test formats which scan directories for tests, this 340 variable is a list of suffixes to identify test files. Used by: *ShTest*. 341 342 **substitutions** For **lit** test formats which substitute variables into a test 343 script, the list of substitutions to perform. Used by: *ShTest*. 344 345 **unsupported** Mark an unsupported directory, all tests within it will be 346 reported as unsupported. Used by: *ShTest*. 347 348 **parent** The parent configuration, this is the config object for the directory 349 containing the test suite, or None. 350 351 **root** The root configuration. This is the top-most :program:`lit` configuration in 352 the project. 353 354 **pipefail** Normally a test using a shell pipe fails if any of the commands 355 on the pipe fail. If this is not desired, setting this variable to false 356 makes the test fail only if the last command in the pipe fails. 357 358 **available_features** A set of features that can be used in `XFAIL`, 359 `REQUIRES`, and `UNSUPPORTED` directives. 360 361TEST DISCOVERY 362~~~~~~~~~~~~~~ 363 364Once test suites are located, :program:`lit` recursively traverses the source 365directory (following *test_source_root*) looking for tests. When :program:`lit` 366enters a sub-directory, it first checks to see if a nested test suite is 367defined in that directory. If so, it loads that test suite recursively, 368otherwise it instantiates a local test config for the directory (see 369:ref:`local-configuration-files`). 370 371Tests are identified by the test suite they are contained within, and the 372relative path inside that suite. Note that the relative path may not refer to 373an actual file on disk; some test formats (such as *GoogleTest*) define 374"virtual tests" which have a path that contains both the path to the actual 375test file and a subpath to identify the virtual test. 376 377.. _local-configuration-files: 378 379LOCAL CONFIGURATION FILES 380~~~~~~~~~~~~~~~~~~~~~~~~~ 381 382When :program:`lit` loads a subdirectory in a test suite, it instantiates a 383local test configuration by cloning the configuration for the parent directory 384--- the root of this configuration chain will always be a test suite. Once the 385test configuration is cloned :program:`lit` checks for a *lit.local.cfg* file 386in the subdirectory. If present, this file will be loaded and can be used to 387specialize the configuration for each individual directory. This facility can 388be used to define subdirectories of optional tests, or to change other 389configuration parameters --- for example, to change the test format, or the 390suffixes which identify test files. 391 392PRE-DEFINED SUBSTITUTIONS 393~~~~~~~~~~~~~~~~~~~~~~~~~~ 394 395:program:`lit` provides various patterns that can be used with the RUN command. 396These are defined in TestRunner.py. The base set of substitutions are: 397 398 ========== ============== 399 Macro Substitution 400 ========== ============== 401 %s source path (path to the file currently being run) 402 %S source dir (directory of the file currently being run) 403 %p same as %S 404 %{pathsep} path separator 405 %t temporary file name unique to the test 406 %T temporary directory unique to the test 407 %% % 408 ========== ============== 409 410Other substitutions are provided that are variations on this base set and 411further substitution patterns can be defined by each test module. See the 412modules :ref:`local-configuration-files`. 413 414More detailed information on substitutions can be found in the 415:doc:`../TestingGuide`. 416 417TEST RUN OUTPUT FORMAT 418~~~~~~~~~~~~~~~~~~~~~~ 419 420The :program:`lit` output for a test run conforms to the following schema, in 421both short and verbose modes (although in short mode no PASS lines will be 422shown). This schema has been chosen to be relatively easy to reliably parse by 423a machine (for example in buildbot log scraping), and for other tools to 424generate. 425 426Each test result is expected to appear on a line that matches: 427 428.. code-block:: none 429 430 <result code>: <test name> (<progress info>) 431 432where ``<result-code>`` is a standard test result such as PASS, FAIL, XFAIL, 433XPASS, UNRESOLVED, or UNSUPPORTED. The performance result codes of IMPROVED and 434REGRESSED are also allowed. 435 436The ``<test name>`` field can consist of an arbitrary string containing no 437newline. 438 439The ``<progress info>`` field can be used to report progress information such 440as (1/300) or can be empty, but even when empty the parentheses are required. 441 442Each test result may include additional (multiline) log information in the 443following format: 444 445.. code-block:: none 446 447 <log delineator> TEST '(<test name>)' <trailing delineator> 448 ... log message ... 449 <log delineator> 450 451where ``<test name>`` should be the name of a preceding reported test, ``<log 452delineator>`` is a string of "*" characters *at least* four characters long 453(the recommended length is 20), and ``<trailing delineator>`` is an arbitrary 454(unparsed) string. 455 456The following is an example of a test run output which consists of four tests A, 457B, C, and D, and a log message for the failing test C: 458 459.. code-block:: none 460 461 PASS: A (1 of 4) 462 PASS: B (2 of 4) 463 FAIL: C (3 of 4) 464 ******************** TEST 'C' FAILED ******************** 465 Test 'C' failed as a result of exit code 1. 466 ******************** 467 PASS: D (4 of 4) 468 469LIT EXAMPLE TESTS 470~~~~~~~~~~~~~~~~~ 471 472The :program:`lit` distribution contains several example implementations of 473test suites in the *ExampleTests* directory. 474 475SEE ALSO 476-------- 477 478valgrind(1) 479