Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/game-servers/assign.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ import { staticGameServers } from '../static-game-servers'
import { servemeTf } from '../serveme-tf'

// eslint-disable-next-line @typescript-eslint/no-explicit-any
const fakeGame = { number: 1 } as any
const fakeGame = { number: 1, map: 'cp_badlands' } as any
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const fakeServer = { id: 'srv', name: 'test', provider: 'tf2quickserver' } as any

Expand All @@ -58,14 +58,20 @@ describe('assign() with selected tf2QuickServer', () => {

it('calls tf2QuickServer.assign with serverId when value is tf2QuickServer:{id}', async () => {
await assign(fakeGame, 'tf2QuickServer:server-abc123')
expect(tf2QuickServer.assign).toHaveBeenCalledWith({ serverId: 'server-abc123' })
expect(tf2QuickServer.assign).toHaveBeenCalledWith({
serverId: 'server-abc123',
map: 'cp_badlands',
})
expect(staticGameServers.assign).not.toHaveBeenCalled()
expect(servemeTf.assign).not.toHaveBeenCalled()
})

it('calls tf2QuickServer.assign with region when value is tf2QuickServer:new:{region}', async () => {
await assign(fakeGame, 'tf2QuickServer:new:eu-frankfurt-1')
expect(tf2QuickServer.assign).toHaveBeenCalledWith({ region: 'eu-frankfurt-1' })
expect(tf2QuickServer.assign).toHaveBeenCalledWith({
region: 'eu-frankfurt-1',
map: 'cp_badlands',
})
})

it('throws for unknown game server selection', async () => {
Expand Down
6 changes: 3 additions & 3 deletions src/game-servers/assign.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ function assignFirstFree(game: GameModel): Promise<GameServer> {
return staticGameServers
.assign(game)
.catch(() => servemeTf.assign(game))
.catch(() => tf2QuickServer.assign())
.catch(() => tf2QuickServer.assign({ map: game.map }))
.catch((error: unknown) => {
logger.error(error)
throw errors.internalServerError(`no free servers available for game ${game.number}`)
Expand All @@ -60,9 +60,9 @@ function assignSelected(game: GameModel, selected: string): Promise<GameServer>
const payload = selected.substring(15)
if (payload.startsWith('new:')) {
const region = payload.substring(4)
return tf2QuickServer.assign({ region })
return tf2QuickServer.assign({ region, map: game.map })
}
return tf2QuickServer.assign({ serverId: payload })
return tf2QuickServer.assign({ serverId: payload, map: game.map })
}

throw errors.badRequest(`unknown game server selection: ${selected}`)
Expand Down
4 changes: 2 additions & 2 deletions src/tf2-quick-server/assign.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ describe('assign()', () => {
})

it('should create a server in the given region without calling findFree', async () => {
await assign({ region: 'us-chicago-1' })
expect(createServer).toHaveBeenCalledWith('us-chicago-1')
await assign({ region: 'us-chicago-1', map: 'cp_badlands' })
expect(createServer).toHaveBeenCalledWith('us-chicago-1', 'cp_badlands')
expect(findFree).not.toHaveBeenCalled()
})
})
Expand Down
5 changes: 3 additions & 2 deletions src/tf2-quick-server/assign.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ function stubGameServer(taskId: string): GameServer {
export async function assign({
serverId,
region,
}: { serverId?: string; region?: string } = {}): Promise<GameServer> {
map,
}: { serverId?: string; region?: string; map?: string } = {}): Promise<GameServer> {
if (!environment.TF2_QUICK_SERVER_CLIENT_ID || !environment.TF2_QUICK_SERVER_CLIENT_SECRET) {
throw errors.badRequest('TF2 QuickServer is disabled')
}
Expand Down Expand Up @@ -55,7 +56,7 @@ export async function assign({
region = await configuration.get('tf2_quick_server.region')
}

const { taskId } = await createServer(region)
const { taskId } = await createServer(region, map)
logger.info({ taskId, region }, 'TF2 QuickServer creation started')
return stubGameServer(taskId)
}
5 changes: 3 additions & 2 deletions src/tf2-quick-server/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,14 +120,15 @@ export async function listServers(): Promise<z.infer<typeof serverSchema>[]> {
return z.array(serverSchema).parse(await apiFetch('/api/servers'))
}

export async function createServer(region: string): Promise<{ taskId: string }> {
logger.info({ region }, 'creating TF2 QuickServer server')
export async function createServer(region: string, firstMap?: string): Promise<{ taskId: string }> {
logger.info({ region, firstMap }, 'creating TF2 QuickServer server')
return taskAcceptedSchema.parse(
await apiFetch('/api/servers', {
method: 'POST',
body: JSON.stringify({
region,
variantName: 'tf2pickup',
firstMap,
extraEnvs: {
SERVER_HOSTNAME: environment.WEBSITE_NAME,
},
Expand Down
Loading