feat: allow only one server to be launched

This commit is contained in:
Shinuwa 2026-06-13 19:51:30 +02:00
parent e8805e0f2e
commit 655cf655da
5 changed files with 124 additions and 24 deletions

View file

@ -125,6 +125,7 @@ test("filters servers and shows secrets for visible non-admin servers", async ()
assert.equal(response.body.servers[0].id, "offline-server");
assert.equal(response.body.servers[0].secrets.password, "secret-1");
assert.equal(response.body.servers[0].hasSecrets, true);
assert.equal(response.body.servers[0].canStart, false);
});
test("admin sees all servers and secrets", async () => {
@ -179,20 +180,50 @@ test("status file is authoritative for server list and names", async () => {
});
test("starts an offline authorized server and writes a log", async () => {
const token = await login(playerPassword);
const start = await request("/api/servers/offline-server/start", {
method: "POST",
token,
});
try {
fs.writeFileSync(
process.env.GAMESERVERS_STATUS_FILE,
`${JSON.stringify(
{
servers: [
{
id: "offline-server",
game: "Offline Server",
address: "games.example:1111",
port: 1111,
active: false,
},
{
id: "online-server",
game: "Online Server",
address: "games.example:2222",
port: 2222,
active: false,
},
],
},
null,
2
)}\n`
);
assert.equal(start.status, 200);
assert.equal(start.body.status, "started");
const token = await login(playerPassword);
const start = await request("/api/servers/offline-server/start", {
method: "POST",
token,
});
const adminToken = await login(adminLoginPassword);
const logs = await request("/api/logs", { token: adminToken });
assert.equal(logs.status, 200);
assert.equal(logs.body.logs[0].groupId, "players");
assert.equal(logs.body.logs[0].serverId, "offline-server");
assert.equal(start.status, 200);
assert.equal(start.body.status, "started");
const adminToken = await login(adminLoginPassword);
const logs = await request("/api/logs", { token: adminToken });
assert.equal(logs.status, 200);
assert.equal(logs.body.logs[0].groupId, "players");
assert.equal(logs.body.logs[0].serverId, "offline-server");
} finally {
fs.writeFileSync(process.env.GAMESERVERS_STATUS_FILE, originalStatus);
}
});
test("refuses to start online or unauthorized servers", async () => {
@ -204,6 +235,13 @@ test("refuses to start online or unauthorized servers", async () => {
assert.equal(unauthorized.status, 404);
const adminToken = await login(adminLoginPassword);
const blockedByActiveServer = await request("/api/servers/offline-server/start", {
method: "POST",
token: adminToken,
});
assert.equal(blockedByActiveServer.status, 409);
assert.equal(blockedByActiveServer.body.error, "Un serveur est deja en cours");
const online = await request("/api/servers/online-server/start", {
method: "POST",
token: adminToken,