import fs from 'node:fs'; import path from 'node:path'; import test from 'node:test'; import assert from 'node:assert/strict'; const repoRoot = path.resolve(path.join(import.meta.dirname, '..', '..', '..', '..')); test('F019 new-install primary host path is Kubernetes bootstrap, not legacy host API service', () => { const service = fs.readFileSync(path.join(repoRoot, 'ee', 'appliance', 'systemd', 'alga-appliance-bootstrap.service'), 'utf8'); const readme = fs.readFileSync(path.join(repoRoot, 'ee', 'appliance', 'systemd', 'README.md'), 'utf8'); assert.match(service, /Description=Alga Appliance Kubernetes Control Plane Bootstrap/); assert.match(service, /ExecStartPre=\/usr\/bin\/env node \/opt\/alga-appliance\/host-service\/init-token\.mjs/); assert.doesNotMatch(service, /init-admin-credential/); assert.match(service, /ExecStart=\/opt\/alga-appliance\/scripts\/bootstrap-control-plane\.sh/); assert.match(service, /RemainAfterExit=yes/); const tokenIndex = service.indexOf('ExecStartPre=/usr/bin/env node /opt/alga-appliance/host-service/init-token.mjs'); const bootstrapIndex = service.indexOf('ExecStart=/opt/alga-appliance/scripts/bootstrap-control-plane.sh'); const consoleIndex = service.indexOf('ExecStartPost=/usr/bin/env node /opt/alga-appliance/host-service/console.mjs'); assert.ok(tokenIndex !== -1 && bootstrapIndex > tokenIndex && consoleIndex > bootstrapIndex, 'bootstrap service must initialize the token before rendering the console banner'); assert.doesNotMatch(service, /host-service\/server\.mjs/); assert.doesNotMatch(service, /ALGA_APPLIANCE_STATE_FILE/); assert.match(readme, /legacy host API service is not part of the new-install primary path/); });