t56-live-verifier-guards.mjs 1.4 KB

1234567891011121314151617181920212223
  1. import assert from 'node:assert/strict'
  2. import { spawnSync } from 'node:child_process'
  3. import { fileURLToPath } from 'node:url'
  4. const fixture = new URL('./t56-live-fixture.mjs', import.meta.url).href
  5. const verifier = fileURLToPath(new URL('./t56-latest-live.mjs', import.meta.url))
  6. const cases = [
  7. ['normal', null], ['zero', null], ['missing', null],
  8. ['wrong-unit', /source unit mismatch/],
  9. ['wrong-node', /Source node identity mismatch/],
  10. ['invalid-time', /invalid source timestamp/],
  11. ['phantom-temperature', /Missing real source metric ENV_NODE_2_TEMPERATURE/],
  12. ['no-source', /Node 2: no source must not produce a reading/],
  13. ]
  14. for (const [scenario, expectedFailure] of cases) {
  15. const result = spawnSync(process.execPath, ['--import', fixture, verifier, 'http://fixture.invalid/api/cockpit/v1'], {
  16. encoding: 'utf8', timeout: 15000, env: { ...process.env, T56_LIVE_SCENARIO: scenario },
  17. })
  18. assert.ifError(result.error)
  19. assert.equal(result.status, expectedFailure ? 1 : 0, `${scenario}: ${result.stderr}`)
  20. if (expectedFailure) assert.match(result.stderr, expectedFailure, `${scenario}: failure must identify the actual assertion`)
  21. console.log(`PASS ${scenario}: ${expectedFailure ? 'expected assertion caught' : 'source readings match'}`)
  22. }
  23. console.log(`PASS live-verifier guards: ${cases.length}/${cases.length} offline transport scenarios`)