This document is an overview of the Mbed TLS test framework and test tools.
This document is incomplete. You can help by expanding it.
See https://tls.mbed.org/kb/development/test_suites
Each test case has a description which succinctly describes for a human audience what the test does. The first non-comment line of each paragraph in a .data
file is the test description. The following rules and guidelines apply:
generate_test_code.py
, outcome file tools) simple..data
file. If you can't think of a better description, the convention is to append #1
, #2
, etc. tests/scripts/check_test_cases.py
enforces some rules and warns if some guidelines are violated.
Each test case in ssl-opt.sh
has a description which succinctly describes for a human audience what the test does. The test description is the first parameter to run_tests
.
The same rules and guidelines apply as for unit test descriptions. In addition, the description must be written on the same line as run_test
, in double quotes, for the sake of check_test_cases.py
.
Unit tests and ssl-opt.sh
record the outcome of each test case in a test outcome file. This feature is enabled if the environment variable MBEDTLS_TEST_OUTCOME_FILE
is set. Set it to the path of the desired file.
If you run all.sh --outcome-file test-outcome.csv
, this collects the outcome of all the test cases in test-outcome.csv
.
The outcome file is in a CSV format using ;
(semicolon) as the delimiter and no quoting. This means that fields may not contain newlines or semicolons. There is no title line.
The outcome file has 6 fields:
Linux-x86_64
or Linux-x86_64-gcc7-msan
.config.h
).test_suite_xxx
or ssl-opt
.PASS
, SKIP
or FAIL
.This section describes ways to test Mbed TLS if the target architecture is different from the architecture on the host.
QEMU supports syscall emulation, which combines instruction emulation with forwarding of Linux system calls to the host system to allow you to run cross-compiled Linux binaries as if they were native to the host. Moreover, emulation happens automatically if available, so that no changes to the command line are necessary.
This implies that all test suites, test programs and test scripts can be invoked for cross-builds of Mbed TLS, provide an appropriate version of QEMU supporting syscall emulation for the target architecture is installed.
This example explains how to test Mbed TLS' support for the ARM-v8A Cryptography Extensions using cross-compilation and QEMU syscall emulation.
First, cross-compile Mbed TLS for ARM-v8A + Cryptography Extensions, e.g.:
export CC='aarch64-linux-gnu-gcc' export CFLAGS='-Ofast -march=armv8-a+crypto' export LDFLAGS='-static' ./scripts/config.pl set MBEDTLS_ARMV8CE_AES_C make -j$(nproc)
Next, test programs and scripts can be run as if they were compiled for the host architecture, e.g.:
make test