# The cirque testing suite Cirque simulates complex network topologies based upon docker nodes. On a single Linux machine, it can create multiple nodes with network stacks that are independent from each other. Some nodes may be connected to simulated Thread networks, others may connect to simulated BLE or WiFi. In Project CHIP, cirque is used for integration tests. There is a script for running cirque tests, you can find it at `scripts/tests/cirque_tests.sh` ## "Docker out of docker" setup If you don't want cirque break your local environment, you can enter a environment insider docker ``` integrations/docker/images/stage-2/chip-build-cirque/run.sh --privileged --volume /dev/pts:/dev/pts --volume /tmp:/tmp -it -- bash ``` ## Setting up cirque environment After checkout, in your local project chip directory, run: ``` git submodule update --init scripts/tests/cirque_tests.sh bootstrap ``` It will: 1. Install necessary packages required by cirque, 2. Build `project-chip/chip-cirque-device-base:latest` docker image for running devices, 3. Build openthread for simulating thread network. > Note: Suggest using a clean checkout before running this. ## Run tests You can run the tests by: ``` scripts/tests/cirque_tests.sh run_all_tests ``` You can get more information from the terminal output (like the location of logs). > Note: The container (as well as the networks) will be preserved for debugging. > You may need to clean it by yourself. ## Run specific test You can run a single cirque test by: ``` scripts/tests/cirque_tests.sh run_test ``` The test name is the script (`.sh`) file in `src/test_driver/linux-cirque`, like `OnOffClusterTest`. For example, you can run `OnOffClusterTest` by: ``` scripts/tests/cirque_tests.sh run_test OnOffClusterTest ``` The output of the test will be written to `stdout` and `stderr`. ## Specify log directory To specify log directory, simply set `LOG_DIR` variable. ``` export LOG_DIR=/some/log/directory scripts/tests/cirque_tests.sh run_all_tests scripts/tests/cirque_tests.sh run_test OnOffClusterTest ``` Or ``` LOG_DIR=/some/log/directory scripts/tests/cirque_tests.sh run_all_tests LOG_DIR=/some/log/directory scripts/tests/cirque_tests.sh run_test OnOffClusterTest ``` ## Setup test topology only You can run a ManualTest to setup test topology only: ``` ./scripts/tests/cirque_tests.sh run_test ManualTest -t ``` The topology file is a JSON file, which contains the definition of each node in the network. ``` ./scripts/tests/cirque_tests.sh run_test ManualTest -t src/test_driver/linux-cirque/topologies/three_node_with_thread.json ``` It will print the container id in log, you can execute commands inside them. ``` 2021-04-06 15:01:57,780 [CHIPCirqueTest] INFO Finished setting up environment. 2021-04-06 15:01:57,780 [CHIPCirqueTest] INFO Device: CHIP-Server (Type: CHIP-Server, Container: 459c901ed9) 2021-04-06 15:01:57,780 [CHIPCirqueTest] INFO Device: CHIP-Tool (Type: CHIP-Tool, Container: c5831124e7) 2021-04-06 15:01:57,780 [CHIPCirqueTest] INFO Press Ctrl-C to stop the test. 2021-04-06 15:01:57,780 [CHIPCirqueTest] INFO Container will be cleaned when the test finished. ``` > You can run docker commands with these containers, for example, to launch a > shell on CHIP-Tool, you can use: > > ``` > docker exec -it c5831124e7 /bin/bash > ``` > > For detailed command you can use, please refer to > [official docker documents](https://docs.docker.com/engine/reference/commandline/cli/). > It is not recommanded to run commands that can change the state of the > container, for example: `attach` (will stop container once you exit), `stop` > etc. After you finished you test, press `Ctrl-C` and it will clean up testing environment. Refer to `test-manual.py`, `ManualTest.sh`, and topologies file under `topologies` for detail.