Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Side by Side Diff: remoting/webapp/unittests/fallback_signal_strategy_unittest.js

Issue 984203003: Move mocks and unittest JS files to sit alongside production code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 /**
6 * @fileoverview
7 * TODO(garykac): Create interfaces for LogToServer and SignalStrategy.
8 * @suppress {checkTypes|checkVars|reportUnknownTypes|visibility}
9 */
10
11 (function() {
12
13 'use strict';
14
15 /** @constructor */
16 var MockLogToServer = function() {
17 /** @type {(sinon.Spy|Function)} */
18 this.logSignalStrategyProgress = sinon.spy();
19 };
20
21 /** @type {function(...)} */
22 MockLogToServer.prototype.assertProgress = function() {
23 equal(this.logSignalStrategyProgress.callCount * 2, arguments.length);
24 for (var i = 0; i < this.logSignalStrategyProgress.callCount; ++i) {
25 equal(this.logSignalStrategyProgress.getCall(i).args[0], arguments[2 * i]);
26 equal(this.logSignalStrategyProgress.getCall(i).args[1],
27 arguments[2 * i + 1]);
28 }
29 };
30
31 /** @type {(sinon.Spy|function(remoting.SignalStrategy.State))} */
32 var onStateChange = null;
33
34 /** @type {(sinon.Spy|function(Element):void)} */
35 var onIncomingStanzaCallback = null;
36
37 /** @type {remoting.FallbackSignalStrategy} */
38 var strategy = null;
39
40 /** @type {remoting.SignalStrategy} */
41 var primary = null;
42
43 /** @type {remoting.SignalStrategy} */
44 var secondary = null;
45
46 /** @type {MockLogToServer} */
47 var logToServer = null;
48
49 /**
50 * @param {remoting.MockSignalStrategy} baseSignalStrategy
51 * @param {remoting.SignalStrategy.State} state
52 * @param {boolean} expectCallback
53 */
54 function setState(baseSignalStrategy, state, expectCallback) {
55 onStateChange.reset();
56 baseSignalStrategy.setStateForTesting(state);
57
58 if (expectCallback) {
59 equal(onStateChange.callCount, 1);
60 ok(onStateChange.calledWith(state));
61 equal(strategy.getState(), state);
62 } else {
63 ok(!onStateChange.called);
64 }
65 };
66
67 module('fallback_signal_strategy', {
68 setup: function() {
69 onStateChange = sinon.spy();
70 onIncomingStanzaCallback = sinon.spy();
71 strategy = new remoting.FallbackSignalStrategy(
72 new remoting.MockSignalStrategy('primary-jid',
73 remoting.SignalStrategy.Type.XMPP),
74 new remoting.MockSignalStrategy('secondary-jid',
75 remoting.SignalStrategy.Type.WCS));
76 strategy.setStateChangedCallback(onStateChange);
77 strategy.setIncomingStanzaCallback(onIncomingStanzaCallback);
78 primary = strategy.primary_;
79 secondary = strategy.secondary_;
80 logToServer = new MockLogToServer();
81 },
82 teardown: function() {
83 onStateChange = null;
84 onIncomingStanzaCallback = null;
85 strategy = null;
86 primary = null;
87 secondary = null;
88 logToServer = null;
89 },
90 });
91
92 test('primary succeeds; send & receive routed to it',
93 function() {
94 ok(!onStateChange.called);
95 ok(!primary.connect.called);
96 strategy.connect('server', 'username', 'authToken');
97 ok(primary.connect.calledWith('server', 'username', 'authToken'));
98
99 setState(primary, remoting.SignalStrategy.State.NOT_CONNECTED, true);
100 setState(primary, remoting.SignalStrategy.State.CONNECTING, true);
101 setState(primary, remoting.SignalStrategy.State.HANDSHAKE, true);
102
103 setState(primary, remoting.SignalStrategy.State.CONNECTED, true);
104 equal(strategy.getJid(), 'primary-jid');
105
106 strategy.sendConnectionSetupResults(logToServer);
107 logToServer.assertProgress(
108 remoting.SignalStrategy.Type.XMPP,
109 remoting.FallbackSignalStrategy.Progress.SUCCEEDED);
110
111 ok(!onIncomingStanzaCallback.called);
112 primary.onIncomingStanzaCallback_('test-receive-primary');
113 secondary.onIncomingStanzaCallback_('test-receive-secondary');
114 ok(onIncomingStanzaCallback.calledOnce);
115 ok(onIncomingStanzaCallback.calledWith('test-receive-primary'));
116
117 ok(!primary.sendMessage.called);
118 strategy.sendMessage('test-send');
119 ok(primary.sendMessage.calledOnce);
120 ok(primary.sendMessage.calledWith('test-send'));
121
122 ok(!primary.dispose.called);
123 ok(!secondary.dispose.called);
124 setState(primary, remoting.SignalStrategy.State.CLOSED, true);
125 strategy.dispose();
126 ok(primary.dispose.calledOnce);
127 ok(secondary.dispose.calledOnce);
128 }
129 );
130
131 test('primary fails; secondary succeeds; send & receive routed to it',
132 function() {
133 ok(!onStateChange.called);
134 ok(!primary.connect.called);
135 strategy.connect('server', 'username', 'authToken');
136 ok(primary.connect.calledWith('server', 'username', 'authToken'));
137
138 setState(primary, remoting.SignalStrategy.State.NOT_CONNECTED,
139 true);
140 setState(primary, remoting.SignalStrategy.State.CONNECTING, true);
141
142 ok(!secondary.connect.called);
143 setState(primary, remoting.SignalStrategy.State.FAILED, false);
144 ok(secondary.connect.calledWith('server', 'username', 'authToken'));
145
146 setState(secondary, remoting.SignalStrategy.State.NOT_CONNECTED, false);
147 setState(secondary, remoting.SignalStrategy.State.CONNECTING, false);
148 setState(secondary, remoting.SignalStrategy.State.HANDSHAKE, true);
149
150 setState(secondary, remoting.SignalStrategy.State.CONNECTED, true);
151 equal(strategy.getJid(), 'secondary-jid');
152
153 strategy.sendConnectionSetupResults(logToServer);
154 logToServer.assertProgress(
155 remoting.SignalStrategy.Type.XMPP,
156 remoting.FallbackSignalStrategy.Progress.FAILED,
157 remoting.SignalStrategy.Type.WCS,
158 remoting.FallbackSignalStrategy.Progress.SUCCEEDED);
159
160 ok(!onIncomingStanzaCallback.called);
161 primary.onIncomingStanzaCallback_('test-receive-primary');
162 secondary.onIncomingStanzaCallback_('test-receive-secondary');
163 ok(onIncomingStanzaCallback.calledOnce);
164 ok(onIncomingStanzaCallback.calledWith('test-receive-secondary'));
165
166 ok(!secondary.sendMessage.called);
167 strategy.sendMessage('test-send');
168 ok(!primary.sendMessage.called);
169 ok(secondary.sendMessage.calledOnce);
170 ok(secondary.sendMessage.calledWith('test-send'));
171 }
172 );
173
174 test('primary fails; secondary fails',
175 function() {
176 ok(!onStateChange.called);
177 ok(!primary.connect.called);
178 strategy.connect('server', 'username', 'authToken');
179 ok(primary.connect.calledWith('server', 'username', 'authToken'));
180
181 setState(primary, remoting.SignalStrategy.State.NOT_CONNECTED, true);
182 ok(!secondary.connect.called);
183 setState(primary, remoting.SignalStrategy.State.CONNECTING, true);
184 setState(primary, remoting.SignalStrategy.State.FAILED, false);
185 ok(secondary.connect.calledWith('server', 'username', 'authToken'));
186 setState(secondary, remoting.SignalStrategy.State.NOT_CONNECTED, false);
187 setState(primary, remoting.SignalStrategy.State.CONNECTING, false);
188 setState(secondary, remoting.SignalStrategy.State.FAILED, true);
189 }
190 );
191
192 test('primary times out; secondary succeeds',
193 function() {
194 ok(!onStateChange.called);
195 ok(!primary.connect.called);
196 strategy.connect('server', 'username', 'authToken');
197 ok(primary.connect.calledWith('server', 'username', 'authToken'));
198
199 setState(primary, remoting.SignalStrategy.State.NOT_CONNECTED,
200 true);
201 setState(primary, remoting.SignalStrategy.State.CONNECTING, true);
202 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_ - 1);
203 ok(!secondary.connect.called);
204 this.clock.tick(1);
205 ok(secondary.connect.calledWith('server', 'username', 'authToken'));
206 setState(secondary, remoting.SignalStrategy.State.NOT_CONNECTED, false);
207 setState(secondary, remoting.SignalStrategy.State.CONNECTING, false);
208 setState(secondary, remoting.SignalStrategy.State.HANDSHAKE, true);
209 setState(secondary, remoting.SignalStrategy.State.CONNECTED, true);
210 strategy.sendConnectionSetupResults(logToServer);
211
212 setState(secondary, remoting.SignalStrategy.State.CLOSED, true);
213 setState(primary, remoting.SignalStrategy.State.FAILED, false);
214
215 logToServer.assertProgress(
216 remoting.SignalStrategy.Type.XMPP,
217 remoting.FallbackSignalStrategy.Progress.TIMED_OUT,
218 remoting.SignalStrategy.Type.WCS,
219 remoting.FallbackSignalStrategy.Progress.SUCCEEDED,
220 remoting.SignalStrategy.Type.XMPP,
221 remoting.FallbackSignalStrategy.Progress.FAILED_LATE);
222 }
223 );
224
225 test('primary times out; secondary fails',
226 function() {
227 ok(!onStateChange.called);
228 ok(!primary.connect.called);
229 strategy.connect('server', 'username', 'authToken');
230 ok(primary.connect.calledWith('server', 'username', 'authToken'));
231
232 setState(primary, remoting.SignalStrategy.State.NOT_CONNECTED,
233 true);
234 setState(primary, remoting.SignalStrategy.State.CONNECTING, true);
235 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_ - 1);
236 ok(!secondary.connect.called);
237 this.clock.tick(1);
238 ok(secondary.connect.calledWith('server', 'username', 'authToken'));
239 setState(secondary, remoting.SignalStrategy.State.NOT_CONNECTED, false);
240 setState(secondary, remoting.SignalStrategy.State.CONNECTING, false);
241 setState(secondary, remoting.SignalStrategy.State.FAILED, true);
242 }
243 );
244
245 test('primary times out; secondary succeeds; primary succeeds late',
246 function() {
247 ok(!onStateChange.called);
248 ok(!primary.connect.called);
249 strategy.connect('server', 'username', 'authToken');
250 ok(primary.connect.calledWith('server', 'username', 'authToken'));
251
252 setState(primary, remoting.SignalStrategy.State.NOT_CONNECTED,
253 true);
254 setState(primary, remoting.SignalStrategy.State.CONNECTING, true);
255 this.clock.tick(strategy.PRIMARY_CONNECT_TIMEOUT_MS_);
256 ok(secondary.connect.calledWith('server', 'username', 'authToken'));
257 setState(secondary, remoting.SignalStrategy.State.NOT_CONNECTED, false);
258 setState(secondary, remoting.SignalStrategy.State.CONNECTING, false);
259 setState(secondary, remoting.SignalStrategy.State.HANDSHAKE, true);
260 setState(secondary, remoting.SignalStrategy.State.CONNECTED, true);
261 strategy.sendConnectionSetupResults(logToServer);
262
263 setState(primary, remoting.SignalStrategy.State.HANDSHAKE, false);
264 setState(primary, remoting.SignalStrategy.State.CONNECTED, false);
265
266 logToServer.assertProgress(
267 remoting.SignalStrategy.Type.XMPP,
268 remoting.FallbackSignalStrategy.Progress.TIMED_OUT,
269 remoting.SignalStrategy.Type.WCS,
270 remoting.FallbackSignalStrategy.Progress.SUCCEEDED,
271 remoting.SignalStrategy.Type.XMPP,
272 remoting.FallbackSignalStrategy.Progress.SUCCEEDED_LATE);
273 }
274 );
275
276 })();
OLDNEW
« no previous file with comments | « remoting/webapp/unittests/event_hook_unittest.js ('k') | remoting/webapp/unittests/host_table_entry_unittest.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698