Some checks failed
social-bot integration tests / Lint (flake8 + pep257) (push) Failing after 3m58s
social-bot integration tests / Lint (flake8 + pep257) (pull_request) Failing after 3m3s
social-bot integration tests / Core integration tests (mock sensors, no GPU) (push) Has been skipped
social-bot integration tests / Core integration tests (mock sensors, no GPU) (pull_request) Has been skipped
social-bot integration tests / Latency profiling (GPU, Orin) (push) Has been cancelled
social-bot integration tests / Latency profiling (GPU, Orin) (pull_request) Has been cancelled
Add saltybot_social_tests package with full pytest + launch_testing harness: - test_launch.py: start social_test.launch.py, verify all nodes up within 30s - test_topic_rates.py: measure topic Hz over 3s window vs. minimum SLAs - test_services.py: /social/enroll, /social/nav/set_mode, person CRUD, mood query - test_gpu_memory.py: total allocation < 6 GB, no leak over 30s - test_latency.py: inject→transcript→LLM→TTS state-machine SLA profiling - test_shutdown.py: no zombies, GPU memory released, audio device freed - test_helpers.py: TopicRateChecker, NodeChecker, ServiceChecker, GpuMemoryChecker - mock_sensors.py: camera/faces/fused/persons/uwb publishers at correct rates - social_test.launch.py: CI-mode launch (no mic/speaker, mock sensors auto-started) - conftest.py + pytest.ini: gpu_required / full_stack / stack_running markers - docker/Dockerfile.ci + docker-compose.ci.yml: CPU-only CI container - docker/entrypoint-ci.sh: launch stack + wait 10s + run pytest - bags/record_social_test.sh + bags/README.md: rosbag recording for replay - .gitea/workflows/social-tests-ci.yml: lint + core-tests + latency-gpu jobs Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Social-bot Test Bags
This directory holds rosbag2 recordings used for replaying mock sensor data in CI.
Bag contents
Each test bag records the following topics for 30 seconds at real-time rate:
| Topic | Type | Rate | Notes |
|---|---|---|---|
/camera/color/image_raw |
sensor_msgs/Image |
15 Hz | 640×480 RGB8 |
/uwb/target |
geometry_msgs/PoseStamped |
10 Hz | simulated UWB |
/social/faces/detections |
FaceDetectionArray |
15 Hz | may be empty |
/social/tracking/fused_target |
FusedTarget |
10 Hz | single person |
/social/persons |
PersonStateArray |
5 Hz | one engaged person |
/social/orchestrator/state |
std_msgs/String |
2 Hz | JSON state |
/odom |
nav_msgs/Odometry |
20 Hz | zero motion |
/tf, /tf_static |
TF2 |
varies | camera → base_link |
Recording a new bag
On hardware with the full social-bot stack running:
# Record 30s of live sensor data
./bags/record_social_test.sh --duration 30
# Record from mock sensor pub only (no hardware)
MOCK_ONLY=1 ./bags/record_social_test.sh --duration 15 --name social_test_mock
Replaying a bag in CI
The Docker CI entrypoint uses live mock publishers (not rosbag replay) for the default CI tests. To use a recorded bag instead:
# In a sourced ROS2 shell:
ros2 bag play bags/social_test_YYYYMMDD_HHMMSS/ --loop --rate 1.0
Then run the test suite against the replayed data:
export SOCIAL_STACK_RUNNING=1
pytest test/ -v -m "not full_stack"
Bag naming convention
social_test_YYYYMMDD_HHMMSS — date/time of recording.
Bags committed to this directory should be small (< 50 MB) — use a 5-second clip or compress images to avoid bloating the repository. Large reference bags (> 100 MB) should be stored on the NVMe and referenced by path.