Pool Plutonium keys by game for launches and autoscaling
This commit is contained in:
@@ -55,12 +55,12 @@ describe('native creation intents before placement', () => {
|
||||
it('cancels unplaced work locally once, retains keys, and frees its logical server name', async () => {
|
||||
const id = await intent();
|
||||
const { db } = await import('../../src/lib/server/db/index.js');
|
||||
const { saveServerKey, getServerKey } = await import('../../src/lib/server/fleet/server-keys.js');
|
||||
const { reserveServerKey, getServerKey, serverKeyPool } = await import('../../src/lib/server/fleet/server-keys.js');
|
||||
const { cancelCreation, canCancelCreation } = await import('../../src/lib/server/provisioning/cancel-creation.js');
|
||||
const { getDeployment } = await import('../../src/lib/server/provisioning/history.js');
|
||||
const { nativeDeployment, unplacedNativeCreation } = await import('../../src/lib/server/backends/native.js');
|
||||
const { nextLobbyNumber } = await import('../../src/lib/server/provisioning/instances.js');
|
||||
saveServerKey(server, 'saved-key');
|
||||
reserveServerKey(server, 't5', 'saved-key');
|
||||
expect(canCancelCreation(id)).toBe(true);
|
||||
const cleanup = cancelCreation(id)!;
|
||||
expect(cleanup).toEqual(expect.any(String));
|
||||
@@ -71,7 +71,8 @@ describe('native creation intents before placement', () => {
|
||||
expect(getDeployment(cleanup)).toMatchObject({ backend: 'native', deployment: { state: 'done', server_deleted_at: expect.any(String) } });
|
||||
expect(unplacedNativeCreation(server)).toBeNull();
|
||||
expect(nextLobbyNumber('t5_zombie_theater')).toBe(1);
|
||||
expect(getServerKey(server)).toBe('saved-key');
|
||||
expect(getServerKey(server)).toBeUndefined();
|
||||
expect(serverKeyPool('t5')).toEqual({ total: 1, available: 1 });
|
||||
expect(db().prepare('SELECT id FROM ec_host_operations').all()).toEqual([]);
|
||||
expect(db().prepare('SELECT instance_id FROM ec_host_ports').all()).toEqual([]);
|
||||
});
|
||||
@@ -142,7 +143,7 @@ describe('native creation intents before placement', () => {
|
||||
const { queueNativeCreation, processNativeProvisioning } = await import('../../src/lib/server/provisioning/native.js');
|
||||
const input = { game: 't5' as const, gameMode: 'zombie' as const, mapSlug: 'theater', libraryId: library.id, image, plutoKey: 'saved-key' };
|
||||
const blocked = queueNativeCreation({ ...input, hostId: offline.id });
|
||||
const available = queueNativeCreation({ ...input, hostId: ready.id });
|
||||
const available = queueNativeCreation({ ...input, hostId: ready.id, plutoKey: 'ready-key' });
|
||||
expect(blocked.ok && available.ok).toBe(true);
|
||||
if (!blocked.ok || !available.ok) throw new Error('Could not queue launch fixtures.');
|
||||
await processNativeProvisioning(() => null);
|
||||
|
||||
Reference in New Issue
Block a user