summaryrefslogtreecommitdiff
path: root/crates/chat-crypto/tests
diff options
context:
space:
mode:
Diffstat (limited to 'crates/chat-crypto/tests')
-rw-r--r--crates/chat-crypto/tests/browser.ts (renamed from crates/chat-crypto/tests/browser.mjs)26
1 files changed, 14 insertions, 12 deletions
diff --git a/crates/chat-crypto/tests/browser.mjs b/crates/chat-crypto/tests/browser.ts
index 4fd2ee5..75095ce 100644
--- a/crates/chat-crypto/tests/browser.mjs
+++ b/crates/chat-crypto/tests/browser.ts
@@ -17,10 +17,11 @@ import { createServer } from 'node:http';
import { readFile } from 'node:fs/promises';
import { resolve } from 'node:path';
import assert from 'node:assert/strict';
-import { chromium } from '../../../.tools/browser/node_modules/playwright/index.mjs';
+import { chromium } from 'playwright';
+import { serverOrigin } from '../../../tests/browser-support.js';
-const assets = new Map([
- ['/wasi.mjs', [resolve('crates/chat-crypto/browser/wasi.mjs'), 'text/javascript']],
+const assets = new Map<string, [string, string]>([
+ ['/wasi.mjs', [resolve('var/build/typescript/crates/chat-crypto/browser/wasi.js'), 'text/javascript']],
['/probe.wasm', [resolve('target/wasm32-wasip1/release/stack-chat-crypto.wasm'), 'application/wasm']],
]);
const server = createServer(async (request, response) => {
@@ -30,24 +31,25 @@ const server = createServer(async (request, response) => {
response.end('<!doctype html><title>Local cryptographic compatibility test</title>');
return;
}
- const asset = assets.get(request.url);
+ const asset = assets.get(request.url || '');
if (!asset) { response.writeHead(404); response.end(); return; }
response.setHeader('Content-Type', asset[1]);
response.end(await readFile(asset[0]));
});
-await new Promise(resolveReady => server.listen(0, '127.0.0.1', resolveReady));
-const origin = `http://127.0.0.1:${server.address().port}`;
+await new Promise<void>(resolveReady => server.listen(0, '127.0.0.1', resolveReady));
+const origin = serverOrigin(server);
const browser = await chromium.launch({headless: true, channel: "chromium"});
const deadline = setTimeout(() => browser.close(), 120000);
try {
const page = await browser.newPage();
- const external = [];
+ const external: string[] = [];
page.on('request', request => {
if (!request.url().startsWith(origin + '/')) external.push(request.url());
});
await page.goto(origin);
const result = await page.evaluate(async () => {
- await import('/wasi.mjs');
+ const host = '/wasi.mjs';
+ await import(host);
const { runProbe } = globalThis.stackChatWasi;
const bytes = await (await fetch('/probe.wasm', { cache: 'no-store' })).arrayBuffer();
const valid = await runProbe(bytes);
@@ -55,16 +57,16 @@ try {
const getRandomValues = crypto.getRandomValues;
let rejected = false;
crypto.getRandomValues = () => { throw new Error('Entropy unavailable'); };
- try { await runProbe(bytes); } catch (error) { rejected = error.message.includes("Entropy unavailable"); }
+ try { await runProbe(bytes); } catch (error) { rejected = (error instanceof Error ? error.message : String(error)).includes("Entropy unavailable"); }
finally { crypto.getRandomValues = getRandomValues; }
const modified = new Uint8Array(bytes.slice(0));
const pattern = new TextEncoder().encode('random_get');
- const offset = modified.findIndex((value, index) => pattern.every((byte, position) => modified[index + position] === byte));
+ const offset = modified.findIndex((_value, index) => pattern.every((byte, position) => modified[index + position] === byte));
if (offset < 0) throw new Error('Expected entropy import was not found');
modified.set(new TextEncoder().encode('reject_get'), offset);
let unknownImportRejected = false;
- try { await runProbe(modified); }
- catch (error) { unknownImportRejected = error.message.includes('Unsupported WASI import: wasi_snapshot_preview1.reject_get'); }
+ try { await runProbe(modified.buffer); }
+ catch (error) { unknownImportRejected = (error instanceof Error ? error.message : String(error)).includes('Unsupported WASI import: wasi_snapshot_preview1.reject_get'); }
return { valid, again, rejected, unknownImportRejected };
});
assert.match(result.valid.output, /^PASS: backend=OpenSSL 3\.6\.5;/);