diff --git a/clusterctl.js b/clusterctl.js index ce5693ad..7ba03f25 100644 --- a/clusterctl.js +++ b/clusterctl.js @@ -432,6 +432,12 @@ async function startControl() { //XXX control.close("done"); } +module.exports = { + // for testing only + _formatOutputColored: formatOutputColored, + _formatOutput: formatOutput, +} + if (module === require.main) { console.warn(` diff --git a/test/clusterctl.js b/test/clusterctl.js new file mode 100644 index 00000000..0359efb5 --- /dev/null +++ b/test/clusterctl.js @@ -0,0 +1,31 @@ +const assert = require('assert').strict; +const chalk = require('chalk'); + +const { testLines } = require('./lib/factorio/lines'); +const clusterctl = require('../clusterctl.js'); + + +describe("clusterctl", function() { + describe("formatOutputColored()", function() { + it("should pass the test lines", function() { + // Ensure tests get uncoloured output. + let old = chalk.level; + chalk.level = 0; + + for (let [reference, output] of testLines) { + let line = clusterctl._formatOutputColored(output); + assert.deepEqual(line, reference); + } + + chalk.level = old; + }); + }); + describe("formatOutput()", function() { + it("should pass the test lines", function() { + for (let [reference, output] of testLines) { + let line = clusterctl._formatOutput(output); + assert.deepEqual(line, reference); + } + }); + }); +}); diff --git a/test/lib/factorio/lines.js b/test/lib/factorio/lines.js new file mode 100644 index 00000000..eb6159ba --- /dev/null +++ b/test/lib/factorio/lines.js @@ -0,0 +1,116 @@ +// Lines for testing the factorio output + +let testLines = new Map([ + [ + " 1.306 Info RemoteCommandProcessor.cpp:131: Starting RCON interface at port 4000", + { + format: 'seconds', + time: '1.306', + type: 'log', + level: 'Info', + file: "RemoteCommandProcessor.cpp:131", + message: "Starting RCON interface at port 4000", + } + ], + [ + " 0.622 Warning FileUtil.cpp:527: test not found; using test.zip", + { + format: 'seconds', + time: '0.622', + type: 'log', + level: 'Warning', + file: "FileUtil.cpp:527", + message: "test not found; using test.zip", + } + ], + [ + " 0.554 Error Main.cpp:839: require_user_verification must be enabled for public games.", + { + format: 'seconds', + time: '0.554', + type: 'log', + level: 'Error', + file: "Main.cpp:839", + message: "require_user_verification must be enabled for public games.", + } + ], + [ + " 640.910 Quitting: remote-quit.", + { + format: 'seconds', + time: '640.910', + type: 'generic', + message: "Quitting: remote-quit.", + } + ], + [ + "1641.421 Goodbye", + { + format: 'seconds', + time: '1641.421', + type: 'generic', + message: "Goodbye", + } + ], + [ + "2019-01-20 10:30:04 [JOIN] User joined the game", + { + format: 'date', + time: '2019-01-20 10:30:04', + type: 'action', + action: "JOIN", + message: "User joined the game", + } + ], + [ + "2019-01-20 10:30:07 [CHAT] User: chat message", + { + format: 'date', + time: '2019-01-20 10:30:07', + type: 'action', + action: "CHAT", + message: "User: chat message", + } + ], + [ + "2019-01-20 10:30:14 [COMMAND] User (command): blah", + { + format: 'date', + time: '2019-01-20 10:30:14', + type: 'action', + action: "COMMAND", + message: "User (command): blah", + } + ], + [ + "2019-01-20 10:30:14 Cannot execute command. Error: [string \"blah\"]:1: syntax error near ", + { + format: 'date', + time: '2019-01-20 10:30:14', + type: 'generic', + message: "Cannot execute command. Error: [string \"blah\"]:1: syntax error near ", + } + ], + [ + "2019-01-20 10:30:21 [LEAVE] User left the game", + { + format: 'date', + time: '2019-01-20 10:30:21', + type: 'action', + action: "LEAVE", + message: "User left the game", + } + ], + [ + "Error while running event level::on_nth_tick(1)", + { + format: 'none', + type: 'generic', + message: "Error while running event level::on_nth_tick(1)", + } + ], +]) + +module.exports = { + testLines, +} diff --git a/test/lib/factorio/server.js b/test/lib/factorio/server.js index 33ef05a5..1923508f 100644 --- a/test/lib/factorio/server.js +++ b/test/lib/factorio/server.js @@ -3,6 +3,7 @@ const fs = require("fs-extra"); const path = require("path"); const factorio = require("lib/factorio"); +const { testLines } = require("./lines"); describe("lib/factorio/server", function() { @@ -92,95 +93,6 @@ describe("lib/factorio/server", function() { }); describe("parseOutput()", function() { - let testLines = new Map([ - [ - " 1.306 Info RemoteCommandProcessor.cpp:131: Starting RCON interface at port 4000", - { - format: 'seconds', - time: '1.306', - type: 'log', - level: 'Info', - file: "RemoteCommandProcessor.cpp:131", - message: "Starting RCON interface at port 4000", - } - ], - [ - " 640.910 Quitting: remote-quit.", - { - format: 'seconds', - time: '640.910', - type: 'generic', - message: "Quitting: remote-quit.", - } - ], - [ - "1641.421 Goodbye", - { - format: 'seconds', - time: '1641.421', - type: 'generic', - message: "Goodbye", - } - ], - [ - "2019-01-20 10:30:04 [JOIN] User joined the game", - { - format: 'date', - time: '2019-01-20 10:30:04', - type: 'action', - action: "JOIN", - message: "User joined the game", - } - ], - [ - "2019-01-20 10:30:07 [CHAT] User: chat message", - { - format: 'date', - time: '2019-01-20 10:30:07', - type: 'action', - action: "CHAT", - message: "User: chat message", - } - ], - [ - "2019-01-20 10:30:14 [COMMAND] User (command): blah", - { - format: 'date', - time: '2019-01-20 10:30:14', - type: 'action', - action: "COMMAND", - message: "User (command): blah", - } - ], - [ - "2019-01-20 10:30:14 Cannot execute command. Error: [string \"blah\"]:1: syntax error near ", - { - format: 'date', - time: '2019-01-20 10:30:14', - type: 'generic', - message: "Cannot execute command. Error: [string \"blah\"]:1: syntax error near ", - } - ], - [ - "2019-01-20 10:30:21 [LEAVE] User left the game", - { - format: 'date', - time: '2019-01-20 10:30:21', - type: 'action', - action: "LEAVE", - message: "User left the game", - } - ], - [ - "Error while running event level::on_nth_tick(1)", - { - format: 'none', - type: 'generic', - message: "Error while running event level::on_nth_tick(1)", - } - ], - ]) - it("should parse the test lines", function() { for (let [line, reference] of testLines) { reference.source = 'test';