# YAML tests

YAML is a structured, human-readable data-serialization language. Much like json
or proto, YAML refers to the structure and parser, and the schema used for any
particular application is defined by the application.

In Matter, we use YAML for describing tests and test steps. A YAML parser and
runner is then used to translate the YAML instructions into actions used to
interact with the device under test (DUT).

The main runner we use for testing in Matter parses the YAML instructions into
chip-tool commands.

The schema description for the Matter test YAML is available here:
[YAML Schema](./yaml_schema.md)

## Writing YAML tests

Most YAML tests are written for certification. These follow a standard format
that is used to display the test easily in the test harness.

### Placeholder for anatomy of a yaml test - need diagram

### Placeholder for anatomy of a test step - need diagram

### Common actions

#### Sending a cluster command

The following shows a test step sending a simple command with no arguments.

```yaml
- label: "This label gets printed"
  cluster: "On/Off"
  command: "On"
```

-   label - label to print before performing the test step
-   cluster - name of the cluster to send the command to
-   command - name of the command to send

This send the On command to the On/Off cluster on the DUT. For most tests, the
nodeID of the DUT and endpoint for the cluster are defined in the top-level
config section of the file and applied to every test step. However, these can
also be overwritten in the individual test steps.

The following shows how to send a command with arguments:

```yaml
- label: "This label gets printed before the test step"
  command: "MoveToColor"
  arguments:
      values:
          - name: "ColorX"
            value: 32768
          - name: "ColorY"
            value: 19660
          - name: "TransitionTime"
            value: 0
          - name: "OptionsMask"
            value: 0
          - name: "OptionsOverride"
            value: 0
```

-   label - label to print before performing the test step
-   command - name of the command to send
-   argument - this is a list parameter that takes either a "value" or "values"
    tag. Commands with arguments all use structured fields, which require the
    "values" tag with a list. Each of the fields is represented by a "name" and
    "value" pair

In this command, the cluster: tag is elided. The cluster for the entire test can
be set in the config section at the top of the test. This can be overwritten for
individual test steps (as above).

#### Reading and writing attributes

Reading and writing attributes is represented in the Matter test YAML schemas as
a special command that requires an additional "attribute" tag.

The following YAML would appear as a test step, and shows how to read an
attribute.

```yaml
- label: "TH reads the ClusterRevision from DUT"
  command: "readAttribute"
  attribute: "ClusterRevision"
```

The following YAML would appear as a test step and shows how to write an
attribute. Commands to write attributes always require an argument: tag.

```yaml
- label: "Write example attribute"
  command: "writeAttribute"
  attribute: "ExampleAttribute"
  arguments:
      value: 1
```

#### Parsing Responses

After sending a command or read or write attribute request, you may want to
verify the response. This is done using the "response" tag with various
sub-tags.

The following shows a simple response parsing with two (somewhat redundant)
checks.

```yaml
- label: "TH reads the ClusterRevision from DUT"
  command: "readAttribute"
  attribute: "ClusterRevision"
  response:
      value: 1
      constraints:
          minValue: 1
```

The following tags can be used to parse the response

| Example                                                                                                     | Description                                                                              |
| :---------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------- |
| response:<br />&emsp;value: [1, 2, 3, 4]                                                                    | must match exactly. Variables and saveAs values allowed                                  |
| response:<br />&emsp;values:<br />&emsp;&emsp;- name: response_field<br />&emsp;&emsp;&nbsp;&nbsp; value: 1 | Must match exactly<br />Use for commands that return command responses with named fields |
| response:<br /> &emsp; error: CONSTRAINT_ERROR                                                              | expect an error back (omit for success)<br />Variables and saveAs values will not work.  |
| response:<br />&emsp;constraints:                                                                           | more complex checks - see [Schema](./yaml_schema.md) for a complete description          |

#### Lists and structs

Lists and structs can be represented as follows:

Lists: `[1,2,3,4,5]`

structs: `{field1:value, field2:value}`

lists of structs:

```yaml
[
    { field1:value, field2:value, optionalfield:value },

    { field1:value, field2:value },
]
```

Note that structs are different than command and command response fields, which
are represented using name:, value: tags.

#### Pseudo clusters

Tests often require functionality that is not strictly cluster-based. Some of
this functionality is supported in YAML using pseudo-clusters. These clusters
accept command: tags like the DUT clusters to control the pseudo-cluster
functionality.

Some of the more common functionality is shown below:

Establishing a connection to the DUT. This is the first step in nearly every
test.

```yaml
- label: "Establish a connection to the DUT"
  cluster: "DelayCommands"
  command: "WaitForCommissionee"
  arguments:
      values:
          - name: "nodeId"
            value: nodeId
```

Wait for a user action:

```yaml
- label: "Do a simple user prompt message. Expect 'y' to pass."
  cluster: "LogCommands"
  command: "UserPrompt"
  arguments:
      values:
          - name: "message"
            value: "Please enter 'y' for success"
          - name: "expectedValue"
            value: "y"
```

Wait for a time:

```yaml
- label: "Wait for 5S"
  cluster: "DelayCommands"
  command: "WaitForMs"
  arguments:
      values:
          - name: "ms"
            value: 5000
```

A full description of the available pseudo-clusters and their commands is
available at [Pseudo-cluster description](./yaml_pseudocluster.md).

#### Config variables and saveAs:

Certain tags can use variables that are either declared in the config: section
or saved from other steps. Variables that are declared in the config can be
overwritten on the command line when running locally or through the config file
in the test harness.

To declare config variables in the config section, use a label with the desired
name, then provide the type and defaultValue tags as sub-tags.

```yaml
config:
    nodeId: 0x12344321
    cluster: "Unit Testing"
    endpoint: 1
    myArg1:
        type: int8u
        defaultValue: 5
```

Variables can also be saved from responses:

```yaml
- label: "Send Test Add Arguments Command"
  command: "TestAddArguments"
  arguments:
      values:
          - name: "arg1"
            value: 3
          - name: "arg2"
            value: 17
  response:
      values:
          - name: "returnValue"
            saveAs: TestAddArgumentDefaultValue
            value: 20
```

Variables can then be used in later steps:

```yaml
- label: "Send Test Add Arguments Command"
  command: "TestAddArguments"
  arguments:
      values:
          - name: "arg1"
            value: 3
          - name: "arg2"
            value: 17
  response:
      values:
          - name: "returnValue"
            value: TestAddArgumentDefaultValue
```

Tags where variables can be used are noted in the
[schema description](./yaml_schema.md).

Config variables can be used to implement PIXIT values in tests.

#### Gating tests and steps: PICS, TestEqualities and runIf

The PICS tag can be used to unconditionally gate a test step on the PICS value
in the file.

The PICS tag can handle standard boolean operations on pics (!, ||, &&, ()).

A PICS tag at the top level of the file can be used to gate the entire test in
the test harness. Note that full-test gating is not currently implemented in the
local runner or in the CI.

Some test steps need to be gated on values from earlier in the test. In these
cases, PICS cannot be used. Instead, the `runIf` tag can be used. This tag
requires a boolean value. To convert values to booleans, the TestEqualities
function can be use. See
[TestEqualities](https://github.com/project-chip/connectedhomeip/blob/master/src/app/tests/suites/TestEqualities.yaml)
for an example of how to use this pseudo-cluster.

In addition to the `PICS` and `runIf` tags, there are the `minRevision` and
`maxRevision` tags which use the step's `cluster`'s `ClusterRevision` attribute
to determine if a step should be skipped because it only applies to older or
newer versions. A step will be skipped if the cluster's `ClusterRevision`
attribute is < `minRevision` (if present), or > `maxRevision` (if present).

Here is an example of only checking for the value of a given attribute if
`ClusterRevision` >= 3 using `minRevision`.

```yaml
- label: "Verify the minimum-to-support Max Paths Per Invoke value"
  command: "readAttribute"
  attribute: "MaxPathsPerInvoke"
  minRevision:
      3 # Attribute was added in revision 3, so this step applies
      # to revision >= 3.
  response:
      constraints:
          minValue: 1
```

#### Setting step timeouts

The timeout argument can be used for each individual test step to set the time
the runner will wait for a test step to complete before reporting a failure.

Note that this timeout is different than the subscription report timeout and the
subscription report timeout is not currently adjustable in YAML.

There several other options for configuring test steps as shown in the
[YAML schema](./yaml_schema.md) document.

## Running YAML tests

YAML scripts are parsed and run using a python-based runner program that parses
the file, then translates the tags into chip-tool commands, and sends those
commands over a socket to chip-tool (running in interactive mode).

### Running locally

#### Commissioning the DUT

All YAML tests assume that the DUT has previously been commissioned before
running. DUTs should be commissioned using chip-tool. Use the same KVS file when
running the test.

By default, the tests use node ID 0x12344321. The easiest way to run the tests
is to commission with this node ID. Alternately, you can change the target node
ID on the command line, as shown in the [Running the tests](#running-the-tests)
section.

#### Running the tests

There are several options for running tests locally. Because the YAML runner
uses python, it is necessary to compile and install the chip python package
before using any YAML runner script.

First activate the matter environment using either

```shell
. ./scripts/bootstrap.sh
```

or

```shell
. ./scripts/activate.sh
```

bootstrap.sh should be used for for the first setup, activate.sh may be used for
subsequent setups as it is faster.

Next build the python wheels and create a venv

```shell
./scripts/build_python.sh -i out/python_env
source out/python_env/bin/activate
```

Compile chip-tool:

```shell
./scripts/build/build_examples.py --target linux-x64-chip-tool build
```

NOTE: use the target appropriate to your system

[chiptool.py](https://github.com/project-chip/connectedhomeip/blob/master/scripts/tests/chipyaml/chiptool.py)
can be used to run tests against a commissioned DUT (commissioned by chip-tool).
To commission a DUT using chip-tool use the pairing command. For example:

```shell
./out/linux-x64-chip-tool/chip-tool pairing code 0x12344321 MT:-24J0AFN00KA0648G00
```

In this example, 0x12344321 is the node ID (0x12344321 is the test default) and
MT:-24J0AFN00KA0648G00 is the QR code.

The chiptool.py tool can then be used to run the tests. For example:

```shell
./scripts/tests/chipyaml/chiptool.py tests Test_TC_OO_2_1 --server_path ./out/linux-x64-chip-tool/chip-tool
```

NOTE: substitute the appropriate test name and chip-tool path as appropriate.

A list of available tests can be generated using:

```shell
./scripts/tests/chipyaml/chiptool.py list
```

Config variables can be passed to chiptool.py after the script by separating
with --

```shell
./scripts/tests/chipyaml/chiptool.py tests Test_TC_OO_2_1 --server_path ./out/linux-x64-chip-tool/chip-tool -- nodeId 0x12344321
```

Each test defines a default endpoint to target. Root node cluster tests run
against endpoint 0 by default. Most other cluster tests run against endpoint 1.
You can set the endpoint for the test using the `endpoint` config variable.

#### Factory resetting the DUT

On the host machine, you can simulate a factory reset by deleting the KVS file.
If you did not specify a location for the KVS file when starting the
application, the KVS file will be in /tmp as chip_kvs

### Running in the CI

-   YAML tests added to the certification directory get run automatically
    -   src/app/tests/suites/certification/
    -   PICS file: src/app/tests/suites/certification/ci-pics-values
-   If you DON’T want to run a test in the CI
    -   (ex under development), add it to \_GetInDevelopmentTests in
        `scripts/tests/chiptest/__init__.py`

Please see [CI testing](./ci_testing.md) for more information about how to set
up examples apps, PICS and PIXIT values for use in the CI.

### Defining the CI test arguments

YAML tests will run against the `all-clusters` application by default. If you
need to run the same test against a different application or with multiple sets
of custom arguments, the YAML file supports a `CI` entry that contains a list of
`name`, `app` and `args` (optional) to execute.

```yaml
CI:
    - name: "This is displayed in logs"
      # application name MUST be a supported placeholder
      app: all-clusters
    - name: "Some other names"
      app: rvc
      # Optional arguments, a list
      args: ["--vendor-name", "Testing"]
    - name: "Test against lit-icd app"
      app: lit-icd
      # List can be split in separate lines
      args:
          - --vendor-name
          - test123
```

Application names are supported placeholders that will be replaced with the full
application path. Example supported applications (see `test_definition.py` for a
full list):

-   `all-clusters`
-   `bridge`
-   `closure`
-   `energy-gateway`
-   `evse`
-   `water-heater`
-   `fabric-sync`
-   `lit-icd`
-   `lock`
-   `microwave-oven`
-   `network-manager`
-   `ota-requestor`
-   `rvc`
-   `tv`

### Running in the TH

TODO: Do we have a permanent link to the most up to date TH documentation? If
so, add here.
