From 8c5f08ad9bcd3f64f230602bff0a1825375be86c Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Sat, 12 Jan 2013 12:48:18 -0800 Subject: [PATCH] UT: More work on detecting standalone server exit. --- src/js/remote.js | 13 ++++++++++++- test/server.js | 6 ++++-- test/testutils.js | 16 ++++++++++++++-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/js/remote.js b/src/js/remote.js index af5046cbb8..992560eeb9 100644 --- a/src/js/remote.js +++ b/src/js/remote.js @@ -196,6 +196,7 @@ var Remote = function (opts, trace) { this.local_fee = opts.local_fee; // Locally set fees this.id = 0; this.trace = opts.trace || trace; + this._server_fatal = false; // True, if we know server exited. this._ledger_current_index = undefined; this._ledger_hash = undefined; this._ledger_time = undefined; @@ -289,6 +290,11 @@ Remote.fees = { 'offer' : Amount.from_json("10"), }; +// Inform remote that the remote server is not comming back. +Remote.prototype.server_fatal = function () { + this._server_fatal = true; +}; + // Set the emitted state: 'online' or 'offline' Remote.prototype._set_state = function (state) { if (this.trace) console.log("remote: set_state: %s", state); @@ -378,7 +384,12 @@ Remote.prototype._connect_retry = function () { this.retry_timer = setTimeout(function () { if (self.trace) console.log("remote: retry"); - if (self.online_target) { + if (self._server_fatal) { + // Stop trying to connect. + // nothing(); + console.log("FATAL"); + } + else if (self.online_target) { self._connect_start(); } else { diff --git a/test/server.js b/test/server.js index 84d5164b46..5a5d79cc24 100644 --- a/test/server.js +++ b/test/server.js @@ -98,6 +98,10 @@ Server.prototype._serverSpawnSync = function() { // By default, just log exits. this.child.on('exit', function(code, signal) { + if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); + + self.emit('exited'); + // Workaround for // https://github.com/busterjs/buster/issues/266 if (!self.stopping) { @@ -108,8 +112,6 @@ Server.prototype._serverSpawnSync = function() { // If regular exit: code=0, signal=null // Fail the test if the server has not called "stop". buster.assert(self.stopping, 'Server died with signal '+signal); - - if (!self.quiet) console.log("server: spawn: server exited code=%s: signal=%s", code, signal); }); }; diff --git a/test/testutils.js b/test/testutils.js index 55e87a38dc..399a6f5130 100644 --- a/test/testutils.js +++ b/test/testutils.js @@ -90,10 +90,22 @@ var build_setup = function (opts, host) { function runServerStep(callback) { if (opts.no_server) return callback(); - data.server = Server.from_config(host, !!opts.verbose_server).on('started', callback).start(); + data.server = Server + .from_config(host, !!opts.verbose_server) + .on('started', callback) + .on('exited', function () { + // If know the remote, tell it server is gone. + if (self.remote) + self.remote.server_fatal(); + }) + .start(); }, function connectWebsocketStep(callback) { - self.remote = data.remote = Remote.from_config(host, !!opts.verbose_ws).once('ledger_closed', callback).connect(); + self.remote = data.remote = + Remote + .from_config(host, !!opts.verbose_ws) + .once('ledger_closed', callback) + .connect(); } ], done); };