























@@ -29,6 +29,7 @@ type CapturedResponse = {
2929status: number;
3030headers: Record<string, number | string | string[]>;
3131body: string;
32+bodyBytes: Buffer;
3233};
33343435type HttpRequestHandler = (
@@ -73,6 +74,7 @@ async function captureHttpResponse(
7374status: 200,
7475headers: {},
7576body: "",
77+bodyBytes: Buffer.alloc(0),
7678};
7779const res = {
7880statusCode: 200,
@@ -84,7 +86,8 @@ async function captureHttpResponse(
8486},
8587end(chunk?: string | Buffer) {
8688response.status = this.statusCode;
87-response.body = Buffer.isBuffer(chunk) ? chunk.toString("utf8") : (chunk ?? "");
89+response.bodyBytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk ?? "");
90+response.body = response.bodyBytes.toString("utf8");
8891return this;
8992},
9093};
@@ -409,6 +412,19 @@ describe("canvas host", () => {
409412const js = bundleRes.body;
410413expect(bundleRes.status).toBe(200);
411414expect(js).toContain("openclawA2UI");
415+const expectedPngSignature = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
416+for (const assetPath of [
417+"assets/providers/google.png",
418+"assets/providers/x.png",
419+"granola.png",
420+]) {
421+const assetRes = await captureA2uiResponse(`${A2UI_PATH}/${assetPath}`);
422+expect(assetRes.status).toBe(200);
423+expect(assetRes.headers["content-type"]).toBe("image/png");
424+expect(assetRes.bodyBytes.subarray(0, expectedPngSignature.length)).toEqual(
425+expectedPngSignature,
426+);
427+}
412428const traversalRes = await captureA2uiResponse(`${A2UI_PATH}/%2e%2e%2fpackage.json`);
413429expect(traversalRes.status).toBe(404);
414430expect(traversalRes.body).toBe("not found");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。