Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(742)

Unified Diff: extensions/test/data/data_sender_unittest.js

Issue 571333002: Add serialization support to the JS DataSender and DataReceiver. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@stash-service
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698