| --- | 
 | title: "OpenTitan System Tests" | 
 | --- | 
 |  | 
 | System tests are end-to-end tests for the whole OpenTitan system. They operate | 
 | on build outputs (typically in `build-bin`) and can be used to check that the | 
 | full system, consisting of software, hardware, and tooling, works as expected. | 
 |  | 
 | Tests can be executed against different target platforms (such as FPGAs or | 
 | simulations), even though not all OpenTitan-supported targets are supported at | 
 | the moment. | 
 |  | 
 | ## Available tests | 
 |  | 
 | * `earlgrey/test_sim_verilator.py`: Run various software tests against a | 
 |   Verilator-built simulation of the Earl Grey design. | 
 | * `earlgrey/test_fpga_cw310.py`: Run various software tests against the | 
 |   Earl Grey design running on a ChipWhisperer CW310 FPGA board. | 
 | * `earlgrey/test_fpga_nexysvideo.py`: Run various software tests against the | 
 |   Earl Grey design running on a Nexys Video FPGA board. | 
 |  | 
 | ## Run the tests | 
 |  | 
 | ### Prerequisites | 
 |  | 
 | Before the tests can be run, the various components of OpenTitan need to be | 
 | built and present in the `BIN_DIR` directory (typically `$REPO_TOP/build-bin`). | 
 |  | 
 | Alternatively, the tests can be executed against any pre-built OpenTitan | 
 | snapshot available from GitHub releases, or from CI. | 
 |  | 
 | To test build artifacts from CI follow these steps: | 
 |  | 
 | * Go to an individual build job in the | 
 |   ["CI" pipelines of Azure Pipelines](https://dev.azure.com/lowrisc/opentitan/_build?definitionId=9&_a=summary). | 
 |   (The page where the individual steps for a single change are listed, not the | 
 |   job overview page.) | 
 | * In the information bar on the top click on a link labeled "5 published" | 
 |   (or something similar). It will take you to a page titeled "Artifacts". | 
 | * Expand the "opentitan-dist" artifact, and download the file | 
 |   `opentitan-snapshot-xxx.tar.xz`. | 
 | * Untar this file and set the `BIN_DIR` environment variable to point to the | 
 |   extracted directory, for example: | 
 |  | 
 |   ```sh | 
 |   tar -xf opentitan-snapshot-20191101-1-2462-g3ad4fd1b.tar.xz | 
 |   export BIN_DIR=$PWD/opentitan-snapshot-20191101-1-2462-g3ad4fd1b | 
 |   ``` | 
 |  | 
 | ### Configuration | 
 |  | 
 | Tests running on FPGA boards need some configuration to help with the discovery | 
 | of things like the UART port. To configure these settings, copy the | 
 | configuration file example from `test/systemtest/test-localconf.yaml.example` | 
 | to one of the supported configuration file locations: | 
 |  | 
 | * `$OPENTITAN_TEST_LOCALCONF` | 
 | * `$XDG_CONFIG_HOME/opentitan/test-localconf.yaml` | 
 | * `$HOME/.config/opentitan/test-localconf.yaml` | 
 |  | 
 | ### Test execution | 
 |  | 
 | The pytest documentation gives a good overview of the available options to run | 
 | tests in the [Usage and Invocations](https://docs.pytest.org/en/stable/usage.html) | 
 | chapter. Here's a quick reference. | 
 |  | 
 | ```sh | 
 | # Run all tests | 
 | pytest test/systemtest | 
 |  | 
 | # Run tests in a specific file | 
 | pytest test/systemtest/earlgrey/test_sim_verilator.py | 
 |  | 
 | # Run a specific test in a specific parametrization | 
 | pytest test/systemtest/earlgrey/test_sim_verilator.py -k test_apps_selfchecking[usbdev_test] | 
 |  | 
 | # Run tests with more verbose output | 
 | pytest test/systemtest -sv --log-cli-level=DEBUG | 
 | ``` |