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

Side by Side Diff: chrome/test/data/extensions/api_test/socket/api/multicast.js

Issue 12684008: Multicast socket API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix tests Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 function testMulticast() {
2 function randomHexString(count) {
3 var result = '';
4 for(var i=0;i<count;i++) {
mmenke 2013/04/12 21:07:41 Space after for and after each semi-colon.
Bei Zhang 2013/04/15 22:30:26 Done.
5 result += (Math.random() * 16 >> 0).toString(16);
6 }
7 return result;
8 }
9 var kMulticastAddress = "237.132.100.133";
10 var kTestMessageLength = 128;
11 var kTestMessage = randomHexString(128);
12 var kPort = 11103;
13 function arrayBufferToString(arrayBuffer) {
14 // UTF-16LE
15 return String.fromCharCode.apply(String, new Uint16Array(arrayBuffer));
16 }
17
18 function stringToArrayBuffer(string) {
19 // UTF-16LE
20 var buf = new ArrayBuffer(string.length * 2);
21 var bufView = new Uint16Array(buf);
22 for (var i = 0, strLen = string.length; i < strLen; i++) {
23 bufView[i] = string.charCodeAt(i);
24 }
25 return buf;
26 }
27
28 function waitForMessage(socketId, callback) {
29 var cancelled = false;
30 var relayCanceller = null;
31 socket.recvFrom(socketId, 1024, function (result) {
32 if (cancelled) return;
33 if (result.resultCode == kTestMessageLength * 2 &&
34 kTestMessage === arrayBufferToString(result.data)) {
35 callback(cancelled);
36 } else {
37 // Restart waiting.
38 relayCanceller = waitForMessage(socketId, callback);
39 }
40 });
41 return function canceller() {
42 if (relayCanceller) {
43 relayCanceller();
44 }
45 cancelled = true;
46 callback(cancelled);
47 };
48 }
49
50 function testSendMessage(message, address) {
51 // Send the UDP message to the address with multicast ttl = 0.
52 address = address || kMulticastAddress;
53 var clientSocketId;
54 socket.create('udp', {}, function (socketInfo) {
55 if (socketInfo) {
56 clientSocketId = socketInfo.socketId;
57 chrome.test.assertTrue(clientSocketId > 0,
58 "Cannot create client udp socket.");
59 socket.setMulticastTimeToLive(clientSocketId, 0, function (result) {
60 chrome.test.assertEq(result, 0, "Cannot create client udp socket.");
61 socket.bind(clientSocketId, "0.0.0.0", kPort + 2, function (result) {
62 chrome.test.assertTrue(clientSocketId > 0,
63 "Cannot bind client udp socket.");
mmenke 2013/04/12 21:07:41 This should be either indented 4-spaces, with clie
Bei Zhang 2013/04/15 22:30:26 Done.
64 socket.sendTo(clientSocketId,
65 stringToArrayBuffer(kTestMessage),
66 address,
67 kPort, function (result) {
68 chrome.test.assertTrue(result.bytesWritten >= 0,
69 "Send to failed. " + JSON.stringify(result));
70 socket.destroy(clientSocketId);
71 });
72 });
73 });
74 } else {
75 chrome.test.fail("Cannot create client udp socket");
76 }
77 });
78 }
79
80 function recvBeforeAddMembership(serverSocketId) {
81 var recvTimeout;
82 var canceller = waitForMessage(serverSocketId, function (cancelled) {
83 clearTimeout(recvTimeout);
84 if (cancelled) {
85 recvWithMembership(serverSocketId);
86 } else {
87 console.log(JSON.stringify(arrayBufferToString(result.data)));
88 chrome.test.fail("Recieved message before joining the group");
89 }
90 });
91 testSendMessage(kTestMessage); // Meant to be lost.
92 recvTimeout = setTimeout(function () {
93 canceller();
94 testSendMessage(kTestMessage, "127.0.0.1", kPort);
95 }, 2000);
96 }
97
98 function recvWithMembership(serverSocketId) {
99 // Join group.
100 socket.joinGroup(serverSocketId, kMulticastAddress, function (result) {
101 chrome.test.assertEq(0, result, "Join group failed.");
102 var recvTimeout;
103 var canceller = waitForMessage(serverSocketId, function (cancelled) {
104 clearTimeout(recvTimeout);
105 if (!cancelled) {
106 recvWithoutMembership(serverSocketId);
107 } else {
108 console.log(JSON.stringify(arrayBufferToString(result.data)));
109 chrome.test.fail("Recieved message before joining the group");
110 }
111 });
112 testSendMessage(kTestMessage);
113 recvTimeout = setTimeout(function () {
114 canceller();
115 socket.destroy(serverSocketId);
116 chrome.test.fail("Cannot receive from multicast group.");
117 }, 2000);
118 });
119 }
120
121 function recvWithoutMembership(serverSocketId) {
122 socket.leaveGroup(serverSocketId, kMulticastAddress, function (result) {
123 chrome.test.assertEq(0, result, "leave group failed.");
124 var recvTimeout;
125 var canceller = waitForMessage(serverSocketId, function (cancelled) {
126 clearTimeout(recvTimeout);
127 if (cancelled) {
128 chrome.test.succeed();
129 } else {
130 console.log(JSON.stringify(arrayBufferToString(result.data)));
131 chrome.test.fail("Recieved message before joining the group");
132 }
133 });
134 testSendMessage(request);
135 recvTimeout = setTimeout(function () {
136 canceller();
137 socket.destroy(serverSocketId);
138 chrome.test.succeed();
139 }, 2000);
140 });
141 }
142
143 socket.create('udp', {}, function (socketInfo) {
144 var serverSocketId;
145 if (socketInfo) {
146 serverSocketId = socketInfo.socketId;
147 socket.bind(serverSocketId, "0.0.0.0", kPort, function (result) {
148 chrome.test.assertEq(0, result, "Bind failed.");
149 recvBeforeAddMembership(serverSocketId);
150 });
151 } else {
152 chrome.test.fail("Cannot create server udp socket");
153 }
154 });
155 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698