diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /testing/web-platform/tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html')
-rw-r--r-- | testing/web-platform/tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html b/testing/web-platform/tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html new file mode 100644 index 0000000000..899e603cbe --- /dev/null +++ b/testing/web-platform/tests/webrtc/RTCDtlsTransport-getRemoteCertificates.html @@ -0,0 +1,97 @@ +<!doctype html> +<meta charset="utf-8"> +<title>RTCDtlsTransport.prototype.getRemoteCertificates</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> +<script> + 'use strict'; + + // The following helper functions are called from RTCPeerConnection-helper.js: + // exchangeIceCandidates + // exchangeOfferAnswer + + /* + 5.5. RTCDtlsTransport Interface + interface RTCDtlsTransport : EventTarget { + readonly attribute RTCDtlsTransportState state; + sequence<ArrayBuffer> getRemoteCertificates(); + attribute EventHandler onstatechange; + attribute EventHandler onerror; + ... + }; + + enum RTCDtlsTransportState { + "new", + "connecting", + "connected", + "closed", + "failed" + }; + + getRemoteCertificates + Returns the certificate chain in use by the remote side, with each certificate + encoded in binary Distinguished Encoding Rules (DER) [X690]. + getRemoteCertificates() will return an empty list prior to selection of the + remote certificate, which will be completed by the time RTCDtlsTransportState + transitions to "connected". + */ + async_test(t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + pc1.addTrack(trackFactories.audio()); + exchangeIceCandidates(pc1, pc2); + + exchangeOfferAnswer(pc1, pc2) + .then(t.step_func(() => { + const dtlsTransport1 = pc1.getSenders()[0].transport; + const dtlsTransport2 = pc2.getReceivers()[0].transport; + + const testedTransports = new Set(); + + // Callback function that test the respective DTLS transports + // when they become connected. + const onConnected = t.step_func(dtlsTransport => { + const certs = dtlsTransport.getRemoteCertificates(); + + assert_greater_than(certs.length, 0, + 'Expect DTLS transport to have at least one remote certificate when connected'); + + for(const cert of certs) { + assert_true(cert instanceof ArrayBuffer, + 'Expect certificate elements be instance of ArrayBuffer'); + } + + testedTransports.add(dtlsTransport); + + // End the test if both dtlsTransports are tested. + if(testedTransports.has(dtlsTransport1) && testedTransports.has(dtlsTransport2)) { + t.done(); + } + }) + + for(const dtlsTransport of [dtlsTransport1, dtlsTransport2]) { + if(dtlsTransport.state === 'connected') { + onConnected(dtlsTransport); + } else { + assert_array_equals(dtlsTransport.getRemoteCertificates(), [], + 'Expect DTLS certificates be initially empty until become connected'); + + dtlsTransport.addEventListener('statechange', t.step_func(() => { + if(dtlsTransport.state === 'connected') { + onConnected(dtlsTransport); + } + })); + + dtlsTransport.addEventListener('error', t.step_func(err => { + assert_unreached(`Unexpected error during DTLS handshake: ${err}`); + })); + } + } + })); + }); + +</script> |