gitoriaLog in with ident

ident

All repositories: gitoria

ReadmeCodePull requestsReleasesTicketsSettings
Commitcc063ea2cc063ea2deploy.sh: never send .git or .gitignore to Byrodinmrecc063ea2/tests/dev-smoke.mjs

2.7 KB

  1. // tests/dev-smoke.mjs — a login against the RUNNING DEV server (ident :8351) in one real
  2. // headless Chrome (time zone emulated Europe/Vienna): email → OTP read from the dev mail
  3. // sink → signed in → the identity list is shown. The first run creates [email protected]
  4. // in the DEV store (default identity, welcome form → Skip); later runs just sign in.
  5. // Rate limit: max 3 runs per 10 minutes.
  6. //
  7. // node tests/dev-smoke.mjs [identUrl] default http://100.77.141.84:8351
  8. //
  9. // Debug ports 8660-8669; Chrome is killed by PID at the end.
  10. import { readFileSync, existsSync } from 'node:fs';
  11. import { dirname, join, resolve } from 'node:path';
  12. import { fileURLToPath } from 'node:url';
  13. import { launchBrowser } from './cdp.mjs';
  14. if (!process.env.HL_CHROME && existsSync('/opt/google/chrome/chrome')) process.env.HL_CHROME = '/opt/google/chrome/chrome';
  15. const APP = resolve(dirname(fileURLToPath(import.meta.url)), '..');
  16. const SINK = join(APP, 'storage/mail-sink.txt');
  17. const IDENT = process.argv[2] || 'http://100.77.141.84:8351';
  18. const EMAIL = '[email protected]';
  19. const codes = () => existsSync(SINK) ? readFileSync(SINK, 'utf8').split('\n').filter(l => l.startsWith(EMAIL + ' ')).map(l => l.split(' ')[1]) : [];
  20. let br, ok = false;
  21. try {
  22. br = await launchBrowser({ debugPortRange: [8660, 8669] });
  23. const p = await br.newPage();
  24. await p.send('Emulation.setTimezoneOverride', { timezoneId: 'Europe/Vienna' });
  25. await p.goto(IDENT + '/');
  26. if (await p.evaluate('!!document.querySelector("#signout")')) throw new Error('fresh browser is signed in?');
  27. await p.waitFor('!!window.__hl && window.__hl.socket && window.__hl.socket.readyState === 1', { label: 'socket' });
  28. const before = codes().length;
  29. await p.type('#email', EMAIL);
  30. await p.click('#sendcode');
  31. await p.waitFor('!!document.querySelector("#code") || /\\S/.test(document.querySelector("#message").textContent)', { label: 'code form' });
  32. if (codes().length !== before + 1) throw new Error('no new code in ' + SINK + ' — page says: ' + await p.text('#message'));
  33. await p.type('#code', codes().at(-1));
  34. await p.click('#verify');
  35. await p.waitFor('!!document.querySelector("#identities")', { label: 'signed in' });
  36. if (await p.evaluate('!!document.querySelector("#skip")')) { console.log('first login: welcome form shown → Skip'); await p.click('#skip'); }
  37. console.log('signed in as:', await p.text('#meemail'), '| time zone:', await p.text('#timezone'));
  38. console.log('identities:', JSON.stringify(await p.evaluate(`[...document.querySelectorAll('#identities identity-label')].map(e => e.textContent)`)));
  39. ok = (await p.text('#meemail')) === EMAIL;
  40. } catch (e) {
  41. console.log('FAILED', e && e.message || e);
  42. } finally {
  43. if (br) await br.close();
  44. console.log(ok ? 'SMOKE OK' : 'SMOKE FAILED');
  45. process.exit(ok ? 0 : 1);
  46. }

Branches

Latest commits

  • cc063ea2deploy.sh: never send .git or .gitignore to Byrodinmre
  • 81b15b7bState of 2026-09-27, before the move to gitoriamre