railiance-apps/tests/vergabe_operator_callback_fixture.cjs
tegwick 00739c22a6
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 5s
Investigate repeated owner login failures with isolated callback probes
Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a1abf1-7e95-7141-87c9-ee78332bf790
2026-11-06 14:54:58 +01:00

46 lines
2.9 KiB
JavaScript

const http = require('http');
const fs = require('fs');
const {chromium} = require('/home/worsch/coulomb-social/scripts/node_modules/playwright');
async function main() {
const spec = JSON.parse(fs.readFileSync('/home/worsch/coulomb-social/scripts/node_modules/playwright-core/browsers.json'));
const rev = spec.browsers.find(x => x.name === 'chromium').revision;
const executablePath = `/home/worsch/.cache/ms-playwright/chromium-${rev}/chrome-linux64/chrome`;
const server = http.createServer((req,res) => {res.writeHead(200,{'Content-Type':'text/html'});res.end('<h1>Synthetic callback received</h1>');});
await new Promise(resolve => server.listen(0,'127.0.0.1',resolve));
const port = server.address().port;
let browser;
const results = {synthetic_only:true,native_login:false,headless:!process.argv.includes("--headed")};
let stage = 'browser_launch';
try {
let start = Date.now();
browser = await chromium.launch({executablePath,headless:results.headless,chromiumSandbox:true,timeout:20000});
results.launch_ms = Date.now()-start;
results.version = browser.version();
results.callbacks = [];
for(const host of ['localhost','127.0.0.1']) {
const context = await browser.newContext();
const page = await context.newPage();
stage = 'public_discovery';start=Date.now();
await page.goto('https://kc.coulomb.social/.well-known/openid-configuration',{waitUntil:'domcontentloaded',timeout:15000});
const discovery_ms = Date.now()-start;
await page.setContent(`<h1>You are signed in — synthetic</h1><a href="http://${host}:${port}/oidc/callback?state=synthetic">Continue</a>`);
stage = 'synthetic_callback';start=Date.now();
let error_kind = null;
try {
await Promise.all([page.waitForURL(`http://${host}:${port}/oidc/callback?state=synthetic`,{timeout:10000,waitUntil:'domcontentloaded'}),page.getByRole('link',{name:'Continue'}).click({timeout:10000})]);
await page.getByRole('heading',{name:'Synthetic callback received'}).waitFor({timeout:1000});
} catch(error) {error_kind=/ERR_CONNECTION_RESET/.test(error.message)?'connection_reset':/ERR_CONNECTION_REFUSED/.test(error.message)?'connection_refused':/Timeout/.test(error.name)?'timeout':'browser_error';}
results.callbacks.push({host,discovery_ms,callback_ms:Date.now()-start,error_kind});
await context.close();
}
results.status='complete';
} catch(error) {
results.status='failed';results.stage=stage;results.error_kind=error.name;
results.permission_error=/Operation not permitted|Permission denied|No usable sandbox/.test(error.message);
} finally {
if(browser)await browser.close();
await new Promise(resolve => server.close(resolve));
}
process.stdout.write(JSON.stringify(results,null,2)+'\n');
}
main().catch(() => {process.stdout.write('{"status":"probe_setup_failed","details_suppressed":true}\n');process.exitCode=1;});