sl-jetson ee8438fd04
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
feat(tests): social-bot integration test suite (Issue #108)
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>
2026-03-02 08:50:22 -05:00
..

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.