velxio/test/backend/e2e
David Montero Crespo c65acdb1dc Add end-to-end test for MicroPython on Raspberry Pi Pico using rp2040js
- Implemented a comprehensive test script (test_micropython_pico.mjs) that performs the following:
  - Part 1: Checks backend compilation of a simple Arduino sketch for the rp2040:rp2040:rpipico board.
  - Part 2: Downloads MicroPython v1.20.0 UF2 firmware and loads it into a rp2040js simulator.
  - Part 3: Simulates the Pico, verifies REPL output, and checks execution of injected Python code.
- Includes detailed logging and error handling for each step of the process.
2026-04-13 10:02:21 -03:00
..
README.md feat: Enhance CI workflows for backend unit and e2e tests; add environment setup and skip timing-sensitive tests in CI 2026-04-10 23:47:25 -03:00
package-lock.json Add end-to-end test for MicroPython on Raspberry Pi Pico using rp2040js 2026-04-13 10:02:21 -03:00
package.json Add end-to-end test for MicroPython on Raspberry Pi Pico using rp2040js 2026-04-13 10:02:21 -03:00
rp2040-bootrom.mjs Add end-to-end test for MicroPython on Raspberry Pi Pico using rp2040js 2026-04-13 10:02:21 -03:00
test_dht22_simulation.mjs Add unit tests for I2C slave devices, MCP tools, and WiFi/BLE status parser 2026-04-10 23:39:51 -03:00
test_hcsr04_simulation.mjs Add unit tests for I2C slave devices, MCP tools, and WiFi/BLE status parser 2026-04-10 23:39:51 -03:00
test_micropython_esp32.mjs feat: Update MicroPython firmware handling for ESP32; add end-to-end test and mark subproject commits as dirty 2026-04-12 23:55:11 -03:00
test_micropython_pico.mjs Add end-to-end test for MicroPython on Raspberry Pi Pico using rp2040js 2026-04-13 10:02:21 -03:00
test_mpu6050_simulation.mjs Add unit tests for I2C slave devices, MCP tools, and WiFi/BLE status parser 2026-04-10 23:39:51 -03:00

README.md

Backend E2E Tests (JavaScript / Node.js)

These tests compile real firmware via the backend API and run the full simulation through a WebSocket, verifying sensor readings in the serial output.

CI status

These tests run in GitHub Actions via .github/workflows/backend-e2e-tests.yml.

The CI workflow:

  1. Downloads libqemu-xtensa-amd64.so and libqemu-riscv32-amd64.so from the qemu-prebuilt release.
  2. Downloads ROM files: esp32-v3-rom.bin, esp32-v3-rom-app.bin, esp32c3-rom.bin.
  3. Installs arduino-cli + esp32:esp32 core.
  4. Starts uvicorn app.main:app --port 8001 with QEMU_ESP32_LIB and QEMU_RISCV32_LIB set.
  5. Runs all three JS tests.

Local prerequisites

  1. Backend running with QEMU libs in PATH:

    cd backend
    QEMU_ESP32_LIB=/path/to/libqemu-xtensa.so \
    QEMU_RISCV32_LIB=/path/to/libqemu-riscv32.so \
    uvicorn app.main:app --reload --port 8001
    

    On Windows the .dll files live in backend/app/services/.

  2. Node.js 18+ installed.

Run all e2e tests

Use the convenience script from the repo root:

# Windows
scripts\run-e2e-tests.bat

# Or individually (from repo root):
node test/backend/e2e/test_dht22_simulation.mjs   --timeout=60
node test/backend/e2e/test_hcsr04_simulation.mjs  --timeout=75
node test/backend/e2e/test_mpu6050_simulation.mjs --timeout=60

Tests

File Sensor What it verifies Typical runtime
test_dht22_simulation.mjs DHT22 (GPIO4) Temperature & humidity readings, sensor_update changes values ~50 s
test_hcsr04_simulation.mjs HC-SR04 (GPIO18/19) Distance at 10/40/100/200 cm, sensor_update changes distance ~60 s
test_mpu6050_simulation.mjs MPU-6050 (I2C) Accelerometer/gyroscope I2C readings ~40 s

Pass criteria

Test Passes when
DHT22 First reading received + values change after sensor_update
HC-SR04 ≥3 correct readings, ≥2 distances, miss rate ≤30%
MPU-6050 I2C communication established, sensor data in serial output