mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-13 07:04:53 +09:00
Sets restart required when a plugin is updated (#794)
* Template type for load plugin config * Add plugin update checking * Add restart icon to instance list * Add tests * Log package name when failing to read package json
This commit is contained in:
1 parent
41151d47f0
commit
73cc019d2f
11 files changed
+228
-49
No files matched your search
@@ -1,4 +1,5 @@
|
||||
"use strict";
|
||||
const path = require("node:path");
|
||||
const assert = require("assert").strict;
|
||||
const { Controller, HostInfo, InstanceInfo } = require("@clusterio/controller");
|
||||
const { ControllerConfig, Address, RequestError, InstanceConfig, SystemInfo, Role } = require("@clusterio/lib");
|
||||
@@ -27,8 +28,10 @@ describe("controller/src/Controller", function() {
|
||||
describe("class Controller", function() {
|
||||
/** @type {Controller} */
|
||||
let controller, mockInstanceConfig;
|
||||
const controllerVersion = require("@clusterio/controller/package.json").version;
|
||||
before(async function() {
|
||||
controller = new Controller({}, [], new ControllerConfig("controller"));
|
||||
const controllerConfig = new ControllerConfig("controller", { "controller.version": controllerVersion });
|
||||
controller = new Controller({}, [], controllerConfig);
|
||||
mockInstanceConfig = new MockInstanceConfig(new Map([
|
||||
["instance.id", 100], ["instance.name", "test"], ["factorio.settings", []],
|
||||
]));
|
||||
@@ -233,6 +236,62 @@ describe("controller/src/Controller", function() {
|
||||
assert(instanceInfo.updatedAtMs === 0, "updatedAtMs incremented");
|
||||
});
|
||||
});
|
||||
describe(".checkRestartRequired()", function() {
|
||||
beforeEach(function() {
|
||||
// Would not be needed if controller setup was beforeEach
|
||||
controller.config.restartRequired = false;
|
||||
controller.config.set("controller.version", controllerVersion);
|
||||
controller.config.set("global_chat.load_plugin", true);
|
||||
controller.pluginInfos[0] = {
|
||||
name: "global_chat",
|
||||
requirePath: path.dirname(require.resolve("@clusterio/controller/package.json")),
|
||||
version: controllerVersion,
|
||||
};
|
||||
});
|
||||
it("returns false when no changes are present", async function() {
|
||||
controller.pluginInfos[0].webEntrypoint = true;
|
||||
controller.pluginInfos[0].controllerEntrypoint = true;
|
||||
const result = await controller.checkRestartRequired();
|
||||
assert.equal(result, false);
|
||||
assert.equal(controller.config.restartRequired, false);
|
||||
});
|
||||
it("returns false when an unloaded plugin version changes", async function() {
|
||||
controller.pluginInfos[0].version = "0.0.0";
|
||||
controller.pluginInfos[0].webEntrypoint = true;
|
||||
controller.pluginInfos[0].controllerEntrypoint = true;
|
||||
controller.config.set("global_chat.load_plugin", false);
|
||||
controller.config.restartRequired = false; // Setting load_plugin requires a restart
|
||||
const result = await controller.checkRestartRequired();
|
||||
assert.equal(result, false);
|
||||
assert.equal(controller.config.restartRequired, false);
|
||||
});
|
||||
it("returns true when the config flag is set", async function() {
|
||||
controller.config.restartRequired = true;
|
||||
const result = await controller.checkRestartRequired();
|
||||
assert.equal(result, true);
|
||||
assert.equal(controller.config.restartRequired, true);
|
||||
});
|
||||
it("returns true when clusterio version changes", async function() {
|
||||
controller.config.set("controller.version", "0.0.0");
|
||||
const result = await controller.checkRestartRequired();
|
||||
assert.equal(result, true);
|
||||
assert.equal(controller.config.restartRequired, true);
|
||||
});
|
||||
it("returns true when a controller plugin version changes", async function() {
|
||||
controller.pluginInfos[0].version = "0.0.0";
|
||||
controller.pluginInfos[0].controllerEntrypoint = true;
|
||||
const result = await controller.checkRestartRequired();
|
||||
assert.equal(result, true);
|
||||
assert.equal(controller.config.restartRequired, true);
|
||||
});
|
||||
it("returns true when a web plugin version changes", async function() {
|
||||
controller.pluginInfos[0].version = "0.0.0";
|
||||
controller.pluginInfos[0].webEntrypoint = true;
|
||||
const result = await controller.checkRestartRequired();
|
||||
assert.equal(result, true);
|
||||
assert.equal(controller.config.restartRequired, true);
|
||||
});
|
||||
});
|
||||
});
|
||||
describe("migrations", function() {
|
||||
describe("SystemInfo", function() {
|
||||
|
||||
Reference in new issue
Block a user