From a680d8706e7e20bfb7f988c8e0fdcd306e389aa6 Mon Sep 17 00:00:00 2001 From: Ali Ijaz Sheikh Date: Thu, 22 Dec 2016 15:45:46 -0800 Subject: [PATCH] fix flakiness in test-debuglet.js (#207) * A setTimeout that doesn't dominate the async done() path causes flakiness. * Improve the test to be more on-topic. --- src/agent/debuglet.js | 2 ++ test/standalone/test-debuglet.js | 43 +++++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/agent/debuglet.js b/src/agent/debuglet.js index bed0c29a..2830a69d 100644 --- a/src/agent/debuglet.js +++ b/src/agent/debuglet.js @@ -52,6 +52,7 @@ module.exports = Debuglet; * @event 'started' once the startup tasks are completed * @event 'registered' once successfully registered to the debug api * @event 'stopped' if the agent stops due to a fatal error after starting + * @event 'remotelyDisabled' if the debuggee is disabled by the server. * @constructor */ function Debuglet(debug, config) { @@ -330,6 +331,7 @@ Debuglet.prototype.scheduleRegistration_ = function(seconds) { if (result.debuggee.isDisabled) { // Server has disabled this debuggee / debug agent. onError(new Error('Disabled by the server')); + that.emit('remotelyDisabled'); return; } diff --git a/test/standalone/test-debuglet.js b/test/standalone/test-debuglet.js index 3dfa98df..2facf9a8 100644 --- a/test/standalone/test-debuglet.js +++ b/test/standalone/test-debuglet.js @@ -215,6 +215,31 @@ describe(__filename, function() { {projectId: 'fake-project', credentials: fakeCredentials}); debuglet = new Debuglet(debug, defaultConfig); + nocks.oauth2(); + var scope = nock(API) + .post(REGISTER_PATH) + .reply(200, { + debuggee: { + id: DEBUGGEE_ID, + isDisabled: true + } + }); + + debuglet.once('remotelyDisabled', function() { + assert.ok(!debuglet.fetcherActive_); + scope.done(); + done(); + }); + + debuglet.start(); + }); + + it('should retry after a isDisabled request', function(done) { + this.timeout(4000); + var debug = require('../..')( + {projectId: 'fake-project', credentials: fakeCredentials}); + debuglet = new Debuglet(debug, defaultConfig); + nocks.oauth2(); var scope = nock(API) .post(REGISTER_PATH) @@ -231,19 +256,19 @@ describe(__filename, function() { } }); + var gotDisabled = false; + debuglet.once('remotelyDisabled', function() { + assert.ok(!debuglet.fetcherActive_); + gotDisabled = true; + }); + debuglet.once('registered', function(id) { + assert.ok(gotDisabled); assert.equal(id, DEBUGGEE_ID); - setImmediate(function() { - assert.ok(debuglet.fetcherActive_); - scope.done(); - done(); - }); + scope.done(); + done(); }); - setTimeout(function() { - assert.ok(!debuglet.fetcherActive_); - }, 1000); - debuglet.start(); });