11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci(function() { 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci'use strict'; 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar testUsername = 'testUsername@gmail.com'; 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar testToken = 'testToken'; 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar socketId = 3; 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar onStateChange = null; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar onStanzaStr = null; 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivar connection = null; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccimodule('XmppConnection', { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci setup: function() { 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci onStateChange = sinon.spy(); 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci onStanzaStr = sinon.spy(); 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function onStanza(stanza) { 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci onStanzaStr(new XMLSerializer().serializeToString(stanza)); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.stub(chrome.socket, 'create'); 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.stub(chrome.socket, 'connect'); 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.stub(chrome.socket, 'write'); 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.stub(chrome.socket, 'read'); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.stub(chrome.socket, 'destroy'); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.stub(chrome.socket, 'secure'); 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connection = new remoting.XmppConnection(onStateChange); 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connection.setIncomingStanzaCallback(onStanza); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci teardown: function() { 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.create.restore(); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.connect.restore(); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.write.restore(); 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.read.restore(); 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.destroy.restore(); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.secure.restore(); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}); 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitest('should go to FAILED state when failed to connect', function() { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connection.connect( 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'xmpp.example.com:123', 'testUsername@gmail.com', 'testToken'); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith(onStateChange, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci remoting.SignalStrategy.State.CONNECTING); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith(chrome.socket.create, "tcp", {}); 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.create.getCall(0).args[2]({socketId: socketId}); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith( 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.connect, socketId, "xmpp.example.com", 123); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.connect.getCall(0).args[3](-1); 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci QUnit.equal(connection.getError(), remoting.Error.NETWORK_FAILURE); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitest('should use XmppLoginHandler to complete handshake and read data', 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function() { 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connection.connect( 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'xmpp.example.com:123', 'testUsername@gmail.com', 'testToken'); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith(onStateChange, 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci remoting.SignalStrategy.State.CONNECTING); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith(chrome.socket.create, "tcp", {}); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.create.getCall(0).args[2]({socketId: socketId}); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith( 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.connect, socketId, "xmpp.example.com", 123); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.connect.getCall(0).args[3](0); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith(onStateChange, 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci remoting.SignalStrategy.State.HANDSHAKE); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var parser = new remoting.XmppStreamParser(); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var parserMock = sinon.mock(parser); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var setCallbacksCalled = parserMock.expects('setCallbacks').once(); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connection.loginHandler_.onHandshakeDoneCallback_('test@example.com/123123', 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parser); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith(onStateChange, 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci remoting.SignalStrategy.State.CONNECTED); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci setCallbacksCalled.verify(); 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Simulate read() callback with |data|. It should be passed to the parser. 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var data = base.encodeUtf8('<iq id="1">hello</iq>'); 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sinon.assert.calledWith(chrome.socket.read, socketId); 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var appendDataCalled = parserMock.expects('appendData').once().withArgs(data); 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.socket.read.getCall(0).args[1]({resultCode: 0, data: data}); 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci appendDataCalled.verify(); 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci})(); 95