From 6847aaace50dff71334d5cb32021f6726110085c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Mon, 17 Sep 2012 15:35:07 -0700 Subject: [PATCH] Have UT start and stop a server. --- test/config.js | 12 +++++-- test/server.js | 78 ++++++++++++++++++++++++++++++++++------- test/standalone-test.js | 10 ++++-- test/utils.js | 2 +- 4 files changed, 82 insertions(+), 20 deletions(-) diff --git a/test/config.js b/test/config.js index 004767c158..7cacb41a8c 100644 --- a/test/config.js +++ b/test/config.js @@ -2,12 +2,18 @@ // Configuration for unit tests // +// Where to find the binary. +exports.newcoind = "./newcoind"; + +// Configuration for servers. exports.servers = { alpha : { - "peer_ip" : "0.0.0.0", - "peer_port" : 51235, + // "peer_ip" : "0.0.0.0", + // "peer_port" : 51235, + "rpc_ip" : "0.0.0.0", + "rpc_port" : 5005, "websocket_ip" : "127.0.0.1", - "websocket_port" : 5005, + "websocket_port" : 6005, "validation_seed" : "shhDFVsmS2GSu5vUyZSPXYfj1r79h", "validators" : "n9L8LZZCwsdXzKUN9zoVxs4YznYXZ9hEhsQZY7aVpxtFaSceiyDZ beta" } diff --git a/test/server.js b/test/server.js index 36389818b6..585315546f 100644 --- a/test/server.js +++ b/test/server.js @@ -5,22 +5,22 @@ // Servers are created in tmp/server/$server // -console.log("server.js>"); - var config = require("./config.js"); var utils = require("./utils.js"); var fs = require("fs"); var path = require("path"); var util = require("util"); -// var child = require("child"); +var child = require("child_process"); + +var servers = {}; var serverPath = function(name) { return "tmp/server/" + name; }; // Return a server's newcoind.cfg as string. -var serverConfig = function(name) { +var configContent = function(name) { var cfg = config.servers[name]; return Object.keys(cfg).map(function (o) { @@ -28,16 +28,45 @@ var serverConfig = function(name) { }).join(""); }; +var configPath = function(name) { + return path.join(serverPath(name), "newcoind.cfg"); + +}; + // Write a server's newcoind.cfg. var writeConfig = function(name, done) { - fs.writeFile(path.join(serverPath(name), "newcoind.cfg"), serverConfig(name), 'utf8', done); + fs.writeFile(configPath(name), configContent(name), 'utf8', done); +}; + +var serverSpawnSync = function(name) { + // Spawn in standalone mode for now. + var server = child.spawn( + config.newcoind, + [ + "-a", + "--conf=" + configPath(name) + ], + { + env : process.env, + stdio : 'inherit' + }); + + servers[name] = server; + console.log("server: %s: %s -a --conf=%s", server.pid, config.newcoind, configPath(name)); + console.log("sever: start: servers = %s", Object.keys(servers).toString()); + + server.on('exit', function (code, signal) { + // If could not exec: code=127, signal=null + // If regular exit: code=0, signal=null + console.log("sever: spawn: server exited code=%s: signal=%s", code, signal); + delete servers[name]; + }); + }; var makeBase = function(name, done) { var path = serverPath(name); - console.log("start> %s: %s", name, path); - // Reset the server directory, build it if needed. utils.resetPath(path, '0777', function (e) { if (e) { @@ -47,15 +76,38 @@ var makeBase = function(name, done) { writeConfig(name, done); } }); - - console.log("start< %s", name); }; -var start = function(name, done) { - makeBase(name, done); +// Prepare the working directory and spawn the server. +exports.start = function(name, done) { + makeBase(name, function (e) { + if (e) { + throw e; + } + else { + serverSpawnSync(name); + done(); + } + }); }; -exports.start = start; +exports.stop = function(name, done) { + console.log("sever: stop: servers = %s", Object.keys(servers).toString()); + var server = servers[name]; + + if (server) { + server.on('exit', function (code, signal) { + console.log("sever: stop: server exited"); + delete servers[name]; + done(); + }); + server.kill(); + } + else + { + console.log("sever: stop: no such server"); + done(); + } +}; -console.log("server.js<"); // vim:ts=4 diff --git a/test/standalone-test.js b/test/standalone-test.js index 81221d7d19..a3a7a561a2 100644 --- a/test/standalone-test.js +++ b/test/standalone-test.js @@ -6,10 +6,14 @@ var buster = require("buster"); var server = require("./server.js"); buster.testCase("Check standalone server startup", { - "Start": function (done) { - server.start("alpha", function(e) { + "server start and stop": function (done) { + server.start("alpha", + function (e) { buster.refute(e); - done(); + server.stop("alpha", function (e) { + buster.refute(e); + done(); + }); }); } }); diff --git a/test/utils.js b/test/utils.js index 1f706e7a72..5596b38668 100644 --- a/test/utils.js +++ b/test/utils.js @@ -74,7 +74,7 @@ var emptyPath = function(dirPath, done) { // Remove path recursively. var rmPath = function(dirPath, done) { - console.log("rmPath: %s", dirPath); +// console.log("rmPath: %s", dirPath); fs.lstat(dirPath, function (err, stats) { if (err && err.code == "ENOENT") {