Home | History | Annotate | Download | only in test
      1 // Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
      2 //
      3 // Use of this source code is governed by a BSD-style license
      4 // that can be found in the LICENSE file in the root of the source
      5 // tree. An additional intellectual property rights grant can be found
      6 // in the file PATENTS.  All contributing project authors may
      7 // be found in the AUTHORS file in the root of the source tree.
      8 //
      9 // A unidirectional video and audio flowing test from bot 1 to bot 2.
     10 // The test succeeds after collecting stats for 10 seconds from both bots
     11 // and then write these stats to a file.
     12 //
     13 // Note: the source of the video and audio stream is getUserMedia().
     14 function testOneWayVideo(test, bot1, bot2) {
     15   var report = test.createStatisticsReport("webrtc_video_streaming");
     16 
     17   test.wait([
     18       createPeerConnection.bind(bot1),
     19       createPeerConnection.bind(bot2) ],
     20     onPeerConnectionCreated);
     21 
     22   function createPeerConnection(done) {
     23     test.createTurnConfig(onTurnConfig.bind(this), test.fail);
     24 
     25     function onTurnConfig(config) {
     26       this.createPeerConnection(config, done, test.fail);
     27     };
     28   }
     29 
     30   function onPeerConnectionCreated(pc1, pc2) {
     31     test.log("RTC Peers created.");
     32     pc1.addEventListener('addstream', test.fail);
     33     pc2.addEventListener('addstream', onAddStream);
     34     pc1.addEventListener('icecandidate', onIceCandidate.bind(pc2));
     35     pc2.addEventListener('icecandidate', onIceCandidate.bind(pc1));
     36 
     37     bot1.getUserMedia({video:true, audio:true}, onUserMediaSuccess, test.fail);
     38 
     39     function onUserMediaSuccess(stream) {
     40       test.log("User has granted access to local media.");
     41       pc1.addStream(stream);
     42       bot1.showStream(stream.id, true, true);
     43 
     44       createOfferAndAnswer(pc1, pc2);
     45     }
     46   }
     47 
     48   function onAddStream(event) {
     49     test.log("On Add stream.");
     50     bot2.showStream(event.stream.id, true, false);
     51   }
     52 
     53   function onIceCandidate(event) {
     54     if(event.candidate) {
     55       test.log(event.candidate.candidate);
     56       this.addIceCandidate(event.candidate,
     57          onAddIceCandidateSuccess, test.fail);
     58     }
     59 
     60     function onAddIceCandidateSuccess() {
     61       test.log("Candidate added successfully");
     62     }
     63   }
     64 
     65   function createOfferAndAnswer(pc1, pc2) {
     66     test.log("Creating offer.");
     67     pc1.createOffer(gotOffer, test.fail);
     68 
     69     function gotOffer(offer) {
     70       test.log("Got offer");
     71       pc1.setLocalDescription(offer, onSetSessionDescriptionSuccess, test.fail);
     72       pc2.setRemoteDescription(offer, onSetSessionDescriptionSuccess,
     73           test.fail);
     74       test.log("Creating answer");
     75       pc2.createAnswer(gotAnswer, test.fail);
     76     }
     77 
     78     function gotAnswer(answer) {
     79       test.log("Got answer");
     80       pc2.setLocalDescription(answer, onSetSessionDescriptionSuccess,
     81           test.fail);
     82       pc1.setRemoteDescription(answer, onSetSessionDescriptionSuccess,
     83           test.fail);
     84       collectStats();
     85     }
     86 
     87     function onSetSessionDescriptionSuccess() {
     88       test.log("Set session description success.");
     89     }
     90 
     91     function collectStats() {
     92       report.collectStatsFromPeerConnection("bot1", pc1);
     93       report.collectStatsFromPeerConnection("bot2", pc2);
     94 
     95       setTimeout(function() {
     96         report.finish(test.done);
     97         }, 10000);
     98     }
     99   }
    100 }
    101 
    102 registerBotTest('testOneWayVideo/chrome-chrome',
    103                 testOneWayVideo, ['chrome', 'chrome']);
    104