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
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
77 lines
2.5 KiB
JavaScript
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/
|
|
);
|
|
});
|