Skip to content

Commit 199f7d4

Browse files
committed
smal lharness fixes
1 parent adae389 commit 199f7d4

3 files changed

Lines changed: 40 additions & 16 deletions

File tree

packages/scramjet/packages/runway/src/harness/scramjet/public/index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,17 @@ <h1>Scramjet Test Harness</h1>
8787
sessionStorage.setItem("__runway_last_test", url);
8888
reloadBtn.style.display = "inline-block";
8989
// injectTestFunctions();
90+
console.log("navigating to", url);
9091
scramjetFrame.go(url);
9192
};
9293

94+
window.__runwayGetProxiedUrl = (url) => {
95+
return $scramjet.rewriteUrl(url, scramjetFrame.context, {
96+
origin: new URL(location.href),
97+
base: new URL(location.href),
98+
});
99+
};
100+
93101
window.__runwayReload = () => {
94102
const lastTest = sessionStorage.getItem("__runway_last_test");
95103
if (lastTest) {

packages/scramjet/packages/runway/src/index.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,11 @@ async function createTestPage(
243243
} catch {
244244
data = { message: payload, label: "default", value: payload };
245245
}
246-
if (expectedRunwayToken && data.__runwayToken !== expectedRunwayToken) {
246+
if (
247+
expectedRunwayToken &&
248+
"__runwayToken" in data &&
249+
data.__runwayToken !== expectedRunwayToken
250+
) {
247251
return;
248252
}
249253

@@ -590,6 +594,7 @@ async function main() {
590594
1,
591595
Number(process.env.RUNWAY_PARALLEL ?? parallelArg ?? 1)
592596
);
597+
const fastMode = process.env.RUNWAY_FAST === "1";
593598

594599
if (testFilter) {
595600
console.log(`� Filter: "${testFilter}"`);
@@ -600,6 +605,9 @@ async function main() {
600605
if (parallelism > 1) {
601606
console.log(`🧵 Parallel workers: ${parallelism}\n`);
602607
}
608+
if (fastMode) {
609+
console.log(`⚡ Fast mode: reusing one harness instance per worker\n`);
610+
}
603611

604612
if (tests.length === 0) {
605613
console.log(
@@ -696,7 +704,7 @@ async function main() {
696704
})
697705
: null,
698706
});
699-
let scramjetBindingsInstalled = true;
707+
let scramjetBindingsInstalled = fastMode ? true : true;
700708
let testPages = await createPages(scramjetBindingsInstalled);
701709
let needsReload = true;
702710

@@ -706,12 +714,12 @@ async function main() {
706714

707715
const consistencyTracker = createConsistencyTracker(!test.scramjetOnly);
708716
consistencyHandler = consistencyTracker.handle;
709-
if (test.reloadHarness) {
717+
if (!fastMode && test.reloadHarness) {
710718
needsReload = true;
711719
}
712720

713721
// Reload pages if needed (first run or after failure)
714-
const desiredScramjetBindings = !test.topLevelScramjet;
722+
const desiredScramjetBindings = fastMode ? true : !test.topLevelScramjet;
715723
if (
716724
needsReload ||
717725
desiredScramjetBindings !== scramjetBindingsInstalled
@@ -856,7 +864,7 @@ async function main() {
856864
ghaError(
857865
`Test "${test.name}" failed: ${finalResult.message || "Unknown error"}`
858866
);
859-
needsReload = true; // Reload after failure
867+
needsReload = !fastMode; // Reload after failure unless fast mode is reusing harnesses
860868
} else {
861869
console.log(`💥 error (${duration}ms)`);
862870
if (finalResult.message) {
@@ -865,7 +873,7 @@ async function main() {
865873
ghaError(
866874
`Test "${test.name}" error: ${finalResult.message || "Unknown error"}`
867875
);
868-
needsReload = true; // Reload after error
876+
needsReload = !fastMode; // Reload after error unless fast mode is reusing harnesses
869877
}
870878
ghaEndGroup();
871879
}

packages/scramjet/packages/runway/src/testcommon.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import http from "http";
2-
import type { Socket } from "node:net";
2+
import type { AddressInfo, Socket } from "node:net";
33
import type { FrameLocator, Page } from "playwright";
44

55
export type TestContext = {
@@ -41,11 +41,10 @@ export function basicTest(props: {
4141
scramjetOnly?: boolean;
4242
expectedOkCount?: number;
4343
}): Test {
44-
const port = nextPort++;
44+
let port = 0;
4545
let server: http.Server;
4646
const scramjetOnly = props.scramjetOnly ?? /checkglobal\s*\(/i.test(props.js);
47-
48-
return {
47+
const test: Test = {
4948
name: props.name,
5049
port,
5150
scramjetOnly,
@@ -76,7 +75,11 @@ export function basicTest(props: {
7675
res.end("Not found");
7776
}
7877
});
79-
server.listen(port, () => resolve());
78+
server.listen(0, () => {
79+
port = (server.address() as AddressInfo).port;
80+
test.port = port;
81+
resolve();
82+
});
8083
});
8184
},
8285
async stop() {
@@ -97,6 +100,7 @@ export function basicTest(props: {
97100
]);
98101
},
99102
};
103+
return test;
100104
}
101105

102106
/**
@@ -152,14 +156,13 @@ export function serverTest(props: {
152156
scramjetOnly?: boolean;
153157
expectedOkCount?: number;
154158
}) {
155-
const port = nextPort++;
159+
let port = 0;
156160
let server: http.Server;
157161
const activeSockets = new Set<Socket>();
158162
const scramjetOnly =
159163
props.scramjetOnly ??
160164
(props.js ? /checkglobal\s*\(/i.test(props.js) : false);
161-
162-
return {
165+
const test: Test = {
163166
name: props.name,
164167
port,
165168
scramjetOnly,
@@ -207,9 +210,13 @@ export function serverTest(props: {
207210
activeSockets.delete(socket);
208211
});
209212
});
210-
await props.start(server, port, { pass, fail });
211213
return new Promise<void>((resolve) => {
212-
server.listen(port, () => resolve());
214+
server.listen(0, async () => {
215+
port = (server.address() as AddressInfo).port;
216+
test.port = port;
217+
await props.start(server, port, { pass, fail });
218+
resolve();
219+
});
213220
});
214221
},
215222
async stop() {
@@ -235,6 +242,7 @@ export function serverTest(props: {
235242
]);
236243
},
237244
};
245+
return test;
238246
}
239247

240248
type Frame = {

0 commit comments

Comments
 (0)