mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 15:04:52 +09:00
If the JSON parse failed it will usually be because Factorio returned an error message instead of JSON, pass this along for easier debugging.
72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
const assert = require('assert').strict;
|
|
|
|
const mock = require('../../../test/mock');
|
|
const instance = require('../instance');
|
|
const info = require('../info');
|
|
|
|
|
|
describe("statistics_exporter plugin", function() {
|
|
describe("class InstancePlugin", function() {
|
|
let instancePlugin;
|
|
before(async function() {
|
|
instancePlugin = new instance.InstancePlugin(info, new mock.MockInstance());
|
|
await instancePlugin.init();
|
|
});
|
|
|
|
describe(".onMetrics()", function() {
|
|
it("should record statistics", async function() {
|
|
instancePlugin.instance.server.rconCommandResults.set(
|
|
'/sc remote.call("statistics_exporter", "export")',
|
|
JSON.stringify({
|
|
game_tick: 100,
|
|
player_count: 3,
|
|
force_flow_statistics: {
|
|
player: {
|
|
item_production_statistics: {
|
|
input: { "inserter": 10, },
|
|
output: { "iron-plate": 24, }
|
|
},
|
|
}
|
|
},
|
|
game_flow_statistics: {
|
|
pollution_statistics: {
|
|
input: { "boiler": 2000 },
|
|
output: { "tree-proxy": 560 },
|
|
}
|
|
},
|
|
})
|
|
);
|
|
|
|
await instancePlugin.onMetrics();
|
|
|
|
assert.equal(instance._instancePlayerCount.labels('7357').get(), 3);
|
|
assert.equal(instance._instanceGameTicksTotal.labels('7357').get(), 100);
|
|
assert.equal(instance._instanceForceFlowStatistics.labels(
|
|
'7357', 'player', 'item_production_statistics', 'input', 'inserter').get(),
|
|
10);
|
|
assert.equal(instance._instanceGameFlowStatistics.labels(
|
|
'7357', 'pollution_statistics', 'input', 'boiler').get(),
|
|
2000);
|
|
});
|
|
it("should pass on JSON parse errors", async function() {
|
|
let string = 'An error occured\n';
|
|
instancePlugin.instance.server.rconCommandResults.set(
|
|
'/sc remote.call("statistics_exporter", "export")', string
|
|
);
|
|
|
|
let errorMessage;
|
|
try {
|
|
JSON.parse(string);
|
|
} catch (err) {
|
|
errorMessage = err.message;
|
|
}
|
|
|
|
await assert.rejects(
|
|
instancePlugin.onMetrics(),
|
|
new Error(`Error parsing statistics JSON: ${errorMessage}, content "${string}"`)
|
|
);
|
|
});
|
|
});
|
|
});
|
|
});
|