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); |