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