Files
Michał Pierzchała b15121ffc8 test(ios): establish snapshot convergence baselines and permanent evidence (#2204)
* test(ios): add snapshot convergence evidence harness

* fix(ios): satisfy benchmark CI guards

* fix(ios): constrain benchmark proxy routes

* fix(ios-benchmark): enforce cell admission evidence

* fix(ios-benchmark): protect benchmark state ownership

* fix(ios-benchmark): use proxy port flag

* fix(ios-benchmark): let proxy choose an ephemeral port

* test(ios-benchmark): keep CLI process seam local

* fix(ios-benchmark): parse proxy startup envelope

* fix(ios-benchmark): bind proxy lease to simulator

* fix(ios-benchmark): keep fresh proxy CLI sessions isolated

* fix(ios-benchmark): preserve async timeout evidence

* docs(ios-benchmark): retain exact-head evidence

* test(ios): reveal offscreen alert fixture controls

* test(ios): reset alert between relaunch samples

* test(ios): admit native alert snapshots

* docs(ios): publish snapshot convergence corpus

* chore(ios): format benchmark evidence

* fix(ios-benchmark): admit proxy fixture anchors

* docs(ios): republish exact-head benchmark corpus

* fix(size): make publish asset evidence hermetic

* style(size): format package evidence test

* test(size): update publish preparation contracts

* fix: retire stale utils layering zone

* test: pin shared publish asset owner

* test: verify preserved size reporter closure

* fix: move mutation ownership to snapshot module

* test(ios): add snapshot convergence evidence harness

* fix(ios): satisfy benchmark CI guards

* fix(ios): constrain benchmark proxy routes

* fix(ios-benchmark): enforce cell admission evidence

* fix(ios-benchmark): protect benchmark state ownership

* fix(ios-benchmark): use proxy port flag

* fix(ios-benchmark): let proxy choose an ephemeral port

* test(ios-benchmark): keep CLI process seam local

* fix(ios-benchmark): parse proxy startup envelope

* fix(ios-benchmark): bind proxy lease to simulator

* fix(ios-benchmark): keep fresh proxy CLI sessions isolated

* fix(ios-benchmark): preserve async timeout evidence

* docs(ios-benchmark): retain exact-head evidence

* test(ios): reveal offscreen alert fixture controls

* test(ios): reset alert between relaunch samples

* test(ios): admit native alert snapshots

* docs(ios): publish snapshot convergence corpus

* chore(ios): format benchmark evidence

* fix(ios-benchmark): admit proxy fixture anchors

* docs(ios): republish exact-head benchmark corpus

* fix(size): make publish asset evidence hermetic

* test(size): update publish preparation contracts

* fix: keep git-state gates out of mutation sandboxes
2026-09-01 21:39:05 +02:00

53 lines
1.7 KiB
TypeScript

import { createNetworkConditioner } from './proxy-conditioner.ts';
import { runFreshCliMeasurement, runPersistentMeasurement } from './proxy-client.ts';
import { startProxy } from './proxy-process.ts';
import type { Measurement, ProxyNetwork, ScreenFixture } from './types.ts';
export async function runProxyMeasurements(options: {
repoRoot: string;
stateDir: string;
clientStateDir: string;
derivedPath: string;
udid: string;
fixtures: ScreenFixture[];
samples: number;
rtts: readonly number[];
bandwidthKbps: number | null;
packetLossPercent: number;
seed: number;
}): Promise<{ measurements: Measurement[]; networks: ProxyNetwork[] }> {
const proxy = await startProxy(options.repoRoot, options.stateDir);
const measurements: Measurement[] = [];
const networks: ProxyNetwork[] = [];
try {
for (const rttMs of options.rtts) {
const network: ProxyNetwork = {
rttMs: rttMs as ProxyNetwork['rttMs'],
bandwidthKbps: options.bandwidthKbps,
packetLossPercent: options.packetLossPercent,
seed: options.seed + rttMs,
};
networks.push(network);
const conditioner = await createNetworkConditioner({
upstreamBaseUrl: proxy.proxyBaseUrl,
network,
});
try {
for (const fixture of options.fixtures) {
measurements.push(
await runPersistentMeasurement({ ...options, proxy, conditioner, fixture, network }),
);
measurements.push(
await runFreshCliMeasurement({ ...options, proxy, conditioner, fixture, network }),
);
}
} finally {
await conditioner.close();
}
}
return { measurements, networks };
} finally {
await proxy.stop();
}
}