29 lines
2.0 KiB
JavaScript
29 lines
2.0 KiB
JavaScript
const { test, expect } = require('@playwright/test');
|
|
test('paired pages save verified bytes directly over WebRTC with metadata-only server logs', async ({ browser, request }) => {
|
|
const a = await browser.newContext(), b = await browser.newContext();
|
|
const sender = await a.newPage(), receiver = await b.newPage();
|
|
await sender.goto('/?id=sender'); await receiver.goto('/?id=receiver');
|
|
await sender.waitForFunction(() => window.ready); await receiver.waitForFunction(() => window.ready);
|
|
await receiver.evaluate(async () => {
|
|
const bytes = Uint8Array.from({ length: 2000000 }, (_, i) => i % 251), h = Sha256.create(); h.update(bytes);
|
|
const dir = await (await navigator.storage.getDirectory()).getDirectoryHandle('videos', { create: true });
|
|
const w = await (await dir.getFileHandle(`testvideo.${h.hex()}.direct.part`, { create: true })).createWritable();
|
|
await w.write(bytes.slice(0, 12345)); await w.close();
|
|
});
|
|
await sender.locator('#send').click();
|
|
await expect(receiver.getByRole('dialog')).toBeVisible();
|
|
expect(await receiver.evaluate(() => !!window.received)).toBe(false);
|
|
await receiver.getByRole('button', { name: 'Accept & save' }).click();
|
|
await receiver.waitForFunction(() => !!window.received);
|
|
const result = await receiver.evaluate(async () => {
|
|
const d = await (await navigator.storage.getDirectory()).getDirectoryHandle('videos');
|
|
const f = await (await d.getFileHandle('testvideo.mp4')).getFile();
|
|
const hash = Sha256.create(); hash.update(new Uint8Array(await f.arrayBuffer())); return { size: f.size, cid: hash.hex(), expected: window.received.cid };
|
|
});
|
|
expect(await receiver.evaluate(() => window.resumeOffsets)).toEqual([12345]);
|
|
expect(result.size).toBe(2000000); expect(result.cid).toBe(result.expected);
|
|
const logs = await (await request.get('/audit')).json();
|
|
expect(logs.every(x => !x.http && ['invite','accept','signal','complete'].includes(x.signalling))).toBe(true);
|
|
await a.close(); await b.close();
|
|
});
|