Files
openclaw/test/scripts/run-additional-boundary-checks.test.ts
Jesse Merhi d5b0083300 fix: proxy direct APNs HTTP2 sessions (#74905)
Summary:
- This PR routes direct APNs HTTP/2 sends through an APNs allowlisted managed-proxy CONNECT wrapper, adds APNs proxy validation/docs/guardrails, and expands regression and live-test coverage.
- Reproducibility: yes. source-reproducible: current main `sendApnsRequest()` still uses raw `http2.connect(au ... nly covers HTTP/global-agent/Undici hooks. I did not run a live APNs reproduction in this read-only review.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test: guard raw HTTP2 APNs connections
- PR branch already contained follow-up commit before automerge: test: guard raw HTTP2 with OpenGrep
- PR branch already contained follow-up commit before automerge: lint: ban raw HTTP2 imports
- PR branch already contained follow-up commit before automerge: fix: use managed proxy state for APNs
- PR branch already contained follow-up commit before automerge: test: exercise APNs active proxy state
- PR branch already contained follow-up commit before automerge: fix: reject conflicting managed proxy activation

Validation:
- ClawSweeper review passed for head dab7c86a75.
- Required merge gates passed before the squash merge.

Prepared head SHA: dab7c86a75
Review: https://github.com/openclaw/openclaw/pull/74905#issuecomment-4350181159

Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
2026-05-04 11:04:17 +00:00

97 lines
2.9 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
BOUNDARY_CHECKS,
formatCommand,
parseShardSpec,
resolveConcurrency,
runChecks,
selectChecksForShard,
} from "../../scripts/run-additional-boundary-checks.mjs";
function createOutputBuffer() {
const chunks: string[] = [];
return {
output: {
write(chunk: string) {
chunks.push(chunk);
return true;
},
},
text: () => chunks.join(""),
};
}
describe("run-additional-boundary-checks", () => {
it("runs prompt snapshot drift checks in CI", () => {
expect(BOUNDARY_CHECKS).toContainEqual({
label: "prompt:snapshots:check",
command: "pnpm",
args: ["prompt:snapshots:check"],
});
});
it("normalizes concurrency input", () => {
expect(resolveConcurrency("6")).toBe(6);
expect(resolveConcurrency("0")).toBe(4);
expect(resolveConcurrency("nope", 2)).toBe(2);
});
it("formats command display text", () => {
expect(formatCommand({ command: "pnpm", args: ["run", "lint:core"] })).toBe(
"pnpm run lint:core",
);
});
it("parses and applies CI shard specs", () => {
expect(parseShardSpec("2/4")).toEqual({ count: 4, index: 1, label: "2/4" });
expect(selectChecksForShard(BOUNDARY_CHECKS, "1/4")).toEqual(
BOUNDARY_CHECKS.filter((_check, index) => index % 4 === 0),
);
const shardedLabels = [1, 2, 3, 4].flatMap((index) =>
selectChecksForShard(BOUNDARY_CHECKS, `${index}/4`).map((check) => check.label),
);
expect(shardedLabels.toSorted()).toEqual(
BOUNDARY_CHECKS.map((check) => check.label).toSorted(),
);
expect(new Set(shardedLabels).size).toBe(BOUNDARY_CHECKS.length);
expect(() => parseShardSpec("5/4")).toThrow("Invalid shard spec");
});
it("keeps the raw HTTP/2 import guard in source boundary checks", () => {
expect(BOUNDARY_CHECKS).toContainEqual({
label: "lint:tmp:no-raw-http2-imports",
command: "pnpm",
args: ["run", "lint:tmp:no-raw-http2-imports"],
});
});
it("buffers grouped output and reports aggregate failures", async () => {
const buffer = createOutputBuffer();
const failures = await runChecks(
[
{
label: "passes",
command: process.execPath,
args: ["-e", "console.log('ok-out')"],
},
{
label: "fails",
command: process.execPath,
args: ["-e", "console.error('bad-out'); process.exit(7)"],
},
],
{ concurrency: 2, output: buffer.output },
);
const text = buffer.text();
expect(failures).toBe(1);
expect(text).toContain("::group::passes");
expect(text).toContain("ok-out");
expect(text).toContain("[ok] passes in ");
expect(text).toContain("::group::fails");
expect(text).toContain("bad-out");
expect(text).toContain("::error title=fails failed::fails failed (exit 7)");
expect(text).toContain("Additional boundary check timings:");
});
});