From ca564fb2332ebdec248cd422bd85c984d9b7fd0d Mon Sep 17 00:00:00 2001 From: Martino Ferrari Date: Fri, 26 Jun 2026 09:30:20 +0200 Subject: [PATCH] test(e2e-chain): render Stress Tests section in the PDF report Add a Stress Tests section (per-case table + per-axis scaling-curve images) after Performance, guarded so it is omitted when no stress data is present. Co-Authored-By: Claude Opus 4.6 --- Test/E2E/chain/E2E_Report.typ | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Test/E2E/chain/E2E_Report.typ b/Test/E2E/chain/E2E_Report.typ index c98c437..6344dd7 100644 --- a/Test/E2E/chain/E2E_Report.typ +++ b/Test/E2E/chain/E2E_Report.typ @@ -220,6 +220,43 @@ MARTe2 processes, plus sustained client throughput (recorded samples ÷ duration }).flatten() ) +// ── stress / capacity ───────────────────────────────────────────────────────── +#let stress = data.at("stress", default: none) +#if stress != none [ + = Stress Tests #h(6pt) #status_badge(stress.overall) + Capacity matrix: one load axis swept at a time. Hard gates — survival + client + liveness; soft gates — peak RSS and zoom p95 latency. The size axis crosses into + the multi-fragment (>64 KB packet) regime. + #v(4pt) + #table( + columns: (1.5fr, 1.6fr, 0.7fr, 0.7fr, 1fr, 1fr, 1fr, 1fr), + align: (left, left, right, center, right, right, right, right), + stroke: 0.4pt + rgb("#d0d7de"), + inset: 4pt, + table.header([*Case*], [*Axis*], [*Level*], [*Status*], + [*MARTe RSS (MB)*], [*Hub RSS (MB)*], + [*Hub CPU (s)*], [*Zoom p95 (ms)*]), + ..stress.cases.map(c => ( + raw(c.id), + text(size: 8pt)[#c.axis], + [#c.level], + status_badge(c.status), + fnum(c.at("marte_rss_mb", default: none), digits: 1), + fnum(c.at("hub_rss_mb", default: none), digits: 1), + fnum(c.at("hub_cpu_s", default: none), digits: 2), + fnum(c.at("zoom_p95_ms", default: none), digits: 1), + )).flatten() + ) + #let splots = data.at("stress_plots", default: ()) + #if splots.len() > 0 [ + #v(6pt) + == Scaling curves + #grid(columns: 2, gutter: 8pt, + ..splots.map(p => image(p, width: 100%)) + ) + ] +] + // ── per-scenario waveform fidelity ─────────────────────────────────────────── = Scenarios #for sc in e2e.scenarios [