diff options
Diffstat (limited to 'testing/web-platform/tests/webrtc/RTCRtpSender-getStats.https.html')
-rw-r--r-- | testing/web-platform/tests/webrtc/RTCRtpSender-getStats.https.html | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webrtc/RTCRtpSender-getStats.https.html b/testing/web-platform/tests/webrtc/RTCRtpSender-getStats.https.html new file mode 100644 index 0000000000..62c01aafa6 --- /dev/null +++ b/testing/web-platform/tests/webrtc/RTCRtpSender-getStats.https.html @@ -0,0 +1,97 @@ +<!doctype html> +<meta charset=utf-8> +<meta name="timeout" content="long"> +<title>RTCRtpSender.prototype.getStats</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> +<script src="dictionary-helper.js"></script> +<script src="RTCStats-helper.js"></script> +<script> + 'use strict'; + + // Test is based on the following editor draft: + // webrtc-pc 20171130 + // webrtc-stats 20171122 + + // The following helper functions are called from RTCPeerConnection-helper.js: + // exchangeOfferAnswer + + // The following helper function is called from RTCStats-helper.js + // validateStatsReport + // assert_stats_report_has_stats + + /* + 5.2. RTCRtpSender Interface + getStats + 1. Let selector be the RTCRtpSender object on which the method was invoked. + 2. Let p be a new promise, and run the following steps in parallel: + 1. Gather the stats indicated by selector according to the stats selection + algorithm. + 2. Resolve p with the resulting RTCStatsReport object, containing the + gathered stats. + 3. Return p. + + 8.5. The stats selection algorithm + 3. If selector is an RTCRtpSender, gather stats for and add the following objects + to result: + - All RTCOutboundRtpStreamStats objects corresponding to selector. + - All stats objects referenced directly or indirectly by the RTCOutboundRtpStreamStats + objects added. + */ + + promise_test(async t => { + const caller = new RTCPeerConnection(); + t.add_cleanup(() => caller.close()); + const callee = new RTCPeerConnection(); + t.add_cleanup(() => callee.close()); + + const stream = await getNoiseStream({audio:true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + const { sender } = caller.addTransceiver(track); + + await exchangeOfferAnswer(caller, callee); + const statsReport = await sender.getStats(); + validateStatsReport(statsReport); + assert_stats_report_has_stats(statsReport, ['outbound-rtp']); + }, 'sender.getStats() via addTransceiver should return stats report containing outbound-rtp stats'); + + promise_test(async t => { + const caller = new RTCPeerConnection(); + t.add_cleanup(() => caller.close()); + const callee = new RTCPeerConnection(); + t.add_cleanup(() => callee.close()); + const stream = await getNoiseStream({audio:true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + const sender = caller.addTrack(track, stream); + + await exchangeOfferAnswer(caller, callee); + const statsReport = await sender.getStats(); + validateStatsReport(statsReport); + assert_stats_report_has_stats(statsReport, ['outbound-rtp']); + }, 'sender.getStats() via addTrack should return stats report containing outbound-rtp stats'); + + promise_test(async t => { + const caller = new RTCPeerConnection(); + t.add_cleanup(() => caller.close()); + const callee = new RTCPeerConnection(); + t.add_cleanup(() => callee.close()); + const stream = await getNoiseStream({audio:true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + const { sender } = caller.addTransceiver(track); + + exchangeIceCandidates(caller, callee); + exchangeIceCandidates(callee, caller); + await exchangeOfferAnswer(caller, callee); + // Pairing should be possible as soon as we are 'checking', but to allow the + // pairing to happen asynchronously, we wait until 'connected' or + // 'completed' instead as it is not possible to reach these without a pair. + await waitForIceStateChange(caller, ['connected', 'completed']); + const statsReport = await sender.getStats(); + assert_stats_report_has_stats(statsReport, ['candidate-pair', 'local-candidate', 'remote-candidate']); + }, 'sender.getStats() should return stats report containing ICE candidate stats'); + +</script> |