The unit testing approach is to create a separate application with Matter test library dependence. Each Matter project component implements the set of unit tests that are located in the test
directory, e.g. src/inet/tests
. Those sources are built as a static library that can be linked to the unit test application separately or as a monolithic test library. The common Matter test library collects all test cases and provides the engine based on Pigweed Unit Test to run them in the application.
The Open IoT SDK unit tests implementation are located in the src/test_driver/openiotsdk/unit-tests
directory. This project builds a separate application for each Matter component that is tested. It's built using Open IoT SDK and run inside an emulated target through the Arm FVP model for the Corstone-300 MPS3.
The list of currently supported Matter's component tests:
accesstest AppDataModelTests AppTests ASN1Tests BDXTests ChipCryptoTests ControllerDataModelTests CoreTests CredentialsTest ICDServerTests InetLayerTests MdnsTests MessagingLayerTests MinimalMdnsCoreTests MinimalMdnsRecordsTests MinimalMdnsRespondersTests PlatformTests RawTransportTests RetransmitTests SecureChannelTests SetupPayloadTests SupportTests SystemLayerTests TestShell UserDirectedCommissioningTests
Each application links the specific Matter test library, executes registered tests and prints the result which is the number of tests that failed.
The required environment is the same as for the Matter examples. For information on how to set it up see Open IoT SDK examples environment.
The configuration options are the same as for the Matter examples. For information on how to configure unit-tests applications see Open IoT SDK examples configuration.
The build process means creating a separate executable file for each Matter tested component. It assumes the use of all supported test libraries and creating independent applications from them.
You can build unit tests by using a VSCode task or by calling the build script directly from the command line.
Tasks: Run Task
Build Open IoT SDK unit-tests
This will call the script with the selected parameters.
You can call the script directly yourself.
${MATTER_ROOT}/scripts/examples/openiotsdk_example.sh unit-tests
Use --help
to get more information about the script options.
Unit-tests applications are run independently. It runs in the background and opens a telnet session. The telnet client connects to the port used by the FVP
. When the telnet process is terminated it will also terminate the FVP
instance.
To exit the telnet session, type CTRL + ]. This changes the command prompt to show as:
telnet>
Back in the terminal, type in the word ‘close’ to terminate the session.
telnet> close
You can run specific unit test by using a VSCode task or by calling the run script directly from the command line.
Tasks: Run Task
Run Open IoT SDK unit-tests
This will call the script with the selected example name.
You can call the script directly yourself.
${MATTER_ROOT}/scripts/examples/openiotsdk_example.sh -C run unit-tests <unit test name>
Run the Pytest integration test for the specific unit test application.
The test result can be found in the src/test_driver/openiotsdk/integration-tests/unit-tests/test_report_<unit test name>.json
file.
You can execute the integration test for specific unit test by using a VSCode task or by calling the run script directly from the command line.
Tasks: Run Task
Test Open IoT SDK unit-tests
This will call the scripts with the selected example name.
You can call the script directly yourself.
${MATTER_ROOT}/scripts/examples/openiotsdk_example.sh -C test unit-tests <unit test name>
💡 Notes:
Use
test
command without a specific test name, runs all supported unit tests:
${MATTER_ROOT}/scripts/examples/openiotsdk_example.sh -C test unit-tests
Before debugging ensure the following:
The debug environment is correctly setup: debugging setup.
The unit tests are compiled with debug symbols enabled:
For CLI:
${MATTER_ROOT}/scripts/examples/openiotsdk_example.sh -d true unit-tests
For the VSCode task:
=> Use debug mode (true)
You can debug the specific unit test by using a VSCode launch task:
Run and Debug
from the primary side menu or press Ctrl+Shift+DDebug Open IoT SDK unit-tests application
from the drop down listStart Debugging
(green triangle) or press F5As soon as a debugging session starts, the DEBUG CONSOLE
panel is displayed and shows the debugging output. Use debug controls to debug the current application.
The application with GDB Remote Connection Plugin runs in the background and opens a telnet session in terminal. The telnet client connects to the port used by the FVP
. When the telnet process is terminated it will also terminate the FVP
instance.
To exit the telnet session, type CTRL + ]. This changes the command prompt to show as:
telnet>
Back in the terminal, type in the word ‘close’ to terminate the session.
telnet> close
💡 Notes:
As you can see above, you will need to select the name of the unit test twice. This is because the debug task needs to launch the run task and currently VS code has no way of passing parameters between tasks.
To to add an existing Matter's component test to unit tests project, extend the list in the src/test_driver/openiotsdk/unit-tests/test_components.txt
file with a test name (test_name
). After that, the new test is built and available in all necessary tools such as helper script scripts/examples/openiotsdk_example.sh
or VSCode tasks.
Example:
... test_name ...
💡 Notes:
The existing Matter's component tests are built as a separate libraries. The
src/BUILD.gn
GN project collects them in the target group. Make sure that the test you want to add is not skipped for the Open IoT SDK platform.Remember to update the list of supported Matter's component tests at the top of this document.