mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-14 23:24:52 +09:00
Add slave update subscriptions
Allow the web interface to listen for updates to the slave list and apply it live to the places where slaves are shown in the web interface.
This commit is contained in:
1 parent
cc438574ff
commit
2be91cbd3a
12 files changed
+275
-29
No files matched your search
@@ -10,7 +10,7 @@ const libUsers = require("@clusterio/lib/users");
|
||||
const testStrings = require("../lib/factorio/test_strings");
|
||||
const {
|
||||
TestControl, TestControlConnector, url, controlToken, slowTest,
|
||||
get, exec, execCtl, sendRcon, getControl, instancesDir,
|
||||
get, exec, execCtl, sendRcon, getControl, spawn, instancesDir,
|
||||
} = require("./index");
|
||||
|
||||
|
||||
@@ -62,6 +62,59 @@ describe("Integration of Clusterio", function() {
|
||||
});
|
||||
});
|
||||
|
||||
describe("clusterioslave", function() {
|
||||
describe("slaveUpdateEventHandler()", function() {
|
||||
it("should trigger when a new slave is added", async function() {
|
||||
slowTest(this);
|
||||
getControl().slaveUpdates = [];
|
||||
let config = "alt-slave-config.json";
|
||||
let configPath = path.join("temp", "test", config);
|
||||
await fs.remove(configPath);
|
||||
await execCtl(`slave create-config --id 5 --name alt-slave --generate-token --output ${config}`);
|
||||
await exec(
|
||||
`node ../../packages/slave --config ${config} config set slave.tls_ca ../../test/file/tls/cert.pem`
|
||||
);
|
||||
|
||||
let slaveProcess;
|
||||
try {
|
||||
slaveProcess = await spawn(
|
||||
"alt-slave:", `node ../../packages/slave run --config ${config}`, /SOCKET \| registering slave/
|
||||
);
|
||||
} finally {
|
||||
if (slaveProcess) {
|
||||
slaveProcess.kill("SIGINT");
|
||||
await events.once(slaveProcess, "exit");
|
||||
}
|
||||
}
|
||||
|
||||
let sawUpdate = false;
|
||||
let sawConnected = false;
|
||||
let sawDisconnected = false;
|
||||
|
||||
for (let update of getControl().slaveUpdates) {
|
||||
if (update.name !== "alt-slave") {
|
||||
continue;
|
||||
}
|
||||
|
||||
sawUpdate = true;
|
||||
if (update.connected) {
|
||||
sawConnected = true;
|
||||
} else {
|
||||
sawDisconnected = true;
|
||||
}
|
||||
}
|
||||
|
||||
assert(sawUpdate, "No slave update was sent");
|
||||
assert(sawConnected, "No slave update with status connected was sent");
|
||||
assert(sawDisconnected, "No slave update with status disconnected was sent");
|
||||
|
||||
let result = await libLink.messages.listSlaves.send(getControl());
|
||||
let slaves = new Map(result.list.map(instance => [instance.id, instance]));
|
||||
assert(slaves.has(5), "Slave list was not updated");
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("clusterioctl", function() {
|
||||
describe("master config list", function() {
|
||||
it("runs", async function() {
|
||||
|
||||
@@ -25,10 +25,14 @@ class TestControl extends libLink.Link {
|
||||
constructor(connector) {
|
||||
super("control", "master", connector);
|
||||
libLink.attachAllMessages(this);
|
||||
this.slaveUpdates = [];
|
||||
this.instanceUpdates = [];
|
||||
this.saveListUpdates = [];
|
||||
|
||||
this.connector.on("connect", () => {
|
||||
libLink.messages.setSlaveSubscriptions.send(
|
||||
this, { all: true, slave_ids: [] }
|
||||
).catch(err => logger.error(`Error setting slave subscriptions:\n${err.stack}`));
|
||||
libLink.messages.setInstanceSubscriptions.send(
|
||||
this, { all: true, instance_ids: [] }
|
||||
).catch(err => logger.error(`Error setting instance subscriptions:\n${err.stack}`));
|
||||
@@ -45,6 +49,10 @@ class TestControl extends libLink.Link {
|
||||
|
||||
async debugWsMessageEventHandler() { }
|
||||
|
||||
async slaveUpdateEventHandler(message) {
|
||||
this.slaveUpdates.push(message.data);
|
||||
}
|
||||
|
||||
async instanceUpdateEventHandler(message) {
|
||||
this.instanceUpdates.push(message.data);
|
||||
}
|
||||
@@ -223,6 +231,7 @@ module.exports = {
|
||||
execCtl,
|
||||
sendRcon,
|
||||
getControl,
|
||||
spawn,
|
||||
|
||||
url,
|
||||
controlToken,
|
||||
|
||||
Reference in new issue
Block a user