| Index: extensions/test/data/data_sender_unittest.js
|
| diff --git a/extensions/test/data/data_sender_unittest.js b/extensions/test/data/data_sender_unittest.js
|
| index 78568c90740baa68a8c0035ce3be8c7e6cbd7470..1510c175b00be5cfad80ec9968d5d51531cd064b 100644
|
| --- a/extensions/test/data/data_sender_unittest.js
|
| +++ b/extensions/test/data/data_sender_unittest.js
|
| @@ -37,6 +37,17 @@ function createSender() {
|
| }));
|
| }
|
|
|
| +function serializeRoundTrip(sender) {
|
| + return Promise.all([
|
| + sender.serialize(),
|
| + requireAsync('data_sender'),
|
| + ]).then(function(promises) {
|
| + var serialized = promises[0];
|
| + var dataSender = promises[1];
|
| + return dataSender.DataSender.deserialize(serialized);
|
| + });
|
| +}
|
| +
|
| unittestBindings.exportTests([
|
| function testSend() {
|
| createSender().then(test.callbackPass(function(sender) {
|
| @@ -215,4 +226,231 @@ unittestBindings.exportTests([
|
| }));
|
| },
|
|
|
| + function testSendWithSerialization() {
|
| + createSender().then(test.callbackPass(function(sender) {
|
| + return sender.send(generateData(1)).then(test.callbackPass(
|
| + function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + return sender;
|
| + }));
|
| + })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass(
|
| + function(sender) {
|
| + var seen = null;
|
| + sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + test.assertEq(null, seen);
|
| + seen = 'second';
|
| + }));
|
| + sender.send(generateData(1)).then(test.callbackPass(function(bytesSent) {
|
| + sender.close();
|
| + test.assertEq(1, bytesSent);
|
| + test.assertEq('second', seen);
|
| + seen = 'third';
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + function testSendErrorWithSerialization() {
|
| + createSender().then(test.callbackPass(function(sender) {
|
| + return sender.send(generateData(BUFFER_SIZE * 3, 'b')).catch(
|
| + test.callbackPass(function(e) {
|
| + test.assertEq(1, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + return sender.send(generateData(1));
|
| + })).then(test.callbackPass(function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + return sender;
|
| + }));
|
| + })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass(
|
| + function(sender) {
|
| + sender.send(generateData(BUFFER_SIZE * 3, 'b')).catch(
|
| + test.callbackPass(function(e) {
|
| + test.assertEq(3, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + sender.send(generateData(1, 'c')).then(test.callbackPass(
|
| + function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + sender.close();
|
| + }));
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + function testSendErrorPartialSuccessWithSerialization() {
|
| + createSender().then(test.callbackPass(function(sender) {
|
| + return sender.send(generateData(BUFFER_SIZE * 3, 'b')).catch(
|
| + test.callbackPass(function(e) {
|
| + test.assertEq(1, e.error);
|
| + test.assertEq(5, e.bytesSent);
|
| + return sender.send(generateData(1));
|
| + })).then(test.callbackPass(function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + return sender;
|
| + }));
|
| + })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass(
|
| + function(sender) {
|
| + sender.send(generateData(BUFFER_SIZE * 3, 'c')).catch(test.callbackPass(
|
| + function(e) {
|
| + test.assertEq(3, e.error);
|
| + test.assertEq(5, e.bytesSent);
|
| + return sender.send(generateData(1, 'd'));
|
| + })).then(test.callbackPass(function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + sender.close();
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + function testSendErrorBetweenPacketsWithSerialization() {
|
| + createSender().then(test.callbackPass(function(sender) {
|
| + var first = sender.send(generateData(2, 'b')).catch(test.callbackPass(
|
| + function(e) {
|
| + test.assertEq(1, e.error);
|
| + test.assertEq(2, e.bytesSent);
|
| + }));
|
| + // After an error, all sends in progress will be cancelled.
|
| + var second = sender.send(generateData(2, 'b')).catch(test.callbackPass(
|
| + function(e) {
|
| + test.assertEq(1, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + return sender.send(generateData(1));
|
| + })).then(test.callbackPass(
|
| + function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + }));
|
| + return Promise.all([first, second]).then(test.callbackPass(function() {
|
| + return sender;
|
| + }));
|
| + })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass(
|
| + function(sender) {
|
| + sender.send(generateData(2, 'c')).catch(test.callbackPass(function(e) {
|
| + test.assertEq(3, e.error);
|
| + test.assertEq(2, e.bytesSent);
|
| + }));
|
| + // After an error, all sends in progress will be cancelled.
|
| + sender.send(generateData(2, 'c')).catch(test.callbackPass(function(e) {
|
| + test.assertEq(3, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + sender.send(generateData(1, 'd')).then(test.callbackPass(
|
| + function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + sender.close();
|
| + }));
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + function testSendErrorInSecondPacketWithSerialization() {
|
| + createSender().then(test.callbackPass(function(sender) {
|
| + var first = sender.send(generateData(2, 'b')).then(test.callbackPass(
|
| + function(bytesSent) {
|
| + test.assertEq(2, bytesSent);
|
| + }));
|
| + var second = sender.send(generateData(2, 'b')).catch(test.callbackPass(
|
| + function(e) {
|
| + test.assertEq(1, e.error);
|
| + test.assertEq(1, e.bytesSent);
|
| + return sender.send(generateData(1)).then(test.callbackPass(
|
| + function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + }));
|
| + }));
|
| + return Promise.all([first, second]).then(test.callbackPass(function() {
|
| + return sender;
|
| + }));
|
| + })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass(
|
| + function(sender) {
|
| + sender.send(generateData(2, 'c')).then(test.callbackPass(
|
| + function(bytesSent) {
|
| + test.assertEq(2, bytesSent);
|
| + }));
|
| + sender.send(generateData(2, 'c')).catch(test.callbackPass(function(e) {
|
| + test.assertEq(3, e.error);
|
| + test.assertEq(1, e.bytesSent);
|
| + return sender.send(generateData(1, 'd')).then(test.callbackPass(
|
| + function(bytesSent) {
|
| + test.assertEq(1, bytesSent);
|
| + sender.close();
|
| + }));
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + function testCancelWithSerialization() {
|
| + createSender().then(test.callbackPass(function(sender) {
|
| + var seen = null;
|
| + sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) {
|
| + test.assertEq(3, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + test.assertEq(null, seen);
|
| + seen = 'send';
|
| + }));
|
| + return sender.cancel(3).then(test.callbackPass(function() {
|
| + test.assertEq('send', seen);
|
| + seen = 'cancel';
|
| + return sender;
|
| + }));
|
| + })).then(test.callbackPass(serializeRoundTrip)).then(test.callbackPass(
|
| + function(sender) {
|
| + var seen = null;
|
| + sender.send(generateData(1, 'c')).catch(test.callbackPass(function(e) {
|
| + test.assertEq(3, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + test.assertEq(null, seen);
|
| + seen = 'send';
|
| + }));
|
| + return sender.cancel(3).then(test.callbackPass(function() {
|
| + test.assertEq('send', seen);
|
| + seen = 'cancel';
|
| + sender.close();
|
| + })).then(test.callbackPass(function() {
|
| + return sender;
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + function testSerializeWithSendsInProgress() {
|
| + createSender().then(test.callbackPass(function(sender) {
|
| + var seen = null;
|
| + sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) {
|
| + test.assertEq(FATAL_ERROR, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + test.assertEq(null, seen);
|
| + seen = 'send';
|
| + }));
|
| + sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) {
|
| + test.assertEq(FATAL_ERROR, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + test.assertEq('send', seen);
|
| + seen = 'send2';
|
| + }));
|
| + serializeRoundTrip(sender).then(test.callbackPass(function(sender) {
|
| + test.assertEq('send2', seen);
|
| + seen = 'serialized';
|
| + sender.close();
|
| + }));
|
| + }));
|
| + },
|
| +
|
| + function testSerializeWithSendAndCancelInProgress() {
|
| + createSender().then(test.callbackPass(function(sender) {
|
| + var seen = null;
|
| + sender.send(generateData(1, 'b')).catch(test.callbackPass(function(e) {
|
| + test.assertEq(3, e.error);
|
| + test.assertEq(0, e.bytesSent);
|
| + test.assertEq(null, seen);
|
| + seen = 'send';
|
| + }));
|
| + sender.cancel(3).then(test.callbackPass(function() {
|
| + test.assertEq('send', seen);
|
| + seen = 'cancel';
|
| + }));
|
| + serializeRoundTrip(sender).then(test.callbackPass(function(sender) {
|
| + test.assertEq('cancel', seen);
|
| + seen = 'serialized';
|
| + sender.close();
|
| + }));
|
| + }));
|
| + },
|
| +
|
| ], test.runTests, exports);
|
|
|