PSA/ee/appliance/host-service/tests/bootstrap-boundary.test.mjs
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

77 lines
2.5 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import {
assertHostBootstrapBoundary,
buildHostBootstrapPlan,
CONTROL_PLANE_RESPONSIBILITIES
} from '../bootstrap-boundary.mjs';
test('new-install host bootstrap boundary is minimal, ordered, offline, and idempotent', () => {
const plan = buildHostBootstrapPlan({
applianceRoot: '/opt/alga-appliance',
setupPort: 8080,
setupTokenFile: '/var/lib/alga-appliance/setup-token'
});
assert.equal(plan.boundaryVersion, 1);
assert.equal(plan.setupPort, 8080);
assert.deepEqual(plan.phases.map((phase) => phase.id), ['substrate', 'assets', 'handoff']);
assert.deepEqual(plan.commands.map((command) => command.id), [
'ensure-k3s',
'wait-kubernetes-api',
'import-control-plane-images',
'apply-local-storage',
'apply-control-plane',
'report-setup-url',
'report-fallback-command'
]);
assert.equal(plan.paths.localPathStorageManifest, '/opt/alga-appliance/manifests/local-path-storage.yaml');
assert.equal(plan.paths.controlPlaneManifestDir, '/opt/alga-appliance/control-plane/manifests');
assert.equal(plan.paths.controlPlaneImageDir, '/opt/alga-appliance/control-plane/images');
assert.equal(plan.commands.every((command) => command.idempotent), true);
assert.equal(plan.commands.every((command) => command.requiresNetwork === false), true);
assert.equal(assertHostBootstrapBoundary(plan), true);
for (const responsibility of CONTROL_PLANE_RESPONSIBILITIES) {
assert.equal(
plan.commands.some((command) => command.action === responsibility),
false,
`${responsibility} must remain in the Kubernetes-hosted control plane`
);
assert.equal(plan.forbiddenHostResponsibilities.includes(responsibility), true);
}
});
test('host bootstrap boundary rejects app setup work and pre-UI network dependencies', () => {
const plan = buildHostBootstrapPlan();
assert.throws(
() => assertHostBootstrapBoundary({
...plan,
commands: [
...plan.commands,
{
id: 'bad-bootstrap',
phase: 'assets',
action: 'trigger-application-bootstrap',
idempotent: true,
requiresNetwork: false
}
]
}),
/crosses the control-plane boundary/
);
assert.throws(
() => assertHostBootstrapBoundary({
...plan,
commands: plan.commands.map((command) => command.id === 'apply-control-plane'
? { ...command, requiresNetwork: true }
: command)
}),
/requires network before setup UI/
);
});