27 lines
1.8 KiB
JavaScript
27 lines
1.8 KiB
JavaScript
// Plan 013 harness check (see device-db-check.mjs for requirements).
|
|
import { chromium } from 'playwright';
|
|
const b = await chromium.launch({ executablePath: process.env.CHROMIUM || '/opt/pw-browsers/chromium-1194/chrome-linux/chrome' });
|
|
const p = await b.newPage();
|
|
p.on('console', (m) => { if (m.type() === 'error') console.log('console:', m.text()); });
|
|
await p.goto('http://localhost:8767/');
|
|
const out = await p.evaluate(async () => {
|
|
const good = await OPFS.downloadVideo('goodAAAAAAA', '/api/download/goodAAAAAAA');
|
|
// A legacy save: in OPFS but no DeviceDB record, unknown to the server.
|
|
const dir = await (await navigator.storage.getDirectory()).getDirectoryHandle('videos', { create: true });
|
|
const w = await (await dir.getFileHandle('legacyAAAAA.mp4', { create: true })).createWritable();
|
|
await w.write(new Uint8Array(1000).fill(9)); await w.close();
|
|
await DeviceDB.putFile({ videoId: 'goodAAAAAAA', cid: good.sha256, size: good.size, state: 'unverified' });
|
|
await DeviceDB.putFile({ videoId: 'ghostAAAAAA', cid: 'e'.repeat(64), size: 5, state: 'verified' }); // no file
|
|
P2PClient.start({ getSettings: () => ({}) });
|
|
const res = await P2PClient.sync();
|
|
const recs = (await DeviceDB.listFiles()).map((r) => [r.videoId, r.state, !!r.cid]).sort();
|
|
const holders = await (await fetch('/debug/holders')).json();
|
|
// Turn sharing off → full withdrawal.
|
|
P2PClient.start({ getSettings: () => ({ p2pShare: false }) });
|
|
await P2PClient.sync();
|
|
const after = await (await fetch('/debug/holders')).json();
|
|
return { accepted: res && res.accepted.length, unknown: res && res.unknown.length, challenges: res && res.challenges.length, recs, trust: holders.map((h) => h.trust), afterShareOff: after.length, device: !!P2PClient.device() };
|
|
});
|
|
console.log(JSON.stringify(out));
|
|
await b.close();
|