| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 (function() { | 5 (function() { |
| 6 | 6 |
| 7 'use strict'; | 7 'use strict'; |
| 8 | 8 |
| 9 var ControllableSignalStrategy = function(jid) { | 9 var ControllableSignalStrategy = function(jid, type, stateChangeCallback) { |
| 10 this.jid = jid; | 10 this.jid = jid; |
| 11 this.onStateChangedCallback = function() {}; | 11 this.type = type; |
| 12 this.state = null; | 12 this.stateChangeCallback_ = stateChangeCallback; |
| 13 this.state_ = null; |
| 13 this.onIncomingStanzaCallback = function() {}; | 14 this.onIncomingStanzaCallback = function() {}; |
| 14 this.dispose = sinon.spy(); | 15 this.dispose = sinon.spy(); |
| 15 this.connect = sinon.spy(); | 16 this.connect = sinon.spy(); |
| 16 this.sendMessage = sinon.spy(); | 17 this.sendMessage = sinon.spy(); |
| 18 this.sendConnectionSetupResults = sinon.spy(); |
| 17 }; | 19 }; |
| 18 | 20 |
| 19 ControllableSignalStrategy.prototype.setStateChangedCallback = function( | 21 ControllableSignalStrategy.prototype.setStateChangedCallback = function( |
| 20 onStateChangedCallback) { | 22 onStateChangedCallback) { |
| 21 this.onStateChangedCallback = | 23 this.onStateChangedCallback = |
| 22 onStateChangedCallback ? onStateChangedCallback : function() {}; | 24 onStateChangedCallback ? onStateChangedCallback : function() {}; |
| 23 }; | 25 }; |
| 24 | 26 |
| 25 ControllableSignalStrategy.prototype.setIncomingStanzaCallback = | 27 ControllableSignalStrategy.prototype.setIncomingStanzaCallback = |
| 26 function(onIncomingStanzaCallback) { | 28 function(onIncomingStanzaCallback) { |
| 27 this.onIncomingStanzaCallback = | 29 this.onIncomingStanzaCallback = |
| 28 onIncomingStanzaCallback ? onIncomingStanzaCallback | 30 onIncomingStanzaCallback ? onIncomingStanzaCallback |
| 29 : function() {}; | 31 : function() {}; |
| 30 }; | 32 }; |
| 31 | 33 |
| 32 ControllableSignalStrategy.prototype.getState = function(message) { | 34 ControllableSignalStrategy.prototype.getState = function(message) { |
| 33 return this.state; | 35 return this.state; |
| 34 }; | 36 }; |
| 35 | 37 |
| 36 ControllableSignalStrategy.prototype.getError = function(message) { | 38 ControllableSignalStrategy.prototype.getError = function(message) { |
| 37 return remoting.Error.UNKNOWN; | 39 return remoting.Error.UNKNOWN; |
| 38 }; | 40 }; |
| 39 | 41 |
| 40 ControllableSignalStrategy.prototype.getJid = function(message) { | 42 ControllableSignalStrategy.prototype.getJid = function(message) { |
| 41 return this.jid; | 43 return this.jid; |
| 42 }; | 44 }; |
| 43 | 45 |
| 46 ControllableSignalStrategy.prototype.getType = function(message) { |
| 47 return this.type; |
| 48 }; |
| 49 |
| 44 ControllableSignalStrategy.prototype.setExternalCallbackForTesting = | 50 ControllableSignalStrategy.prototype.setExternalCallbackForTesting = |
| 45 function(externalCallback) { | 51 function(externalCallback) { |
| 46 this.externalCallback_ = externalCallback; | 52 this.externalCallback_ = externalCallback; |
| 47 }; | 53 }; |
| 48 | 54 |
| 49 ControllableSignalStrategy.prototype.setStateForTesting = | 55 ControllableSignalStrategy.prototype.setStateForTesting = |
| 50 function(state, expectExternalCallback) { | 56 function(state, expectExternalCallback) { |
| 51 this.state = state; | 57 this.state = state; |
| 52 this.externalCallback_.reset(); | 58 this.externalCallback_.reset(); |
| 53 this.onStateChangedCallback(state); | 59 this.onStateChangedCallback(state); |
| 54 if (expectExternalCallback) { | 60 if (expectExternalCallback) { |
| 55 equal(this.externalCallback_.callCount, 1); | 61 equal(this.externalCallback_.callCount, 1); |
| 56 ok(this.externalCallback_.calledWith(state)); | 62 ok(this.externalCallback_.calledWith(state)); |
| 57 equal(strategy.getState(), state); | 63 equal(strategy.getState(), state); |
| 58 } else { | 64 } else { |
| 59 ok(!this.externalCallback_.called); | 65 ok(!this.externalCallback_.called); |
| 60 } | 66 } |
| 61 }; | 67 }; |
| 62 | 68 |
| 69 var MockLogToServer = function() { |
| 70 this.logSignalStrategyProgress = sinon.spy(); |
| 71 }; |
| 72 |
| 73 MockLogToServer.prototype.assertProgress = function() { |
| 74 equal(this.logSignalStrategyProgress.callCount * 2, arguments.length); |
| 75 for (var i = 0; i < this.logSignalStrategyProgress.callCount; ++i) { |
| 76 equal(this.logSignalStrategyProgress.getCall(i).args[0], arguments[2 * i]); |
| 77 equal(this.logSignalStrategyProgress.getCall(i).args[1], |
| 78 arguments[2 * i + 1]); |
| 79 } |
| 80 }; |
| 81 |
| 63 var onStateChange = null; | 82 var onStateChange = null; |
| 64 var onProgressCallback = null; | |
| 65 var onIncomingStanzaCallback = null; | 83 var onIncomingStanzaCallback = null; |
| 66 var strategy = null; | 84 var strategy = null; |
| 67 var primary = null; | 85 var primary = null; |
| 68 var secondary = null; | 86 var secondary = null; |
| 87 var logToServer = null; |
| 69 | 88 |
| 70 module('fallback_signal_strategy', { | 89 module('fallback_signal_strategy', { |
| 71 setup: function() { | 90 setup: function() { |
| 72 onStateChange = sinon.spy(); | 91 onStateChange = sinon.spy(); |
| 73 onProgressCallback = sinon.spy(); | |
| 74 onIncomingStanzaCallback = sinon.spy(); | 92 onIncomingStanzaCallback = sinon.spy(); |
| 75 strategy = new remoting.FallbackSignalStrategy( | 93 strategy = new remoting.FallbackSignalStrategy( |
| 76 new ControllableSignalStrategy('primary-jid'), | 94 new ControllableSignalStrategy('primary-jid', |
| 77 new ControllableSignalStrategy('secondary-jid'), | 95 remoting.SignalStrategy.Type.XMPP), |
| 78 onProgressCallback); | 96 new ControllableSignalStrategy('secondary-jid', |
| 97 remoting.SignalStrategy.Type.WCS)); |
| 79 strategy.setStateChangedCallback(onStateChange); | 98 strategy.setStateChangedCallback(onStateChange); |
| 80 strategy.setIncomingStanzaCallback(onIncomingStanzaCallback); | 99 strategy.setIncomingStanzaCallback(onIncomingStanzaCallback); |
| 81 primary = strategy.primary_; | 100 primary = strategy.primary_; |
| 82 secondary = strategy.secondary_; | 101 secondary = strategy.secondary_; |
| 102 logToServer = new MockLogToServer(); |
| 83 primary.setExternalCallbackForTesting(onStateChange); | 103 primary.setExternalCallbackForTesting(onStateChange); |
| 84 secondary.setExternalCallbackForTesting(onStateChange); | 104 secondary.setExternalCallbackForTesting(onStateChange); |
| 85 }, | 105 }, |
| 86 teardown: function() { | 106 teardown: function() { |
| 87 onStateChange = null; | 107 onStateChange = null; |
| 88 onProgressCallback = null; | |
| 89 onIncomingStanzaCallback = null; | 108 onIncomingStanzaCallback = null; |
| 90 strategy = null; | 109 strategy = null; |
| 91 primary = null; | 110 primary = null; |
| 92 secondary = null; | 111 secondary = null; |
| 112 logToServer = null; |
| 93 }, | 113 }, |
| 94 // Assert that the progress callback has been called exactly once | |
| 95 // since the last call, and with the specified state. | |
| 96 assertProgress: function(state) { | |
| 97 ok(onProgressCallback.calledOnce); | |
| 98 ok(onProgressCallback.calledWith(state)); | |
| 99 onProgressCallback.reset(); | |
| 100 } | |
| 101 }); | 114 }); |
| 102 | 115 |
| 103 test('primary succeeds; send & receive routed to it', | 116 test('primary succeeds; send & receive routed to it', |
| 104 function() { | 117 function() { |
| 105 ok(!onStateChange.called); | 118 ok(!onStateChange.called); |
| 106 ok(!primary.connect.called); | 119 ok(!primary.connect.called); |
| 107 strategy.connect('server', 'username', 'authToken'); | 120 strategy.connect('server', 'username', 'authToken'); |
| 108 ok(primary.connect.calledWith('server', 'username', 'authToken')); | 121 ok(primary.connect.calledWith('server', 'username', 'authToken')); |
| 109 | 122 |
| 110 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 123 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 111 true); | 124 true); |
| 112 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); | 125 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); |
| 113 primary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true); | 126 primary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true); |
| 114 | 127 |
| 115 ok(!onProgressCallback.called); | |
| 116 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true); | 128 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true); |
| 117 this.assertProgress( | |
| 118 remoting.FallbackSignalStrategy.Progress.PRIMARY_SUCCEEDED); | |
| 119 equal(strategy.getJid(), 'primary-jid'); | 129 equal(strategy.getJid(), 'primary-jid'); |
| 120 | 130 |
| 131 strategy.sendConnectionSetupResults(logToServer); |
| 132 logToServer.assertProgress( |
| 133 remoting.SignalStrategy.Type.XMPP, |
| 134 remoting.FallbackSignalStrategy.Progress.SUCCEEDED); |
| 135 |
| 121 ok(!onIncomingStanzaCallback.called); | 136 ok(!onIncomingStanzaCallback.called); |
| 122 primary.onIncomingStanzaCallback('test-receive-primary'); | 137 primary.onIncomingStanzaCallback('test-receive-primary'); |
| 123 secondary.onIncomingStanzaCallback('test-receive-secondary'); | 138 secondary.onIncomingStanzaCallback('test-receive-secondary'); |
| 124 ok(onIncomingStanzaCallback.calledOnce); | 139 ok(onIncomingStanzaCallback.calledOnce); |
| 125 ok(onIncomingStanzaCallback.calledWith('test-receive-primary')); | 140 ok(onIncomingStanzaCallback.calledWith('test-receive-primary')); |
| 126 | 141 |
| 127 ok(!primary.sendMessage.called); | 142 ok(!primary.sendMessage.called); |
| 128 strategy.sendMessage('test-send'); | 143 strategy.sendMessage('test-send'); |
| 129 ok(primary.sendMessage.calledOnce); | 144 ok(primary.sendMessage.calledOnce); |
| 130 ok(primary.sendMessage.calledWith('test-send')); | 145 ok(primary.sendMessage.calledWith('test-send')); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 142 function() { | 157 function() { |
| 143 ok(!onStateChange.called); | 158 ok(!onStateChange.called); |
| 144 ok(!primary.connect.called); | 159 ok(!primary.connect.called); |
| 145 strategy.connect('server', 'username', 'authToken'); | 160 strategy.connect('server', 'username', 'authToken'); |
| 146 ok(primary.connect.calledWith('server', 'username', 'authToken')); | 161 ok(primary.connect.calledWith('server', 'username', 'authToken')); |
| 147 | 162 |
| 148 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 163 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 149 true); | 164 true); |
| 150 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); | 165 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); |
| 151 | 166 |
| 152 ok(!onProgressCallback.called); | |
| 153 ok(!secondary.connect.called); | 167 ok(!secondary.connect.called); |
| 154 primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false); | 168 primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false); |
| 155 ok(secondary.connect.calledWith('server', 'username', 'authToken')); | 169 ok(secondary.connect.calledWith('server', 'username', 'authToken')); |
| 156 this.assertProgress( | |
| 157 remoting.FallbackSignalStrategy.Progress.PRIMARY_FAILED); | |
| 158 | 170 |
| 159 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 171 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 160 false); | 172 false); |
| 161 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, | 173 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, |
| 162 false); | 174 false); |
| 163 secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true); | 175 secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true); |
| 164 | 176 |
| 165 ok(!onProgressCallback.called); | |
| 166 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true); | 177 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true); |
| 167 this.assertProgress( | |
| 168 remoting.FallbackSignalStrategy.Progress.SECONDARY_SUCCEEDED); | |
| 169 equal(strategy.getJid(), 'secondary-jid'); | 178 equal(strategy.getJid(), 'secondary-jid'); |
| 170 | 179 |
| 180 strategy.sendConnectionSetupResults(logToServer); |
| 181 logToServer.assertProgress( |
| 182 remoting.SignalStrategy.Type.XMPP, |
| 183 remoting.FallbackSignalStrategy.Progress.FAILED, |
| 184 remoting.SignalStrategy.Type.WCS, |
| 185 remoting.FallbackSignalStrategy.Progress.SUCCEEDED); |
| 186 |
| 171 ok(!onIncomingStanzaCallback.called); | 187 ok(!onIncomingStanzaCallback.called); |
| 172 primary.onIncomingStanzaCallback('test-receive-primary'); | 188 primary.onIncomingStanzaCallback('test-receive-primary'); |
| 173 secondary.onIncomingStanzaCallback('test-receive-secondary'); | 189 secondary.onIncomingStanzaCallback('test-receive-secondary'); |
| 174 ok(onIncomingStanzaCallback.calledOnce); | 190 ok(onIncomingStanzaCallback.calledOnce); |
| 175 ok(onIncomingStanzaCallback.calledWith('test-receive-secondary')); | 191 ok(onIncomingStanzaCallback.calledWith('test-receive-secondary')); |
| 176 | 192 |
| 177 ok(!secondary.sendMessage.called); | 193 ok(!secondary.sendMessage.called); |
| 178 strategy.sendMessage('test-send'); | 194 strategy.sendMessage('test-send'); |
| 179 ok(!primary.sendMessage.called); | 195 ok(!primary.sendMessage.called); |
| 180 ok(secondary.sendMessage.calledOnce); | 196 ok(secondary.sendMessage.calledOnce); |
| 181 ok(secondary.sendMessage.calledWith('test-send')); | 197 ok(secondary.sendMessage.calledWith('test-send')); |
| 182 } | 198 } |
| 183 ); | 199 ); |
| 184 | 200 |
| 185 test('primary fails; secondary fails', | 201 test('primary fails; secondary fails', |
| 186 function() { | 202 function() { |
| 187 ok(!onStateChange.called); | 203 ok(!onStateChange.called); |
| 188 ok(!primary.connect.called); | 204 ok(!primary.connect.called); |
| 189 strategy.connect('server', 'username', 'authToken'); | 205 strategy.connect('server', 'username', 'authToken'); |
| 190 ok(primary.connect.calledWith('server', 'username', 'authToken')); | 206 ok(primary.connect.calledWith('server', 'username', 'authToken')); |
| 191 | 207 |
| 192 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 208 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 193 true); | 209 true); |
| 194 ok(!onProgressCallback.called); | |
| 195 ok(!secondary.connect.called); | 210 ok(!secondary.connect.called); |
| 196 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); | 211 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); |
| 197 primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false); | 212 primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false); |
| 198 ok(secondary.connect.calledWith('server', 'username', 'authToken')); | 213 ok(secondary.connect.calledWith('server', 'username', 'authToken')); |
| 199 this.assertProgress( | |
| 200 remoting.FallbackSignalStrategy.Progress.PRIMARY_FAILED); | |
| 201 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 214 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 202 false); | 215 false); |
| 203 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, false); | 216 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, false); |
| 204 secondary.setStateForTesting(remoting.SignalStrategy.State.FAILED, true); | 217 secondary.setStateForTesting(remoting.SignalStrategy.State.FAILED, true); |
| 205 this.assertProgress( | |
| 206 remoting.FallbackSignalStrategy.Progress.SECONDARY_FAILED); | |
| 207 } | 218 } |
| 208 ); | 219 ); |
| 209 | 220 |
| 210 test('primary times out; secondary succeeds', | 221 test('primary times out; secondary succeeds', |
| 211 function() { | 222 function() { |
| 212 ok(!onStateChange.called); | 223 ok(!onStateChange.called); |
| 213 ok(!primary.connect.called); | 224 ok(!primary.connect.called); |
| 214 strategy.connect('server', 'username', 'authToken'); | 225 strategy.connect('server', 'username', 'authToken'); |
| 215 ok(primary.connect.calledWith('server', 'username', 'authToken')); | 226 ok(primary.connect.calledWith('server', 'username', 'authToken')); |
| 216 | 227 |
| 217 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 228 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 218 true); | 229 true); |
| 219 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); | 230 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); |
| 220 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_ - 1); | 231 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_ - 1); |
| 221 ok(!secondary.connect.called); | 232 ok(!secondary.connect.called); |
| 222 ok(!onProgressCallback.called); | |
| 223 this.clock.tick(1); | 233 this.clock.tick(1); |
| 224 ok(secondary.connect.calledWith('server', 'username', 'authToken')); | 234 ok(secondary.connect.calledWith('server', 'username', 'authToken')); |
| 225 this.assertProgress( | |
| 226 remoting.FallbackSignalStrategy.Progress.PRIMARY_TIMED_OUT); | |
| 227 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 235 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 228 false); | 236 false); |
| 229 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, | 237 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, |
| 230 false); | 238 false); |
| 231 secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true); | 239 secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true); |
| 232 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true); | 240 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true); |
| 233 this.assertProgress( | 241 strategy.sendConnectionSetupResults(logToServer); |
| 234 remoting.FallbackSignalStrategy.Progress.SECONDARY_SUCCEEDED); | 242 |
| 235 secondary.setStateForTesting(remoting.SignalStrategy.State.CLOSED, true); | 243 secondary.setStateForTesting(remoting.SignalStrategy.State.CLOSED, true); |
| 236 primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false); | 244 primary.setStateForTesting(remoting.SignalStrategy.State.FAILED, false); |
| 237 this.assertProgress( | 245 |
| 238 remoting.FallbackSignalStrategy.Progress.PRIMARY_FAILED_LATE); | 246 logToServer.assertProgress( |
| 247 remoting.SignalStrategy.Type.XMPP, |
| 248 remoting.FallbackSignalStrategy.Progress.TIMED_OUT, |
| 249 remoting.SignalStrategy.Type.WCS, |
| 250 remoting.FallbackSignalStrategy.Progress.SUCCEEDED, |
| 251 remoting.SignalStrategy.Type.XMPP, |
| 252 remoting.FallbackSignalStrategy.Progress.FAILED_LATE); |
| 239 } | 253 } |
| 240 ); | 254 ); |
| 241 | 255 |
| 242 test('primary times out; secondary fails', | 256 test('primary times out; secondary fails', |
| 243 function() { | 257 function() { |
| 244 ok(!onStateChange.called); | 258 ok(!onStateChange.called); |
| 245 ok(!primary.connect.called); | 259 ok(!primary.connect.called); |
| 246 strategy.connect('server', 'username', 'authToken'); | 260 strategy.connect('server', 'username', 'authToken'); |
| 247 ok(primary.connect.calledWith('server', 'username', 'authToken')); | 261 ok(primary.connect.calledWith('server', 'username', 'authToken')); |
| 248 | 262 |
| 249 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 263 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 250 true); | 264 true); |
| 251 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); | 265 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); |
| 252 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_ - 1); | 266 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_ - 1); |
| 253 ok(!secondary.connect.called); | 267 ok(!secondary.connect.called); |
| 254 ok(!onProgressCallback.called); | |
| 255 this.clock.tick(1); | 268 this.clock.tick(1); |
| 256 ok(secondary.connect.calledWith('server', 'username', 'authToken')); | 269 ok(secondary.connect.calledWith('server', 'username', 'authToken')); |
| 257 this.assertProgress( | |
| 258 remoting.FallbackSignalStrategy.Progress.PRIMARY_TIMED_OUT); | |
| 259 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 270 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 260 false); | 271 false); |
| 261 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, | 272 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, |
| 262 false); | 273 false); |
| 263 secondary.setStateForTesting(remoting.SignalStrategy.State.FAILED, true); | 274 secondary.setStateForTesting(remoting.SignalStrategy.State.FAILED, true); |
| 264 this.assertProgress( | |
| 265 remoting.FallbackSignalStrategy.Progress.SECONDARY_FAILED); | |
| 266 } | 275 } |
| 267 ); | 276 ); |
| 268 | 277 |
| 269 test('primary times out; secondary succeeds; primary succeeds late', | 278 test('primary times out; secondary succeeds; primary succeeds late', |
| 270 function() { | 279 function() { |
| 271 ok(!onStateChange.called); | 280 ok(!onStateChange.called); |
| 272 ok(!primary.connect.called); | 281 ok(!primary.connect.called); |
| 273 strategy.connect('server', 'username', 'authToken'); | 282 strategy.connect('server', 'username', 'authToken'); |
| 274 ok(primary.connect.calledWith('server', 'username', 'authToken')); | 283 ok(primary.connect.calledWith('server', 'username', 'authToken')); |
| 275 | 284 |
| 276 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 285 primary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 277 true); | 286 true); |
| 278 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); | 287 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, true); |
| 279 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_); | 288 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_); |
| 280 ok(secondary.connect.calledWith('server', 'username', 'authToken')); | 289 ok(secondary.connect.calledWith('server', 'username', 'authToken')); |
| 281 this.assertProgress( | |
| 282 remoting.FallbackSignalStrategy.Progress.PRIMARY_TIMED_OUT); | |
| 283 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, | 290 secondary.setStateForTesting(remoting.SignalStrategy.State.NOT_CONNECTED, |
| 284 false); | 291 false); |
| 285 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, | 292 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTING, |
| 286 false); | 293 false); |
| 287 secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true); | 294 secondary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, true); |
| 288 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true); | 295 secondary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, true); |
| 289 this.assertProgress( | 296 strategy.sendConnectionSetupResults(logToServer); |
| 290 remoting.FallbackSignalStrategy.Progress.SECONDARY_SUCCEEDED); | 297 |
| 291 primary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, false); | 298 primary.setStateForTesting(remoting.SignalStrategy.State.HANDSHAKE, false); |
| 292 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, false); | 299 primary.setStateForTesting(remoting.SignalStrategy.State.CONNECTED, false); |
| 293 this.assertProgress( | 300 |
| 294 remoting.FallbackSignalStrategy.Progress.PRIMARY_SUCCEEDED_LATE); | 301 logToServer.assertProgress( |
| 302 remoting.SignalStrategy.Type.XMPP, |
| 303 remoting.FallbackSignalStrategy.Progress.TIMED_OUT, |
| 304 remoting.SignalStrategy.Type.WCS, |
| 305 remoting.FallbackSignalStrategy.Progress.SUCCEEDED, |
| 306 remoting.SignalStrategy.Type.XMPP, |
| 307 remoting.FallbackSignalStrategy.Progress.SUCCEEDED_LATE); |
| 295 } | 308 } |
| 296 ); | 309 ); |
| 297 | 310 |
| 298 })(); | 311 })(); |
| OLD | NEW |