OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 testUsername = 'testUsername@gmail.com'; | 9 var testUsername = 'testUsername@gmail.com'; |
10 var testToken = 'testToken'; | 10 var testToken = 'testToken'; |
11 var socketId = 3; | 11 var socketId = 3; |
12 | 12 |
13 /** @type {(sinon.Spy|function(remoting.SignalStrategy.State):void)} */ | 13 /** @type {(sinon.Spy|function(remoting.SignalStrategy.State):void)} */ |
14 var onStateChange = function() {}; | 14 var onStateChange = function() {}; |
15 | 15 |
16 var onStanzaStr = null; | 16 var onStanzaStr = null; |
17 | 17 |
18 /** @type {remoting.XmppConnection} */ | 18 /** @type {remoting.XmppConnection} */ |
19 var connection = null; | 19 var connection = null; |
20 | 20 |
21 module('XmppConnection', { | 21 module('XmppConnection', { |
22 setup: function() { | 22 setup: function() { |
23 onStateChange = sinon.spy(); | 23 onStateChange = sinon.spy(); |
24 onStanzaStr = sinon.spy(); | 24 onStanzaStr = sinon.spy(); |
25 /** @param {Element} stanza */ | 25 /** @param {Element} stanza */ |
26 function onStanza(stanza) { | 26 function onStanza(stanza) { |
27 onStanzaStr(new XMLSerializer().serializeToString(stanza)); | 27 onStanzaStr(new XMLSerializer().serializeToString(stanza)); |
28 } | 28 } |
29 | 29 |
30 sinon.$setupStub(chrome.socket, 'create'); | 30 sinon.stub(chrome.socket, 'create'); |
31 sinon.$setupStub(chrome.socket, 'connect'); | 31 sinon.stub(chrome.socket, 'connect'); |
32 sinon.$setupStub(chrome.socket, 'write'); | 32 sinon.stub(chrome.socket, 'write'); |
33 sinon.$setupStub(chrome.socket, 'read'); | 33 sinon.stub(chrome.socket, 'read'); |
34 sinon.$setupStub(chrome.socket, 'destroy'); | 34 sinon.stub(chrome.socket, 'destroy'); |
35 sinon.$setupStub(chrome.socket, 'secure'); | 35 sinon.stub(chrome.socket, 'secure'); |
36 | 36 |
37 connection = new remoting.XmppConnection(); | 37 connection = new remoting.XmppConnection(); |
38 connection.setStateChangedCallback( | 38 connection.setStateChangedCallback( |
39 /** @type {function(remoting.SignalStrategy.State):void} */ | 39 /** @type {function(remoting.SignalStrategy.State):void} */ |
40 (onStateChange)); | 40 (onStateChange)); |
41 connection.setIncomingStanzaCallback(onStanza); | 41 connection.setIncomingStanzaCallback(onStanza); |
42 }, | 42 }, |
43 | 43 |
44 teardown: function() { | 44 teardown: function() { |
45 chrome.socket.create.$testStub.restore(); | 45 $testStub(chrome.socket.create).restore(); |
46 chrome.socket.connect.$testStub.restore(); | 46 $testStub(chrome.socket.connect).restore(); |
47 chrome.socket.write.$testStub.restore(); | 47 $testStub(chrome.socket.write).restore(); |
48 chrome.socket.read.$testStub.restore(); | 48 $testStub(chrome.socket.read).restore(); |
49 chrome.socket.destroy.$testStub.restore(); | 49 $testStub(chrome.socket.destroy).restore(); |
50 chrome.socket.secure.$testStub.restore(); | 50 $testStub(chrome.socket.secure).restore(); |
51 } | 51 } |
52 }); | 52 }); |
53 | 53 |
54 test('should go to FAILED state when failed to connect', function() { | 54 test('should go to FAILED state when failed to connect', function() { |
55 connection.connect( | 55 connection.connect( |
56 'xmpp.example.com:123', 'testUsername@gmail.com', 'testToken'); | 56 'xmpp.example.com:123', 'testUsername@gmail.com', 'testToken'); |
57 sinon.assert.calledWith(onStateChange, | 57 sinon.assert.calledWith(onStateChange, |
58 remoting.SignalStrategy.State.CONNECTING); | 58 remoting.SignalStrategy.State.CONNECTING); |
59 sinon.assert.calledWith(chrome.socket.create, "tcp", {}); | 59 sinon.assert.calledWith(chrome.socket.create, "tcp", {}); |
60 chrome.socket.create.$testStub.getCall(0).args[2]({socketId: socketId}); | 60 $testStub(chrome.socket.create).getCall(0).args[2]({socketId: socketId}); |
61 | 61 |
62 sinon.assert.calledWith( | 62 sinon.assert.calledWith( |
63 chrome.socket.connect, socketId, "xmpp.example.com", 123); | 63 chrome.socket.connect, socketId, "xmpp.example.com", 123); |
64 chrome.socket.connect.$testStub.getCall(0).args[3](-1); | 64 $testStub(chrome.socket.connect).getCall(0).args[3](-1); |
65 | 65 |
66 QUnit.equal(connection.getError().tag, remoting.Error.Tag.NETWORK_FAILURE); | 66 QUnit.equal(connection.getError().tag, remoting.Error.Tag.NETWORK_FAILURE); |
67 }); | 67 }); |
68 | 68 |
69 test('should use XmppLoginHandler to complete handshake and read data', | 69 test('should use XmppLoginHandler to complete handshake and read data', |
70 function() { | 70 function() { |
71 connection.connect( | 71 connection.connect( |
72 'xmpp.example.com:123', 'testUsername@gmail.com', 'testToken'); | 72 'xmpp.example.com:123', 'testUsername@gmail.com', 'testToken'); |
73 sinon.assert.calledWith(onStateChange, | 73 sinon.assert.calledWith(onStateChange, |
74 remoting.SignalStrategy.State.CONNECTING); | 74 remoting.SignalStrategy.State.CONNECTING); |
75 sinon.assert.calledWith(chrome.socket.create, "tcp", {}); | 75 sinon.assert.calledWith(chrome.socket.create, "tcp", {}); |
76 chrome.socket.create.$testStub.getCall(0).args[2]({socketId: socketId}); | 76 $testStub(chrome.socket.create).getCall(0).args[2]({socketId: socketId}); |
77 | 77 |
78 sinon.assert.calledWith( | 78 sinon.assert.calledWith( |
79 chrome.socket.connect, socketId, "xmpp.example.com", 123); | 79 chrome.socket.connect, socketId, "xmpp.example.com", 123); |
80 chrome.socket.connect.$testStub.getCall(0).args[3](0); | 80 $testStub(chrome.socket.connect).getCall(0).args[3](0); |
81 | 81 |
82 sinon.assert.calledWith(onStateChange, | 82 sinon.assert.calledWith(onStateChange, |
83 remoting.SignalStrategy.State.HANDSHAKE); | 83 remoting.SignalStrategy.State.HANDSHAKE); |
84 | 84 |
85 var parser = new remoting.XmppStreamParser(); | 85 var parser = new remoting.XmppStreamParser(); |
86 var parserMock = sinon.mock(parser); | 86 var parserMock = sinon.mock(parser); |
87 var setCallbacksCalled = parserMock.expects('setCallbacks').once(); | 87 var setCallbacksCalled = parserMock.expects('setCallbacks').once(); |
88 var handshakeDoneCallback = | 88 var handshakeDoneCallback = |
89 connection.loginHandler_.getHandshakeDoneCallbackForTesting(); | 89 connection.loginHandler_.getHandshakeDoneCallbackForTesting(); |
90 handshakeDoneCallback('test@example.com/123123', parser); | 90 handshakeDoneCallback('test@example.com/123123', parser); |
91 sinon.assert.calledWith(onStateChange, | 91 sinon.assert.calledWith(onStateChange, |
92 remoting.SignalStrategy.State.CONNECTED); | 92 remoting.SignalStrategy.State.CONNECTED); |
93 setCallbacksCalled.verify(); | 93 setCallbacksCalled.verify(); |
94 | 94 |
95 // Simulate read() callback with |data|. It should be passed to the parser. | 95 // Simulate read() callback with |data|. It should be passed to the parser. |
96 var data = base.encodeUtf8('<iq id="1">hello</iq>'); | 96 var data = base.encodeUtf8('<iq id="1">hello</iq>'); |
97 sinon.assert.calledWith(chrome.socket.read, socketId); | 97 sinon.assert.calledWith(chrome.socket.read, socketId); |
98 var appendDataCalled = parserMock.expects('appendData').once().withArgs(data); | 98 var appendDataCalled = parserMock.expects('appendData').once().withArgs(data); |
99 chrome.socket.read.$testStub.getCall(0).args[1]({resultCode: 0, data: data}); | 99 $testStub(chrome.socket.read).getCall(0).args[1]({resultCode: 0, data: data}); |
100 appendDataCalled.verify(); | 100 appendDataCalled.verify(); |
101 }); | 101 }); |
102 | 102 |
103 })(); | 103 })(); |
OLD | NEW |