commit 93b6bd7e5a851bf60a188acedbffa13198a6c7c3
parent 00463fe47d72f3f907b63f906d24e5b7dcec828d
Author: Byron Campen <docfaraday@gmail.com>
Date: Mon, 8 Dec 2025 23:01:39 +0000
Bug 1999831: Test case with repeated open/close with id checking. r=jib
Differential Revision: https://phabricator.services.mozilla.com/D272686
Diffstat:
1 file changed, 45 insertions(+), 0 deletions(-)
diff --git a/testing/web-platform/mozilla/tests/webrtc/RTCDataChannel-id-reuse.html b/testing/web-platform/mozilla/tests/webrtc/RTCDataChannel-id-reuse.html
@@ -0,0 +1,45 @@
+<!doctype html>
+<meta charset=utf-8>
+<meta name="timeout" content="long">
+<title>Test cases that verify datachannel ids are reused in the expected way. The spec is not very picky here, but we want to be.</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="/webrtc/RTCPeerConnection-helper.js"></script>
+<script src="/webrtc/RTCDataChannel-helper.js"></script>
+<script>
+'use strict';
+
+promise_test(async t => {
+ const offerer = new RTCPeerConnection();
+ const answerer = new RTCPeerConnection();
+ t.add_cleanup(() => offerer.close());
+ t.add_cleanup(() => answerer.close());
+
+ const pairPromise = openChannelPair(offerer, answerer, 'ensure_datachannel_msection');
+ await negotiate(offerer, answerer);
+ const [dco, dca] = await pairPromise;
+ const id = dco.id;
+ assert_equals(dca.id, id);
+ dco.close();
+ await new Promise(r => dco.onclose = r);
+
+ answerer.addEventListener('datachannel', ({channel}) => {
+ channel.addEventListener('message', ({data}) => {
+ // echo data back to sender
+ channel.send(data);
+ // close channel
+ channel.close();
+ })
+ });
+
+ for (let i = 0; i < 1000; i++) {
+ const dc = offerer.createDataChannel(`dc ${i}`);
+ await new Promise(r => dc.onopen = r);
+ assert_equals(dc.id, id);
+ dc.send("ping");
+ dc.close();
+ await new Promise(r => dc.onclose = r);
+ }
+}, 'Test that repeated open/send/close with minimal waiting uses the same id every time');
+
+</script>