Bug 1093835 - Check audio flow stopping after removing audio track and renegotiating. r=jib
authorAndreas Pehrson <pehrsons@gmail.com>
Thu, 04 May 2017 11:37:02 +0200
changeset 573161 9983a4f7101f04451c21a93b8a573111b72b5bc9
parent 573160 aaaf7747a289f3a587b4b5bcf58639561f1398b0
child 573162 3825c6856dd197e31890f9af6e3ba18b1c5c3e2e
push id57306
push userbmo:emilio+bugs@crisal.io
push dateFri, 05 May 2017 10:08:55 +0000
reviewersjib
bugs1093835
milestone55.0a1
Bug 1093835 - Check audio flow stopping after removing audio track and renegotiating. r=jib MozReview-Commit-ID: 2lx6jUON3jU
dom/media/tests/mochitest/test_peerConnection_removeAudioTrack.html
--- a/dom/media/tests/mochitest/test_peerConnection_removeAudioTrack.html
+++ b/dom/media/tests/mochitest/test_peerConnection_removeAudioTrack.html
@@ -6,29 +6,51 @@
 <body>
 <pre id="test">
 <script type="application/javascript">
   createHTML({
     bug: "1017888",
     title: "Renegotiation: remove audio track"
   });
 
-  var test;
   runNetworkTest(function (options) {
-    test = new PeerConnectionTest(options);
+    const test = new PeerConnectionTest(options);
+    let receivedTrack, analyser, freq;
     addRenegotiation(test.chain,
       [
+        function PC_REMOTE_SETUP_ANALYSER(test) {
+          is(test.pcRemote._pc.getReceivers().length, 1,
+             "pcRemote should have one receiver before renegotiation");
+
+          receivedTrack = test.pcRemote._pc.getReceivers()[0].track;
+          is(receivedTrack.readyState, "live",
+             "The received track should be live");
+
+          analyser = new AudioStreamAnalyser(
+              new AudioContext(), new MediaStream([receivedTrack]));
+          freq = analyser.binIndexForFrequency(TEST_AUDIO_FREQ);
+
+          return analyser.waitForAnalysisSuccess(arr => arr[freq] > 200);
+        },
         function PC_LOCAL_REMOVE_AUDIO_TRACK(test) {
           test.setOfferOptions({ offerToReceiveAudio: true });
           return test.pcLocal.removeSender(0);
         },
+      ],
+      [
+        function PC_REMOTE_CHECK_FLOW_STOPPED(test) {
+          is(test.pcRemote._pc.getReceivers().length, 0,
+             "pcRemote should have no more receivers");
+          is(receivedTrack.readyState, "ended",
+             "The received track should have ended");
+
+          return analyser.waitForAnalysisSuccess(arr => arr[freq] < 50);
+        },
       ]
     );
 
-    // TODO(bug 1093835): figure out how to verify that media stopped flowing from pcLocal
-
     test.setMediaConstraints([{audio: true}], [{audio: true}]);
     test.run();
   });
 </script>
 </pre>
 </body>
 </html>