= Running Mbed TLS tests on Mbed OS =
== Unit tests ==
You can run the Mbed TLS unit tests on Mbed OS.
=== Prerequisites ===
- Mbed OS ≥5.5.1
- Mbed TLS ≥2.13 (this doesn't have to be the version in your copy of Mbed OS)
- The [[https://github.com/ARMmbed/mbed-os-tools | Mbed OS development tools]] (`pip install --user mbed-tools`), including [[https://github.com/ARMmbed/mbed-os-tools/tree/master/packages/mbed-greentea | Greentea]] (`mbed-gt`)
Some test suites may not work on platforms with too little space for code, stack or heap.
=== Building the tests ===
- Check out [[https://github.com/ARMmbed/mbed-os | mbed-os]]
- `cd mbed-os/features/mbedtls/importer/TARGET_IGNORE`
- Optional: check out mbedtls) — you can work in your working Mbed TLS branch
- `cd mbedtls/tests`
- `make generate-target-tests`
- `mkdir TESTS/host_tests`
- `cp scripts/mbedtls_test.py TESTS/host_tests`
- copy the `TESTS` directory in `mbed-os/features/mbedtls/`
- `cd` back to `mbed-os/`
- `mbed test --compile -m K64F -t GCC_ARM -n features-mbedtls-tests-mbedtls*` (adapt `-m` to your platform and `-t` to your compiler)
You should now see mbedtls tests with the command `mbedgt -V -l`
=== Running the tests ===
To run the AES tests, for example:
```
mbedgt -V -n features-mbedtls-tests-mbedtls-test_suite_aes*
```
=== Debugging the on-target tests ===
To debug the tests, you will need to use a pyocd-gdbserver.
In order to debug the tests, you will need:
# Burn the test image on the target
# Run pyocd-gdbserver: `pyocd-gdbserver`
# Run your gdb client
# Run mbedhtrun with --skipflash and --skip reset. For example:
```
sudo mbedhtrun -m NRF52840_DK -p /dev/ttyACM0:9600 -f "BUILD/tests/NRF52840_DK/GCC_ARM-DEBUG/features/mbedtls/TESTS/mbedtls/test_suite_psa_crypto/test_suite_psa_crypto" -e "features/mbedtls/TESTS/host_tests" -d /media/roneld01/DAPLINK1 -C 6 -c default -t 1102000044203120414a4e39313031313730303797969903 -r default --sync 5 --skip-flash --skip-reset
```
> Note: when running the mbedgt for the test with -V parameter, you will see the mbedhtrun command that it runs. Just copy this line, and add the --skip-reset and --skip-flash parameters
> Note: The tests are generated with lines that start with #line. The debugger doesn't neccessary recognize these lines, and might not interpret the test files. You sould delete the lines that start with "#line" and recompile. (There may be a way to have the debugger point to the origin of the files - target_test.function and helpers.function but I didn't check this)