Runner: Proxy und Startseite, register/wake (R12)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-09-30 21:53:41 +00:00
1 parent 6cd50bba9f
commit 4afe7eb5cd
7 files changed
+360 -2

No files matched your search

+42
View File
@@ -249,3 +249,45 @@ test('cleanupOrphans: ein fehlschlagendes rm stoppt die übrigen nicht', async (
try { await s.dev.cleanupOrphans(); } finally { console.error = orig; }
assert.deepEqual(s.removed, ['preview-dev-x', 'preview-dev-y']);
});
test('register: speichert Spezifikation ohne Start (sleeping); wake startet damit', async () => {
const s = setup();
assert.deepEqual(await s.dev.register('a', job('a')), { state: 'sleeping' });
assert.equal(s.runs.length, 0); assert.equal(s.prepared.length, 0);
assert.deepEqual(await s.dev.wake('a'), { state: 'starting' });
await s.dev.idle();
assert.equal(s.runs.length, 1);
assert.deepEqual(await s.dev.wake('a'), { state: 'online', target: 'http://preview-dev-a:5173' });
});
test('wake: unbekannter sub ⇒ unknown, nach stop ebenfalls', async () => {
const s = setup();
assert.deepEqual(await s.dev.wake('x'), { state: 'unknown' });
await s.dev.register('a', job('a'));
await s.dev.stop('a');
assert.deepEqual(await s.dev.wake('a'), { state: 'unknown' });
});
test('register: läuft mit gleichem sha ⇒ unverändert; mit anderem sha ⇒ Neustart; wake nutzt neue Spezifikation', async () => {
const s = setup();
await s.dev.ensure('a', job('a')); await s.dev.idle();
assert.deepEqual(await s.dev.register('a', job('a')), { state: 'online' });
assert.equal(s.runs.length, 1);
assert.deepEqual(await s.dev.register('a', job('a', { sha: '1234567' })), { state: 'starting' });
await s.dev.idle();
assert.equal(s.runs.length, 2);
assert.equal(s.prepared[1].job.sha, '1234567');
assert.ok(s.removed.includes('preview-dev-a'));
});
test('register: schlafender sub mit neuem sha startet nicht, wake nutzt das neue sha', async () => {
const s = setup();
await s.dev.ensure('a', job('a')); await s.dev.idle();
s.clock.t += 21 * MIN; await s.dev.sweep();
assert.equal(s.dev.status('a').state, 'sleeping');
assert.deepEqual(await s.dev.register('a', job('a', { sha: '7654321' })), { state: 'sleeping' });
assert.equal(s.runs.length, 1);
await s.dev.wake('a'); await s.dev.idle();
assert.equal(s.runs.length, 2);
assert.equal(s.prepared[1].job.sha, '7654321');
});