
Zephyr Sanity Tests
###################

This script scans for the set of unit test applications in the git repository
and attempts to execute them. By default, it tries to build each test
case on boards marked as default in the board definition file.

The default options will build the majority of the tests on a defined set of
boards and will run in an emulated environment (QEMU) if available for the
architecture or configuration being tested.

In normal use, sanitycheck runs a limited set of kernel tests (inside
QEMU).  Because of its limited text execution coverage, sanitycheck
cannot guarantee local changes will succeed in the full build
environment, but it does sufficient testing by building samples and
tests for different boards and different configurations to help keep the
full code tree buildable.

To run the script in the local tree, follow the steps below:

::

        $ source zephyr-env.sh
        $ ./scripts/sanitycheck

If you have a system with a large number of cores, you can build and run
all possible tests using the following options:

::

        $ ./scripts/sanitycheck --all --enable-slow

This will build for all available boards and run all applicable tests in
a simulated (QEMU) environment.

The sanitycheck script accepts the following optional arguments:

  -h, --help
                        show this help message and exit
  -p PLATFORM, --platform PLATFORM
                        Platform filter for testing. This option may be used
                        multiple times. Testcases will only be built/run on
                        the platforms specified. If this option is not used,
                        then platforms marked as default in the platform
                        metadata file will be chosen to build and test.
  -a ARCH, --arch ARCH  Arch filter for testing. Takes precedence over
                        --platform. If unspecified, test all arches. Multiple
                        invocations are treated as a logical 'or' relationship
  -t TAG, --tag TAG     Specify tags to restrict which tests to run by tag
                        value. Default is to not do any tag filtering.
                        Multiple invocations are treated as a logical 'or'
                        relationship
  -e EXCLUDE_TAG, --exclude-tag EXCLUDE_TAG
                        Specify tags of tests that should not run. Default is
                        to run all tests with all tags.
  -f, --only-failed     Run only those tests that failed the previous sanity
                        check invocation.
  -c CONFIG, --config CONFIG
                        Specify platform configuration values filtering. This
                        can be specified two ways: <config>=<value> or just
                        <config>. The defconfig for all platforms will be
                        checked. For the <config>=<value> case, only match
                        defconfig that have that value defined. For the
                        <config> case, match defconfig that have that value
                        assigned to any value. Prepend a '!' to invert the
                        match.
  -s TEST, --test TEST  Run only the specified test cases. These are named by
                        <path to test project relative to --testcase-
                        root>/<testcase.yaml section name>
  -l, --all             Build/test on all platforms. Any --platform arguments
                        ignored.
  -o TESTCASE_REPORT, --testcase-report TESTCASE_REPORT
                        Output a CSV spreadsheet containing results of the
                        test run
  -d DISCARD_REPORT, --discard-report DISCARD_REPORT
                        Output a CSV spreadsheet showing tests that were
                        skipped and why
  --compare-report COMPARE_REPORT
                        Use this report file for size comparison
  -B SUBSET, --subset SUBSET
                        Only run a subset of the tests, 1/4 for running the
                        first 25%, 3/5 means run the 3rd fifth of the total.
                        This option is useful when running a large number of
                        tests on different hosts to speed up execution time.
  -N, --ninja           Use the Ninja generator with CMake
  -y, --dry-run         Create the filtered list of test cases, but don't
                        actually run them. Useful if you're just interested in
                        --discard-report
  -r, --release         Update the benchmark database with the results of this
                        test run. Intended to be run by CI when tagging an
                        official release. This database is used as a basis for
                        comparison when looking for deltas in metrics such as
                        footprint
  -w, --warnings-as-errors
                        Treat warning conditions as errors
  -v, --verbose         Emit debugging information, call multiple times to
                        increase verbosity
  -i, --inline-logs     Upon test failure, print relevant log data to stdout
                        instead of just a path to it
  --log-file FILENAME   log also to file
  -m, --last-metrics    Instead of comparing metrics from the last --release,
                        compare with the results of the previous sanity check
                        invocation
  -u, --no-update       do not update the results of the last run of the
                        sanity checks
  -F, --load-tests      Load list of tests to be run from file
  -E, --save_tests      Save list of tests to be run to file
  -b, --build-only      Only build the code, do not execute any of it in QEMU
  -j JOBS, --jobs JOBS  Number of cores to use when building, defaults to
                        number of CPUs * 2
  -H FOOTPRINT_THRESHOLD, --footprint-threshold FOOTPRINT_THRESHOLD
                        When checking test case footprint sizes, warn the user
                        if the new app size is greater then the specified
                        percentage from the last release. Default is 5. 0 to
                        warn on any increase on app size
  -D, --all-deltas      Show all footprint deltas, positive or negative.
                        Implies --footprint-threshold=0
  -O OUTDIR, --outdir OUTDIR
                        Output directory for logs and binaries.
  -n, --no-clean        Do not delete the outdir before building. Will result
                        in faster compilation since builds will be incremental
  -T TESTCASE_ROOT, --testcase-root TESTCASE_ROOT
                        Base directory to recursively search for test cases.
                        All testcase.yaml files under here will be processed.
                        May be called multiple times. Defaults to the
                        'samples' and 'tests' directories in the Zephyr tree.
  -A BOARD_ROOT, --board-root BOARD_ROOT
                        Directory to search for board configuration files. All
                        .yaml files in the directory will be processed.
  -z SIZE, --size SIZE  Don't run sanity checks. Instead, produce a report to
                        stdout detailing RAM/ROM sizes on the specified
                        filenames. All other command line arguments ignored.
  -S, --enable-slow     Execute time-consuming test cases that have been
                        marked as 'slow' in testcase.yaml. Normally these are
                        only built.
  -R, --enable-asserts  Build all test cases with assertions enabled.
  --disable-asserts     Build all test cases with assertions disabled.
  -Q, --error-on-deprecations
                        Error on deprecation warnings.
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        Extra arguments to pass to the build when compiling
                        test cases. May be called multiple times. These will
                        be passed in after any sanitycheck-supplied options.
  -C, --coverage        Generate coverage report for unit tests, and tests and
                        samples run in native_posix.


Board Configuration
*******************

To build tests for a specific board and to execute some of the tests on real
hardware or in an emulation environment such as QEMU a board configuration file
is required which is generic enough to be used for other tasks that require a
board inventory with details about the board and its configuration that is only
available during build time otherwise.

The board metadata file is located in the board directory and is structured
using the YAML markup language. The example below shows a board with a data
required for best test coverage for this specific board:

.. code-block:: yaml

        identifier: quark_d2000_crb
        name: Quark D2000 Devboard
        type: mcu
        arch: x86
        toolchain:
          - zephyr
          - issm
        ram: 8
        flash: 32
        testing:
          default: true
          ignore_tags:
            - net
            - bluetooth


identifier:
  A string that matches how the board is defined in the build system. This same
  string is used when building, for example when calling 'cmake'::

  # cmake -DBOARD=quark_d2000_crb ..

name:
  The actual name of the board as it appears in marketing material.
type:
  Type of the board or configuration, currently we support 2 types: mcu, qemu
arch:
  Architecture of the board
toolchain:
  The list of supported toolchains that can build this board. This should match
  one of the values used for 'ZEPHYR_TOOLCHAIN_VARIANT' when building on the command line
ram:
  Available RAM on the board (specified in KB). This is used to match testcase
  requirements.  If not specified we default to 128KB.
flash:
  Available FLASH on the board (specified in KB). This is used to match testcase
  requirements.  If not specified we default to 512KB.
supported:
  A list of features this board supports. This can be specified as a single word
  feature or as a variant of a feature class. For example:

  ::

        supported:
          - pci

  This indicates the board does support PCI. You can make a testcase build or
  run only on such boards, or:

  ::

        supported:
          - netif:eth
          - sensor:bmi16

  A testcase can both depend on 'eth' to only test ethernet or on 'netif' to run
  on any board with a networking interface.

testing:
  testing relating keywords to provide best coverage for the features of this
  board.

  default: [True|False]:
    This is a default board, it will tested with the highest priority and is
    covered when invoking the simplified sanitycheck without any additional
    arguments.
  ignore_tags:
    Do not attempt to build (and therefore run) tests marked with this list of
    tags.




Test Cases
**********

Test cases are detected by the presence of a 'testcase.yaml' or a 'sample.yaml'
files in the application's project directory. This file may contain one or more
entries in the test section each identifying a test scenario. The name of
the test case only needs to be unique for the test cases specified in
that testcase meta-data.

Test cases are written using the YAML syntax and share the same structure as
samples. The following is an example test with a few options that are
explained in this document.


::

        tests:
          test:
            build_only: true
            platform_whitelist: qemu_cortex_m3 qemu_x86 arduino_101
            tags: bluetooth
          test_br:
            build_only: true
            extra_args: CONF_FILE="prj_br.conf"
            filter: not CONFIG_DEBUG
            platform_exclude: quark_d2000_crb
            platform_whitelist: qemu_cortex_m3 qemu_x86
            tags: bluetooth


A sample with tests will have the same structure with additional information
related to the sample and what is being demonstrated:

::

        sample:
          name: hello world
          description: Hello World sample, the simplest Zephyr application
          platforms: all
        tests:
          test:
            build_only: true
            tags: samples tests
            min_ram: 16
          singlethread:
            build_only: true
            extra_args: CONF_FILE=prj_single.conf
            filter: not CONFIG_BT and not CONFIG_GPIO_SCH
            tags: samples tests
            min_ram: 16

The full canonical name for each test case is:

::

        <path to test case>/<test entry>

Each test block in the testcase meta data can define the following key/value
pairs:

tags: <list of tags> (required)
    A set of string tags for the testcase. Usually pertains to
    functional domains but can be anything. Command line invocations
    of this script can filter the set of tests to run based on tag.

skip: <True|False> (default False)
    skip testcase unconditionally. This can be used for broken tests.

slow: <True|False> (default False)
    Don't run this test case unless --enable-slow was passed in on the
    command line. Intended for time-consuming test cases that are only
    run under certain circumstances, like daily builds. These test cases
    are still compiled.

extra_args: <list of extra arguments>
    Extra arguments to pass to Make when building or running the
    test case.

extra_configs: <list of extra configurations>
    Extra configuration options to be merged with a master prj.conf
    when building or running the test case. For example::

        common:
          tags: drivers adc
        tests:
          test:
            depends_on: adc
          test_resolution_6:
            extra_configs:
              - CONFIG_ADC_QMSI_SAMPLE_WIDTH=6
            platform_whitelist: quark_se_c1000_ss_devboard
            tags: hwtest


build_only: <True|False> (default False)
    If true, don't try to run the test under QEMU even if the
    selected platform supports it.

build_on_all: <True|False> (default False)
    If true, attempt to build test on all available platforms.

depends_on: <list of features>
    A board or platform can announce what features it supports, this option
    will enable the test only those platforms that provide this feature.

min_ram: <integer>
    minimum amount of RAM needed for this test to build and run. This is
    compared with information provided by the board metadata.

min_flash: <integer>
    minimum amount of ROM needed for this test to build and run. This is
    compared with information provided by the board metadata.

timeout: <number of seconds>
    Length of time to run test in QEMU before automatically killing it.
    Default to 60 seconds.

arch_whitelist: <list of arches, such as x86, arm, arc>
    Set of architectures that this test case should only be run for.

arch_exclude: <list of arches, such as x86, arm, arc>
    Set of architectures that this test case should not run on.

platform_whitelist: <list of platforms>
    Set of platforms that this test case should only be run for.

platform_exclude: <list of platforms>
    Set of platforms that this test case should not run on.

extra_sections: <list of extra binary sections>
    When computing sizes, sanitycheck will report errors if it finds
    extra, unexpected sections in the Zephyr binary unless they are named
    here. They will not be included in the size calculation.

filter: <expression>
    Filter whether the testcase should be run by evaluating an expression
    against an environment containing the following values:

    ::

            { ARCH : <architecture>,
              PLATFORM : <platform>,
              <all CONFIG_* key/value pairs in the test's generated defconfig>,
              *<env>: any environment variable available
            }

    The grammar for the expression language is as follows:

    expression ::= expression "and" expression
                 | expression "or" expression
                 | "not" expression
                 | "(" expression ")"
                 | symbol "==" constant
                 | symbol "!=" constant
                 | symbol "<" number
                 | symbol ">" number
                 | symbol ">=" number
                 | symbol "<=" number
                 | symbol "in" list
                 | symbol ":" string
                 | symbol

    list ::= "[" list_contents "]"

    list_contents ::= constant
                    | list_contents "," constant

    constant ::= number
               | string


    For the case where expression ::= symbol, it evaluates to true
    if the symbol is defined to a non-empty string.

    Operator precedence, starting from lowest to highest:

        or (left associative)
        and (left associative)
        not (right associative)
        all comparison operators (non-associative)

    arch_whitelist, arch_exclude, platform_whitelist, platform_exclude
    are all syntactic sugar for these expressions. For instance

        arch_exclude = x86 arc

    Is the same as:

        filter = not ARCH in ["x86", "arc"]

    The ':' operator compiles the string argument as a regular expression,
    and then returns a true value only if the symbol's value in the environment
    matches. For example, if CONFIG_SOC="quark_se" then

        filter = CONFIG_SOC : "quark.*"

    Would match it.

The set of test cases that actually run depends on directives in the testcase
filed and options passed in on the command line. If there is any confusion,
running with -v or --discard-report can help show why particular test cases
were skipped.

Metrics (such as pass/fail state and binary size) for the last code
release are stored in scripts/sanity_chk/sanity_last_release.csv.
To update this, pass the --all --release options.

To load arguments from a file, write '+' before the file name, e.g.,
+file_name. File content must be one or more valid arguments separated by
line break instead of white spaces.

Most everyday users will run with no arguments.
