velxio/test/backend/e2e
David Montero Crespo af55a9efb8 docs: stop sending readers to a release that no longer has the binaries
The QEMU libraries left the public `qemu-prebuilt` release: they are
GPL-2.0 derivatives of QEMU, and distributing one obliges us to hand the
recipient the corresponding source, so binary and source now live in one
place -- velxio.dev's gated endpoint, where the qemu-source-<commit>
archive sits beside them.

Six documents still pointed at the release. Two of them shipped runnable
commands that now 404: the deploy-to-container curl pair in the WiFi
notes, and the e2e README's claim about where CI gets its libraries
(that workflow had in fact moved to the gated endpoint some time ago --
only the README was stale).

Also corrects two things that were already wrong before today:
QEMU_RELEASE_URL is documented with the release as its default, but
Dockerfile.standalone defaults it to empty and reaches the binaries via
VELXIO_LICENSE_KEY; and the asset inventory omitted the macOS, Windows
and esp32s3_rev0_rom entries.
2026-08-25 00:24:54 +02:00
..
README.md docs: stop sending readers to a release that no longer has the binaries 2026-08-25 00:24:54 +02:00
package-lock.json test(e2e): add ESP32 + SPICE photodiode co-simulation test 2026-04-24 19:20:02 +02:00
package.json feat: add ESP32 + ngspice co-simulation E2E tests 2026-04-15 23:28:47 -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_esp32_spice_analog.mjs feat: add ESP32 + ngspice co-simulation E2E tests 2026-04-15 23:28:47 -03:00
test_esp32_spice_ntc_bridge.mjs feat: add ESP32 + ngspice co-simulation E2E tests 2026-04-15 23:28:47 -03:00
test_esp32_spice_photodiode.mjs test(e2e): add ESP32 + SPICE photodiode co-simulation test 2026-04-24 19:20:02 +02:00
test_esp32_spice_smoke.mjs feat: add ESP32 + ngspice co-simulation E2E tests 2026-04-15 23:28:47 -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 and libqemu-riscv32-amd64 from velxio.dev's gated endpoint ($VELXIO_BINARY_BASE_URL/<asset>?key=$VELXIO_LICENSE_KEY), using the VELXIO_LICENSE_KEY repository secret. Free personal keys at https://velxio.dev/license/signup.
  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