# Testing with the USTM Tool
USTM (UMAA System Test Monitor) is an automated tool that monitors DDS
messages to aid in compliance checking to the UMAA standard. The
[UMAA SDK](https://www.auvsi.org/advocacy/advocacy-initiatives/unmanned-maritime-autonomy-architecture/)
demonstrates USTM compliance feedback via a localhost web GUI, but USTM is
also capable of producing JUnit XML outputs as part of a CI/CD pipeline.
> **Note:** Passing USTM alone does not indicate full UMAA compliance.
For SDK v1.0.0, USTM supports the following verification for all UMAA v6.0
services:
- Topic name validation
- Type name validation
- Strict type matching
- Range-boundary validation for all UMAA types with range boundaries defined
- Ability to set custom range-boundary values for stricter testing
- UMAA command state-transition flow control
- Support for LargeList and LargeSet validation
- Component-level grouping / validation of services
## 1. Load the Docker images
```bash
docker load -i my-image.tar
```
## 2. Run the Docker containers
To run only the USTM images, comment out the other services in the
`docker-compose.yml` and bring up the remaining stack:
```bash
docker compose up
```
## 3. Enable the USTM QoS profile
In `qos/umaa_qos_lib.xml`, uncomment the USTM topic-filter lines:
```xml
```
Then restart the autopilot (or your component).
## 4. Configure USTM to match your component
Edit `config/ustm/usersystemconfiguration.yaml` in the SDK archive to match
your component's source GUID and domain ID. The autopilot start script
(`start_autopilot.sh`) uses the GUID `5f0294efd54642e1a3fe666ace569336` and
domain `0` by default — ensure these values match the USTM configuration.
## 5. Run the examples
Start the autopilot to exercise topic name, type name, and report
publishing validation:
```bash
./python/examples/autopilot/start_autopilot.sh
```
To also validate command state-transition flow control, run the
GlobalVector consumer in a separate terminal while the autopilot is running:
```bash
./python/examples/globalvector_consumer/start_globalvector_consumer.sh -v
```
The consumer sends a command and drives the full UMAA command lifecycle
(ack → status → execution-status → terminal), which USTM monitors for
flow-control compliance.
Currently the RTI UMAA Python SDK passes USTM validation for:
- **Topic name** — all topics match the UMAA naming convention
- **Type name** — all types match the UMAA type naming convention
- **Range-boundary validation** — field values conform to UMAA-defined ranges
- **Command flow control** — GlobalVector command lifecycle transitions are correct
## 6. Verify in the USTM web UI
Open the USTM web interface at `http://localhost:81/` and confirm
that your component's topics and data appear in the dashboard.