Skip to content

Commit

Permalink
Connection#ping: support no cb, return responseTime, add test
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonWoolf committed Oct 9, 2015
1 parent c6309eb commit dacbcc0
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 3 deletions.
1 change: 1 addition & 0 deletions common/lib/client/connection.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ var Connection = (function() {

Connection.prototype.ping = function(callback) {
Logger.logAction(Logger.LOG_MINOR, 'Connection.ping()', '');
callback = callback || function() {};
this.connectionManager.ping(null, callback);
};

Expand Down
10 changes: 7 additions & 3 deletions common/lib/transport/connectionmanager.js
Original file line number Diff line number Diff line change
Expand Up @@ -957,12 +957,16 @@ var ConnectionManager = (function() {
callback(new ErrorInfo('Timedout waiting for heartbeat response', 50000, 500));
};

var pingStart = Date.now();

var onHeartbeat = function () {
clearTimeout(timer);
callback(null);
var responseTime = Date.now() - pingStart;
callback(null, responseTime);
};

var timer = setTimeout(onTimeout, Defaults.sendTimeout);

transport.once('heartbeat', onHeartbeat);
transport.ping();
return;
Expand All @@ -978,11 +982,11 @@ var ConnectionManager = (function() {
* but ensure that we retry if the transport is superseded before we complete */
var completed = false, self = this;

var onPingComplete = function(err) {
var onPingComplete = function(err, responseTime) {
self.off('transport.active', onTransportActive);
if(!completed) {
completed = true;
callback(err);
callback(err, responseTime);
}
};

Expand Down
63 changes: 63 additions & 0 deletions spec/realtime/connection.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
"use strict";

define(['ably', 'shared_helper'], function(Ably, helper) {
var exports = {},
closeAndFinish = helper.closeAndFinish,
monitorConnection = helper.monitorConnection;

exports.setupConnection = function(test) {
test.expect(1);
helper.setupApp(function(err) {
if(err) {
test.ok(false, helper.displayError(err));
} else {
test.ok(true, 'app set up');
}
test.done();
});
};

exports.connectionPing = function(test) {
test.expect(1);
var realtime;
try {
realtime = helper.AblyRealtime();
realtime.connection.on('connected', function() {
realtime.connection.ping();
test.ok(true, 'check that ping without did not raise exception');
closeAndFinish(test, realtime);
});
monitorConnection(test, realtime);
} catch(e) {
test.ok(false, 'test failed with exception: ' + e.stack);
closeAndFinish(test, realtime);
}
};

exports.connectionPingWithCallback = function(test) {
test.expect(2);
var realtime;
try {
realtime = helper.AblyRealtime();
realtime.connection.on('connected', function() {
realtime.connection.ping(function(err, responseTime){
if(err) {
test.ok(false, helper.displayError(err));
closeAndFinish(test, realtime);
return;
}
test.equal(typeof responseTime, "number", 'check that a responseTime returned');
test.ok(responseTime > 0, 'check that responseTime was +ve');
closeAndFinish(test, realtime);
});
});
monitorConnection(test, realtime);
} catch(e) {
test.ok(false, 'test failed with exception: ' + e.stack);
closeAndFinish(test, realtime);
}
};


return module.exports = helper.withTimeout(exports);
});

0 comments on commit dacbcc0

Please sign in to comment.