103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file. 403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Tests launched by extensions/renderer/api/serial/data_sender_unittest.cc 603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)var test = require('test').binding; 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)var unittestBindings = require('test_environment_specific_bindings'); 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)var BUFFER_SIZE = 11; 1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)var FATAL_ERROR = 2; 1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)function generateData(size, pattern) { 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) if (!pattern) 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) pattern = 'a'; 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) var buffer = new ArrayBuffer(size); 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) var intView = new Int8Array(buffer); 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) for (var i = 0; i < size; i++) { 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) intView[i] = pattern.charCodeAt(i % pattern.length); 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return buffer; 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Returns a promise to a newly created DataSender. 2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)function createSender() { 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return Promise.all([ 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) requireAsync('content/public/renderer/service_provider'), 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) requireAsync('data_sender'), 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) requireAsync('device/serial/data_stream.mojom'), 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]).then(function(modules) { 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) var serviceProvider = modules[0]; 3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) var dataSender = modules[1]; 3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) var dataStream = modules[2]; 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return new dataSender.DataSender( 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) serviceProvider.connectToService(dataStream.DataSinkProxy.NAME_), 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) BUFFER_SIZE, 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) FATAL_ERROR); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Returns a function that sends data to a provided DataSender |sender|, 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// checks that the send completes successfully and returns a promise that will 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// resolve to |sender|. 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction sendAndExpectSuccess(data) { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return function(sender) { 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return sender.send(data).then(function(bytesSent) { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test.assertEq(data.byteLength, bytesSent); 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return sender; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Returns a function that sends data to a provided DataSender |sender|, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// checks that the send fails with the expected error and expected number of 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// bytes sent, and returns a promise that will resolve to |sender|. 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction sendAndExpectError(data, expectedError, expectedBytesSent) { 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return function(sender) { 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return sender.send(data).catch(function(result) { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test.assertEq(expectedError, result.error); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test.assertEq(expectedBytesSent, result.bytesSent); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return sender; 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Returns a function that cancels sends on the provided DataSender |sender| 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// with error |cancelReason|, returning a promise that will resolve to |sender| 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// once the cancel completes. 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction cancelSend(cancelReason) { 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return function(sender) { 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return sender.cancel(cancelReason).then(function() { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return sender; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Checks that attempting to start a send with |sender| fails. 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction sendAfterClose(sender) { 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test.assertThrows(sender.send, sender, [], 'DataSender has been closed'); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Checks that the provided promises resolve in order, returning the result of 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// the first. 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction expectOrder(promises) { 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var nextIndex = 0; 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function createOrderChecker(promise, expectedIndex) { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return promise.then(function(sender) { 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test.assertEq(nextIndex, expectedIndex); 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci nextIndex++; 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return sender; 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var wrappedPromises = []; 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var i = 0; i < promises.length; i++) { 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci wrappedPromises.push(createOrderChecker(promises[i], i)); 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return Promise.all(wrappedPromises).then(function(results) { 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return results[0]; 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Serializes and deserializes the provided DataSender |sender|, returning a 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// promise that will resolve to the newly deserialized DataSender. 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction serializeRoundTrip(sender) { 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return Promise.all([ 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.serialize(), 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci requireAsync('data_sender'), 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]).then(function(promises) { 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var serialized = promises[0]; 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var dataSenderModule = promises[1]; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return dataSenderModule.DataSender.deserialize(serialized); 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction closeSender(sender) { 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.close(); 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return sender; 11803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 11903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 12003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)unittestBindings.exportTests([ 12103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testSend() { 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender(); 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectSuccess(generateData(1))), 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectSuccess(generateData(1))), 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 12903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 13103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testLargeSend() { 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createSender() 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectSuccess(generateData(BUFFER_SIZE * 3, '123'))) 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 13603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 13703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 13803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testSendError() { 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createSender() 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectError(generateData(BUFFER_SIZE * 3, 'b'), 1, 0)) 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectSuccess(generateData(1))) 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 14403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 14503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 14603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testSendErrorPartialSuccess() { 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createSender() 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectError(generateData(BUFFER_SIZE * 3, 'b'), 1, 5)) 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectSuccess(generateData(1))) 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 15203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testSendErrorBetweenPackets() { 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender(); 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(2, 'b'), 1, 2)), 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(2, 'b'), 1, 0)), 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectSuccess(generateData(1))) 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 16303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 16403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 16503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testSendErrorInSecondPacket() { 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender(); 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectSuccess(generateData(2, 'b'))), 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(2, 'b'), 1, 1)), 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectSuccess(generateData(1))) 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 17403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 17503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 17603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testSendErrorInLargeSend() { 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createSender() 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectError( 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci generateData(BUFFER_SIZE * 3, '1234567890'), 1, 12)) 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectSuccess(generateData(1))) 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 18303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 18403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 18503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testSendErrorBeforeLargeSend() { 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender(); 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(5, 'b'), 1, 2)), 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError( 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci generateData(BUFFER_SIZE * 3, '1234567890'), 1, 0)), 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectSuccess(generateData(1))) 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 19603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 19703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testCancelWithoutSend() { 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createSender() 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(cancelSend(3)) 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 20203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 20303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 20403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testCancel() { 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender(); 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(1, 'b'), 3, 0)), 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(cancelSend(3)), 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(function(sender) { 21303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) test.assertThrows( 21403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) sender.cancel, sender, [], 'Cancel already in progress'); 21503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) test.assertThrows(sender.send, sender, [], 'Cancel in progress'); 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 21703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 21803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 21903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) function testClose() { 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender(); 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(1, 'b'), FATAL_ERROR, 0)), 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(cancelSend(3)), 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]); 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAfterClose) 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function testSendAfterSerialization() { 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender().then(serializeRoundTrip); 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectSuccess(generateData(1))), 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectSuccess(generateData(1))), 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function testSendErrorAfterSerialization() { 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createSender() 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(serializeRoundTrip) 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectError(generateData(BUFFER_SIZE * 3, 'b'), 1, 0)) 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAndExpectSuccess(generateData(1))) 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function testCancelAfterSerialization() { 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender().then(serializeRoundTrip); 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(1, 'b'), 4, 0)), 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(cancelSend(4)), 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function testSerializeCancelsSendsInProgress() { 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender(); 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(1, 'b'), FATAL_ERROR, 0)), 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(1, 'b'), FATAL_ERROR, 0)), 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(serializeRoundTrip), 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function testSerializeWaitsForCancel() { 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var sender = createSender(); 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expectOrder([ 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(sendAndExpectError(generateData(1, 'b'), 3, 0)), 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(cancelSend(3)), 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sender.then(serializeRoundTrip), 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function testSerializeAfterClose() { 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci createSender() 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(closeSender) 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(serializeRoundTrip) 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(sendAfterClose) 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci .then(test.succeed, test.fail); 28903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }, 29003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 29103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)], test.runTests, exports); 292