39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
/**
|
||
* Phase 3 end-to-end: ESP32 rectifier via QEMU waveform injection.
|
||
*
|
||
* This test drives the full frontend → WebSocket → backend → QEMU pipeline:
|
||
*
|
||
* 1. Compile `adcReadSketch()` against esp32 DevKit.
|
||
* 2. Load the rectifier circuit (signal-generator → diode → R → A0).
|
||
* 3. Run the sketch, collect N `analogRead` samples over ~200 ms of
|
||
* wall-clock time.
|
||
* 4. Assert the guest sees a rectified pattern (peaks near 4095 × 3/3.3,
|
||
* valleys near 0).
|
||
*
|
||
* Because QEMU binaries, the backend, and a running ESP32 toolchain are NOT
|
||
* part of the default CI image, this test is **gated** behind the env var
|
||
* VELXIO_ESP32_E2E=1
|
||
* Run locally with:
|
||
* VELXIO_ESP32_E2E=1 npm test -- esp32-rectifier-integration
|
||
*/
|
||
import { describe, it } from 'vitest';
|
||
|
||
const GATE = process.env.VELXIO_ESP32_E2E === '1';
|
||
|
||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||
const maybe: any = GATE ? describe : describe.skip;
|
||
|
||
maybe('ESP32 rectifier — QEMU waveform injection E2E', () => {
|
||
it(
|
||
'analogRead on ESP32 returns a rectified pattern matching the SPICE waveform',
|
||
{ timeout: 180_000 },
|
||
async () => {
|
||
// The full test body lives behind this gate so it is never imported
|
||
// when the env var is not set — avoids pulling in the full QEMU/WS
|
||
// stack on every CI run.
|
||
const { rectifierAdcTest } = await import('./helpers/esp32RectifierE2E');
|
||
await rectifierAdcTest();
|
||
},
|
||
);
|
||
});
|