Build test runner ================= This directory captures build test case definitions and a tool to execute the test based on the data. The tool combines the power of shell scripting with the power of structured data (|yaml|). The bridge between the two technologies is provided by |jinja2| template engine and |yasha|. Dependencies ------------ |Jinja2| and |yasha| are python tools and python3 is needed to run the tests. Please install the following tools into your build environment: - python3 - pip3 After this please install further pip packages listed in ``requirements.txt`` as: .. code:: shell pip3 install -r requirements.txt .. note:: This document lists the dependencies of this tool only. To be able to successfully run the build tests further tools are needed. Please refer to the ``Trusted Services`` documentation for details. Files ------- .. uml:: @startsalt { {T + b-test ++Makefile | generate and run tests ++Readme.rst | this document ++requirements.txt | pip package dependencies ++run.sh.j2 | shell script template ++test_data.schema.json | JSON schema for test case data ++test_data.yaml | test case data ++//user.env// | optional user specific settings } } @endsalt Design ------ The project needs a convenient way to define and execute "build tests". This test aims to ensure all build configurations are in a good working condition. Testing is done by executing build of all supported build configurations. In order to make the testing robust and easy to use a "data driven" approach is the best fit. With this test cases are described by pure data and this data is processed by some tool which is responsible for test execution. For command execution the bash shell is a good candidate. It provides portability between OSs, is widely adopted and well tested. Unfortunately shells are not good on handling structured data. To address this shortcoming templating is utilized or "code generation" is used. The shell script to execute the command is generated based on a template file and the test data. Since python is already a dependency of Trusted Services we selected the |Jinja2| template engine to go with, and to decrease maintenance cost, we use it trough |yasha|. .. uml:: @startuml [test_data.yaml] --> [yasha] [run.sh.j2] --> [yasha] [//user.env//] -right-> [run.sh] [yasha] --> [run.sh] @enduml Usage ----- There are two "entry points" to the tests. If the intention is to run all tests, issue ``make``. Makefile """""""" The makefile is responsible to provide a high level "API". It allows executing the script generation process and to run the tests. It ensures all components are fresh before being executed. Issue ``make help`` to get a list of supported commands. run.sh """""" ``run.sh`` is the test runner. It is responsible to execute the needed builds in a proper way and thus validate the build definitions. Execute ``run.sh help`` to get further details. -------------- .. |yasha| replace:: `yasha`_ .. |jinja2| replace:: `Jinja2`_ .. |yaml| replace:: `yaml`_ .. _Jinja2: https://palletsprojects.com/p/jinja .. _yasha: https://github.com/kblomqvist/yasha .. _yaml: https://yaml.org *Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.* SPDX-License-Identifier: BSD-3-Clause