feat: allow only one server to be launched
This commit is contained in:
parent
e8805e0f2e
commit
655cf655da
5 changed files with 124 additions and 24 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue