Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / netwerk / test / unit / test_udp_multicast.js
bloba2022f5bf1461266050553c7a128495a1e571601
1 // Bug 960397: UDP multicast options
2 "use strict";
4 var { Constructor: CC } = Components;
6 const UDPSocket = CC(
7 "@mozilla.org/network/udp-socket;1",
8 "nsIUDPSocket",
9 "init"
11 const ADDRESS_TEST1 = "224.0.0.200";
12 const ADDRESS_TEST2 = "224.0.0.201";
13 const ADDRESS_TEST3 = "224.0.0.202";
14 const ADDRESS_TEST4 = "224.0.0.203";
16 const TIMEOUT = 2000;
18 function createSocketAndJoin(addr) {
19 let socket = new UDPSocket(
20 -1,
21 false,
22 Services.scriptSecurityManager.getSystemPrincipal()
24 socket.joinMulticast(addr);
25 return socket;
28 function sendPing(socket, addr) {
29 let ping = "ping";
30 let rawPing = new TextEncoder().encode(ping);
32 return new Promise((resolve, reject) => {
33 socket.asyncListen({
34 onPacketReceived(s, message) {
35 info("Received on port " + socket.port);
36 Assert.equal(message.data, ping);
37 socket.close();
38 resolve(message.data);
40 onStopListening() {},
41 });
43 info("Multicast send to port " + socket.port);
44 socket.send(addr, socket.port, rawPing, rawPing.length);
46 // Timers are bad, but it seems like the only way to test *not* getting a
47 // packet.
48 let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
49 timer.initWithCallback(
50 () => {
51 socket.close();
52 reject();
54 TIMEOUT,
55 Ci.nsITimer.TYPE_ONE_SHOT
57 });
60 add_test(() => {
61 info("Joining multicast group");
62 let socket = createSocketAndJoin(ADDRESS_TEST1);
63 sendPing(socket, ADDRESS_TEST1).then(run_next_test, () =>
64 do_throw("Joined group, but no packet received")
66 });
68 // Disabled on Windows11 for frequent intermittent failures.
69 // See bug 1760123.
70 add_test({ skip_if: () => mozinfo.win11_2009 }, () => {
71 info("Disabling multicast loopback");
72 let socket = createSocketAndJoin(ADDRESS_TEST2);
73 socket.multicastLoopback = false;
74 sendPing(socket, ADDRESS_TEST2).then(
75 () => do_throw("Loopback disabled, but still got a packet"),
76 run_next_test
78 });
80 // This fails locally on windows 11.
81 add_test({ skip_if: () => mozinfo.win11_2009 }, () => {
82 info("Changing multicast interface");
83 let socket = createSocketAndJoin(ADDRESS_TEST3);
84 socket.multicastInterface = "127.0.0.1";
85 sendPing(socket, ADDRESS_TEST3).then(
86 () => do_throw("Changed interface, but still got a packet"),
87 run_next_test
89 });
91 add_test(() => {
92 info("Leaving multicast group");
93 let socket = createSocketAndJoin(ADDRESS_TEST4);
94 socket.leaveMulticast(ADDRESS_TEST4);
95 sendPing(socket, ADDRESS_TEST4).then(
96 () => do_throw("Left group, but still got a packet"),
97 run_next_test
99 });