Build and run PC based tests
============================

Many components within the Trusted Services project may be built and tested within a native PC environment.
PC based testing is an important part of the development flow and can provide a straight-forward way to check
for regressions and debug problems. PC based tests range from small unit tests up to end-to-end service tests.
All test cases in the Trusted Services project are written for the CppUTest test framework.

The test executables most often used for PC based testing of Trusted Services components are:

  - *component-test* - a PC executable that runs many component level tests.
  - *ts-service-test* - contains a set of service-level end-to-end tests. For PC build, service providers
    are included in the libts library.
  - *psa-api-test* - PSA functional API conformance tests (from external project).


Before you start
----------------
Before attempting to run any builds, ensure that all necessary tools are installed.  See: :ref:`Software Requirements`


Build and run *component-test*
------------------------------

From the root directory of the checked-out TS project, enter the following::

  cmake -B build-ct -S deployments/component-test/linux-pc
  make -C build-ct install
  build-ct/install/linux-pc/bin/component-test -v


Build and run *ts-service-test*
-------------------------------

From the root directory of the checked-out TS project, enter the following::

  cmake -B build-ts -S deployments/ts-service-test/linux-pc
  make -C build-ts install
  LD_PRELOAD=build-ts/install/linux-pc/lib/libts.so build-ts/install/linux-pc/bin/ts-service-test -v

Build and run *psa-api-test*
----------------------------
Tests for each API are built as separate executables. Test are available for the following APIs::

  crypto
  initial_attestation
  internal_trusted_storage
  protected_storage

To build and run tests for the Crypto API, enter the following (use the same flow for other APIs)::

  cmake -B build-pa deployments/psa-api-test/crypto/linux-pc
  make -C build-pa install
  LD_PRELOAD=build-pa/install/linux-pc/lib/libts.so build-pa/install/linux-pc/bin/psa-crypto-api-test

psa-api test binaries accept the listed command-line arguments:

===========  ====================================================================
CL argument  Description
===========  ====================================================================
-v           verbose mode
-h           print supported arguments
-l           print a list of all the available tests
-t           run only the listed tests with 'test\_' prefix and semicolon postfix
             e.g: "-t test_201;test_205;test_260;"
===========  ====================================================================

More information
----------------
For more information about deployments and building, see: :ref:`Build Instructions`

PSA functional API conformance tests git location: https://github.com/ARM-software/psa-arch-tests.git

--------------

*Copyright (c) 2022-2023, Arm Limited and Contributors. All rights reserved.*

SPDX-License-Identifier: BSD-3-Clause
