# saltybot_tests — Integration Test Suite (Issue #504)

Complete ROS2 system integration testing for SaltyBot full-stack bringup.

## Test Files

| File | Description |
|------|-------------|
| `test_launch.py` | launch_testing: full stack in follow mode, 30s stability |
| `test_subsystems.py` | Sensor health, perception, navigation, rosbridge |
| `test_slam_nav2.py` | SLAM (RTAB-Map) + Nav2 lifecycle nodes (indoor mode) |
| `test_controls_pipeline.py` | cmd_vel_mux, motor protection, accel limiter, e-stop |
| `test_audio_monitoring.py` | Audio pipeline, VAD, health monitor, diagnostics, docking |

## Coverage

| Subsystem | Nodes | Topics | Services |
|-----------|-------|--------|----------|
| Sensors | LIDAR, RealSense, IMU | /scan, /camera/*, /odom | — |
| SLAM | rtabmap | /rtabmap/map, /rtabmap/odom | /saltybot/save_map |
| Nav2 | planner, controller, bt_navigator | /global_costmap, /plan | /compute_path_to_pose |
| Perception | yolo_node | /person/detections | — |
| Controls | mux, accel_limiter, smoother | /cmd_vel, /e_stop | — |
| Audio | audio_pipeline, vad | /audio/state, /audio_level | — |
| Monitoring | health_monitor, watchdog | /system_health, /diagnostics | — |
| Docking | docking_node | /docking_status | /saltybot/dock, /undock |
| Comms | rosbridge_websocket | /tf, /odom bridged | — |

## Running

```bash
# Build
colcon build --packages-select saltybot_tests
source install/setup.bash

# Follow mode tests (no hardware)
ros2 launch saltybot_bringup full_stack.launch.py mode:=follow enable_bridge:=false &
sleep 15
pytest test/ -v --ignore=test/test_slam_nav2.py --tb=short

# Indoor mode tests (SLAM + Nav2)
ros2 launch saltybot_bringup full_stack.launch.py mode:=indoor enable_bridge:=false &
sleep 25
pytest test/test_slam_nav2.py -v --tb=short

# Full launch_testing suite
ros2 launch launch_testing launch_test.py test/test_launch.py
```
