Testing
Test organization, the Unity testing framework usage, coverage per suite, manual hardware testing checklists and a debugging/troubleshooting guide. Reminder: the sensor board code was only partially tested; unit tests cover the pure-logic parts of the drivers, and end to end hardware validation was not completed by the 2025-2026 team.
Test Organization
Suite | Location |
|---|---|
test_sensor_basics | test/sensor_board/test_sensor_basics/test_sensor_basics.c |
test_ph_sensor | test/sensor_board/test_ph_sensor/test_ph_sensor.c |
test_imu_sensor | test/sensor_board/test_imu_sensor/test_imu_sensor.c |
Test Framework
- Framework: Unity (open source C testing framework)
- Build system: PlatformIO (env:sensor_board, test_filter = sensor_board/*)
- Test type: driver logic tests exercising the data structures and math directly; the hardware access paths (ADC, HX711 GPIO, EXTI) are not mocked and not covered
Building and Running Tests
# All sensor board tests
pio test -e sensor_board
# One suite
pio test -e sensor_board -f test_ph_sensor
# Verbose output
pio test -e sensor_board -f test_sensor_basics -v
Coverage Per Suite
test_sensor_basics
- Accelerometer boundary values: ±160.0 accepted, ±160.1 rejected
- Multi-axis validation: one bad axis fails validate_imu_data()
- Temperature and pressure conversion tests exist but are commented out together with their implementations
test_ph_sensor
- Initialization defaults (raw 0, voltage 0, pH 7.0, stored reference voltage)
- ADC to voltage to pH conversion with a 12-bit ADC scale
- Clamping at the extremes (ADC 0 clamps to pH 14, full scale clamps to pH 0 with the test calibration)
- Calibration changes the measurement (offset and slope applied)
test_imu_sensor
- Initialization zeroes all axes and the timestamp
- Update and read round-trip for accel/gyro/mag and timestamp
- Acceleration magnitude (3-4-12 triangle gives 13)
- Pitch and roll helpers from accelerometer data
- Range validators accept zeros and reject out-of-range values
Manual Hardware Testing Checklist
- Flash with
pio run -e sensor_board -t uploadand open the serial monitor at 115200 baud - Confirm the boot banner and each "init completed" line (IMU, pH, load cells, pressure, flow, pump, Ethernet)
- Confirm the three LEDs toggle every 5 seconds (loop heartbeat)
- Check the per-sensor status lines: connected hardware should read OPERATING | OK, absent hardware IDLE | DISCONNECTED
- Load cells: press on each cell and watch raw_counts/force change; verify tare at startup reads near zero
- Flow and pump: with tubing wet, enabling the pump must produce flow pulses; "commanded on but no flow detected" indicates a dry/absent pump or a not-configured EXTI4 line
- Network: set sendUDP = true, then capture UDP datagrams on port 1500 at 192.168.0.222 and decode with the PBEnvelope schema
- Send a SensorBoardPumpInfo command packet and verify the pump speed changes
Debugging & Troubleshooting
Issue | Cause | Solution |
|---|---|---|
Sensor IDLE / DISCONNECTED | Not connected, or driver compile gated | Check wiring; for pH/pressure verify the PH_SENSOR_USE_ADC / PRESSURE_USE_ADC build flags and the CubeMX ADC config |
Sensor ERROR | Communication failure | Verify HX711 wiring and timing, I2C address and pull-ups, ADC channel binding |
Invalid data | Out of range values | Check calibration parameters (pH slope/offset, load cell scale/tare, pressure scale/offset) |
Flow always 0 | EXTI4 not enabled in CubeMX | Configure PA4 as EXTI4 rising edge and enable the EXTI4 NVIC line |
Pump OPERATING / DISCONNECTED | No flow while commanded on | Pump absent, dry, or stalled; or the flow sensor is not installed/configured |
No UDP packets | Transmit gate or addressing | Set sendUDP = true; check IP/MAC constants, MAC filtering, and that port 1500 is not blocked |
Low heap warning | Memory leak or queue growth | Review protobuf encode/free paths and UDP queue sizes |
Serial monitor silent | Wrong port or baud | Check the ST-Link COM port and 115200 baud; verify LOG_init ran |
No comments to display
No comments to display