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

74 lines
2.6 KiB
TypeScript

import assert from 'node:assert/strict';
import http from 'node:http';
import { test } from 'vitest';
import { createNetworkConditioner } from './proxy-conditioner.ts';
test('forwards an RPC response and records exact body bytes at zero loss', async () => {
const upstream = http.createServer((request, response) => {
request.resume();
request.on('end', () => {
response.setHeader('content-type', 'application/json');
response.end('{"result":{"ok":true}}');
});
});
await new Promise<void>((resolve) => upstream.listen(0, '127.0.0.1', resolve));
const address = upstream.address();
assert.ok(address && typeof address !== 'string');
const conditioner = await createNetworkConditioner({
upstreamBaseUrl: `http://127.0.0.1:${address.port}`,
network: { rttMs: 0, bandwidthKbps: null, packetLossPercent: 0, seed: 1 },
});
try {
const response = await fetch(`${conditioner.baseUrl}/agent-device/rpc`, {
method: 'POST',
body: '{"request":true}',
});
assert.equal(await response.text(), '{"result":{"ok":true}}');
assert.deepEqual(conditioner.recordsSince(0), [
{
sequence: 1,
requestBytes: 16,
responseBytes: 22,
status: 200,
failed: false,
},
]);
} finally {
await conditioner.close();
await new Promise<void>((resolve, reject) =>
upstream.close((error) => (error ? reject(error) : resolve())),
);
}
});
test('rejects non-loopback upstreams before binding the conditioner', async () => {
await assert.rejects(
createNetworkConditioner({
upstreamBaseUrl: 'https://example.com:443',
network: { rttMs: 0, bandwidthKbps: null, packetLossPercent: 0, seed: 1 },
}),
/must be an HTTP 127\.0\.0\.1 URL with a port/,
);
});
test('does not forward unsupported paths upstream', async () => {
const upstream = http.createServer((_request, response) => response.end('unexpected'));
await new Promise<void>((resolve) => upstream.listen(0, '127.0.0.1', resolve));
const address = upstream.address();
assert.ok(address && typeof address !== 'string');
const conditioner = await createNetworkConditioner({
upstreamBaseUrl: `http://127.0.0.1:${address.port}`,
network: { rttMs: 0, bandwidthKbps: null, packetLossPercent: 0, seed: 1 },
});
try {
const response = await fetch(`${conditioner.baseUrl}/unsupported`);
assert.equal(response.status, 404);
assert.equal(await response.text(), 'Not found');
} finally {
await conditioner.close();
await new Promise<void>((resolve, reject) =>
upstream.close((error) => (error ? reject(error) : resolve())),
);
}
});