Three new end-to-end tests that combine ESP32 QEMU emulation (via backend WebSocket) with ngspice-WASM analog circuit solving: 1. test_esp32_spice_analog.mjs — voltage divider sweep - Compiles a sketch that reads analogRead(34) - Solves two voltage dividers with ngspice (R1/R2=10k/10k then 10k/30k) - Injects solved V(mid) into ESP32's ADC via esp32_adc_set - Verifies Serial output matches within +-50 counts (12-bit ADC) - Confirms circuit change is detected (different ADC values) 2. test_esp32_spice_ntc_bridge.mjs — Wheatstone bridge temperature sweep - NTC thermistor in a bridge (0C / 25C / 50C) - ngspice solves the bridge for each temperature - ESP32 reads both legs (ADC34+ADC35), computes R_ntc and T via beta model - Verifies temperature within +-5C tolerance across sweep 3. test_esp32_spice_smoke.mjs — ngspice-only smoke test (no backend needed) Also adds eecircuit-engine to test/backend/e2e/package.json. Prerequisites: backend on localhost:8001 with esp32 core installed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| README.md | ||
| package-lock.json | ||
| package.json | ||
| rp2040-bootrom.mjs | ||
| test_dht22_simulation.mjs | ||
| test_esp32_spice_analog.mjs | ||
| test_esp32_spice_ntc_bridge.mjs | ||
| test_esp32_spice_smoke.mjs | ||
| test_hcsr04_simulation.mjs | ||
| test_micropython_esp32.mjs | ||
| test_micropython_pico.mjs | ||
| test_mpu6050_simulation.mjs | ||
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:
- Downloads
libqemu-xtensa-amd64.soandlibqemu-riscv32-amd64.sofrom the qemu-prebuilt release. - Downloads ROM files:
esp32-v3-rom.bin,esp32-v3-rom-app.bin,esp32c3-rom.bin. - Installs arduino-cli +
esp32:esp32core. - Starts
uvicorn app.main:app --port 8001withQEMU_ESP32_LIBandQEMU_RISCV32_LIBset. - Runs all three JS tests.
Local prerequisites
-
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 8001On Windows the
.dllfiles live inbackend/app/services/. -
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 |