account-connection-monitor-smoke-test.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/env node
  2. 'use strict';
  3. const assert = require('assert/strict');
  4. const { createAccountConnectionMonitor } = require('../mcp/src/core/account-connection-monitor');
  5. function result(online, statusCode = online ? 2 : 0) {
  6. return { status: 'ok', summary: { uid: 'device-1', online, statusCode }, data: { uid: 'device-1', online, statusCode }, warnings: [], errors: [] };
  7. }
  8. async function main() {
  9. let clock = 100000;
  10. let recoveryCalls = 0;
  11. const samples = [result(true), result(false), result(false), result(true)];
  12. const monitor = createAccountConnectionMonitor({
  13. checkStatus: async () => samples.shift(),
  14. recoverLogin: async () => {
  15. recoveryCalls += 1;
  16. return { summary: { loggedIn: true, statusCode: 2 } };
  17. },
  18. now: () => clock,
  19. cacheTtlMs: 0,
  20. recoveryCooldownMs: 0,
  21. });
  22. assert.equal((await monitor.getStatus({ force: true })).summary.connectionState, 'online');
  23. clock += 15000;
  24. const transient = await monitor.getStatus({ force: true });
  25. assert.equal(transient.summary.online, true);
  26. assert.equal(transient.summary.connectionState, 'verifying');
  27. clock += 15000;
  28. const recovered = await monitor.getStatus({ force: true });
  29. assert.equal(recoveryCalls, 1);
  30. assert.equal(recovered.summary.online, true);
  31. assert.equal(recovered.summary.autoRecovered, true);
  32. process.stdout.write(JSON.stringify({ status: 'ok', checks: 7 }) + '\n');
  33. }
  34. main().catch(error => { console.error(error); process.exit(1); });