| Index: remoting/webapp/unittests/fallback_signal_strategy_unittest.js
|
| diff --git a/remoting/webapp/unittests/fallback_signal_strategy_unittest.js b/remoting/webapp/unittests/fallback_signal_strategy_unittest.js
|
| index 2c3826a02944061cff27cb0acb521dfabe7cd130..6ff39527b3cd54e60e5292aa308d9df5322cb30e 100644
|
| --- a/remoting/webapp/unittests/fallback_signal_strategy_unittest.js
|
| +++ b/remoting/webapp/unittests/fallback_signal_strategy_unittest.js
|
| @@ -6,14 +6,16 @@
|
|
|
| 'use strict';
|
|
|
| -var ControllableSignalStrategy = function(jid) {
|
| +var ControllableSignalStrategy = function(jid, type, stateChangeCallback) {
|
| this.jid = jid;
|
| - this.onStateChangedCallback = function() {};
|
| - this.state = null;
|
| + this.type = type;
|
| + this.stateChangeCallback_ = stateChangeCallback;
|
| + this.state_ = null;
|
| this.onIncomingStanzaCallback = function() {};
|
| this.dispose = sinon.spy();
|
| this.connect = sinon.spy();
|
| this.sendMessage = sinon.spy();
|
| + this.sendConnectionSetupResults = sinon.spy();
|
| };
|
|
|
| ControllableSignalStrategy.prototype.setStateChangedCallback = function(
|
| @@ -41,6 +43,10 @@ ControllableSignalStrategy.prototype.getJid = function(message) {
|
| return this.jid;
|
| };
|
|
|
| +ControllableSignalStrategy.prototype.getType = function(message) {
|
| + return this.type;
|
| +};
|
| +
|
| ControllableSignalStrategy.prototype.setExternalCallbackForTesting =
|
| function(externalCallback) {
|
| this.externalCallback_ = externalCallback;
|
| @@ -60,44 +66,51 @@ ControllableSignalStrategy.prototype.setStateForTesting =
|
| }
|
| };
|
|
|
| +var MockLogToServer = function() {
|
| + this.logSignalStrategyProgress = sinon.spy();
|
| +};
|
| +
|
| +MockLogToServer.prototype.assertProgress = function() {
|
| + equal(this.logSignalStrategyProgress.callCount * 2, arguments.length);
|
| + for (var i = 0; i < this.logSignalStrategyProgress.callCount; ++i) {
|
| + equal(this.logSignalStrategyProgress.getCall(i).args[0], arguments[2 * i]);
|
| + equal(this.logSignalStrategyProgress.getCall(i).args[1],
|
| + arguments[2 * i + 1]);
|
| + }
|
| +};
|
| +
|
| var onStateChange = null;
|
| -var onProgressCallback = null;
|
| var onIncomingStanzaCallback = null;
|
| var strategy = null;
|
| var primary = null;
|
| var secondary = null;
|
| +var logToServer = null;
|
|
|
| module('fallback_signal_strategy', {
|
| setup: function() {
|
| onStateChange = sinon.spy();
|
| - onProgressCallback = sinon.spy();
|
| onIncomingStanzaCallback = sinon.spy();
|
| strategy = new remoting.FallbackSignalStrategy(
|
| - new ControllableSignalStrategy('primary-jid'),
|
| - new ControllableSignalStrategy('secondary-jid'),
|
| - onProgressCallback);
|
| + new ControllableSignalStrategy('primary-jid',
|
| + remoting.SignalStrategy.Type.XMPP),
|
| + new ControllableSignalStrategy('secondary-jid',
|
| + remoting.SignalStrategy.Type.WCS));
|
| strategy.setStateChangedCallback(onStateChange);
|
| strategy.setIncomingStanzaCallback(onIncomingStanzaCallback);
|
| primary = strategy.primary_;
|
| secondary = strategy.secondary_;
|
| + logToServer = new MockLogToServer();
|
| primary.setExternalCallbackForTesting(onStateChange);
|
| secondary.setExternalCallbackForTesting(onStateChange);
|
| },
|
| teardown: function() {
|
| onStateChange = null;
|
| - onProgressCallback = null;
|
| onIncomingStanzaCallback = null;
|
| strategy = null;
|
| primary = null;
|
| secondary = null;
|
| + logToServer = null;
|
| },
|
| - // Assert that the progress callback has been called exactly once
|
| - // since the last call, and with the specified state.
|
| - assertProgress: function(state) {
|
| - ok(onProgressCallback.calledOnce);
|
| - ok(onProgressCallback.calledWith(state));
|
| - onProgressCallback.reset();
|
| - }
|
| });
|
|
|
| test('primary succeeds; send & receive routed to it',
|
| @@ -112,12 +125,14 @@ test('primary succeeds; send & receive routed to it',
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true);
|
|
|
| - ok(!onProgressCallback.called);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true);
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.PRIMARY_SUCCEEDED);
|
| equal(strategy.getJid(), 'primary-jid');
|
|
|
| + strategy.sendConnectionSetupResults(logToServer);
|
| + logToServer.assertProgress(
|
| + remoting.SignalStrategy.Type.XMPP,
|
| + remoting.FallbackSignalStrategy.Progress.SUCCEEDED);
|
| +
|
| ok(!onIncomingStanzaCallback.called);
|
| primary.onIncomingStanzaCallback('test-receive-primary');
|
| secondary.onIncomingStanzaCallback('test-receive-secondary');
|
| @@ -149,12 +164,9 @@ test('primary fails; secondary succeeds; send & receive routed to it',
|
| true);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true);
|
|
|
| - ok(!onProgressCallback.called);
|
| ok(!secondary.connect.called);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false);
|
| ok(secondary.connect.calledWith('server', 'username', 'authToken'));
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.PRIMARY_FAILED);
|
|
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED,
|
| false);
|
| @@ -162,12 +174,16 @@ test('primary fails; secondary succeeds; send & receive routed to it',
|
| false);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true);
|
|
|
| - ok(!onProgressCallback.called);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true);
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.SECONDARY_SUCCEEDED);
|
| equal(strategy.getJid(), 'secondary-jid');
|
|
|
| + strategy.sendConnectionSetupResults(logToServer);
|
| + logToServer.assertProgress(
|
| + remoting.SignalStrategy.Type.XMPP,
|
| + remoting.FallbackSignalStrategy.Progress.FAILED,
|
| + remoting.SignalStrategy.Type.WCS,
|
| + remoting.FallbackSignalStrategy.Progress.SUCCEEDED);
|
| +
|
| ok(!onIncomingStanzaCallback.called);
|
| primary.onIncomingStanzaCallback('test-receive-primary');
|
| secondary.onIncomingStanzaCallback('test-receive-secondary');
|
| @@ -191,19 +207,14 @@ test('primary fails; secondary fails',
|
|
|
| primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED,
|
| true);
|
| - ok(!onProgressCallback.called);
|
| ok(!secondary.connect.called);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false);
|
| ok(secondary.connect.calledWith('server', 'username', 'authToken'));
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.PRIMARY_FAILED);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED,
|
| false);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, false);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.FAILED, true);
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.SECONDARY_FAILED);
|
| }
|
| );
|
|
|
| @@ -219,23 +230,26 @@ test('primary times out; secondary succeeds',
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true);
|
| this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_ - 1);
|
| ok(!secondary.connect.called);
|
| - ok(!onProgressCallback.called);
|
| this.clock.tick(1);
|
| ok(secondary.connect.calledWith('server', 'username', 'authToken'));
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.PRIMARY_TIMED_OUT);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED,
|
| false);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING,
|
| false);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true);
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.SECONDARY_SUCCEEDED);
|
| + strategy.sendConnectionSetupResults(logToServer);
|
| +
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.CLOSED, true);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false);
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.PRIMARY_FAILED_LATE);
|
| +
|
| + logToServer.assertProgress(
|
| + remoting.SignalStrategy.Type.XMPP,
|
| + remoting.FallbackSignalStrategy.Progress.TIMED_OUT,
|
| + remoting.SignalStrategy.Type.WCS,
|
| + remoting.FallbackSignalStrategy.Progress.SUCCEEDED,
|
| + remoting.SignalStrategy.Type.XMPP,
|
| + remoting.FallbackSignalStrategy.Progress.FAILED_LATE);
|
| }
|
| );
|
|
|
| @@ -251,18 +265,13 @@ test('primary times out; secondary fails',
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true);
|
| this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_ - 1);
|
| ok(!secondary.connect.called);
|
| - ok(!onProgressCallback.called);
|
| this.clock.tick(1);
|
| ok(secondary.connect.calledWith('server', 'username', 'authToken'));
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.PRIMARY_TIMED_OUT);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED,
|
| false);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING,
|
| false);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.FAILED, true);
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.SECONDARY_FAILED);
|
| }
|
| );
|
|
|
| @@ -278,20 +287,24 @@ test('primary times out; secondary succeeds; primary succeeds late',
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true);
|
| this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_);
|
| ok(secondary.connect.calledWith('server', 'username', 'authToken'));
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.PRIMARY_TIMED_OUT);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED,
|
| false);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING,
|
| false);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true);
|
| secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true);
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.SECONDARY_SUCCEEDED);
|
| + strategy.sendConnectionSetupResults(logToServer);
|
| +
|
| primary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, false);
|
| primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, false);
|
| - this.assertProgress(
|
| - remoting.FallbackSignalStrategy.Progress.PRIMARY_SUCCEEDED_LATE);
|
| +
|
| + logToServer.assertProgress(
|
| + remoting.SignalStrategy.Type.XMPP,
|
| + remoting.FallbackSignalStrategy.Progress.TIMED_OUT,
|
| + remoting.SignalStrategy.Type.WCS,
|
| + remoting.FallbackSignalStrategy.Progress.SUCCEEDED,
|
| + remoting.SignalStrategy.Type.XMPP,
|
| + remoting.FallbackSignalStrategy.Progress.SUCCEEDED_LATE);
|
| }
|
| );
|
|
|
|
|