diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /netwerk/test/unit/test_udp_multicast.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'netwerk/test/unit/test_udp_multicast.js')
-rw-r--r-- | netwerk/test/unit/test_udp_multicast.js | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_udp_multicast.js b/netwerk/test/unit/test_udp_multicast.js new file mode 100644 index 0000000000..202a4a1d99 --- /dev/null +++ b/netwerk/test/unit/test_udp_multicast.js @@ -0,0 +1,99 @@ +// Bug 960397: UDP multicast options +"use strict"; + +var { Constructor: CC } = Components; + +const UDPSocket = CC( + "@mozilla.org/network/udp-socket;1", + "nsIUDPSocket", + "init" +); +const ADDRESS_TEST1 = "224.0.0.200"; +const ADDRESS_TEST2 = "224.0.0.201"; +const ADDRESS_TEST3 = "224.0.0.202"; +const ADDRESS_TEST4 = "224.0.0.203"; + +const TIMEOUT = 2000; + +function createSocketAndJoin(addr) { + let socket = new UDPSocket( + -1, + false, + Services.scriptSecurityManager.getSystemPrincipal() + ); + socket.joinMulticast(addr); + return socket; +} + +function sendPing(socket, addr) { + let ping = "ping"; + let rawPing = new TextEncoder().encode(ping); + + return new Promise((resolve, reject) => { + socket.asyncListen({ + onPacketReceived(s, message) { + info("Received on port " + socket.port); + Assert.equal(message.data, ping); + socket.close(); + resolve(message.data); + }, + onStopListening(sock, status) {}, + }); + + info("Multicast send to port " + socket.port); + socket.send(addr, socket.port, rawPing, rawPing.length); + + // Timers are bad, but it seems like the only way to test *not* getting a + // packet. + let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); + timer.initWithCallback( + () => { + socket.close(); + reject(); + }, + TIMEOUT, + Ci.nsITimer.TYPE_ONE_SHOT + ); + }); +} + +add_test(() => { + info("Joining multicast group"); + let socket = createSocketAndJoin(ADDRESS_TEST1); + sendPing(socket, ADDRESS_TEST1).then(run_next_test, () => + do_throw("Joined group, but no packet received") + ); +}); + +// Disabled on Windows11 for frequent intermittent failures. +// See bug 1760123. +add_test({ skip_if: () => mozinfo.win11_2009 }, () => { + info("Disabling multicast loopback"); + let socket = createSocketAndJoin(ADDRESS_TEST2); + socket.multicastLoopback = false; + sendPing(socket, ADDRESS_TEST2).then( + () => do_throw("Loopback disabled, but still got a packet"), + run_next_test + ); +}); + +// This fails locally on windows 11. +add_test({ skip_if: () => mozinfo.win11_2009 }, () => { + info("Changing multicast interface"); + let socket = createSocketAndJoin(ADDRESS_TEST3); + socket.multicastInterface = "127.0.0.1"; + sendPing(socket, ADDRESS_TEST3).then( + () => do_throw("Changed interface, but still got a packet"), + run_next_test + ); +}); + +add_test(() => { + info("Leaving multicast group"); + let socket = createSocketAndJoin(ADDRESS_TEST4); + socket.leaveMulticast(ADDRESS_TEST4); + sendPing(socket, ADDRESS_TEST4).then( + () => do_throw("Left group, but still got a packet"), + run_next_test + ); +}); |