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 //
     11 // Note: the source of the video and audio stream is getUserMedia().
     12 //
     13 // TODO(houssainy): get a condition to terminate the test.
     14 //
     15 function testVideoStreaming(bot1, bot2) {
     16   var pc1 = null;
     17   var pc2 = null;
     18 
     19   test.wait([
     20       createPeerConnection.bind(bot1),
     21       createPeerConnection.bind(bot2) ],
     22     onPeerConnectionCreated);
     23 
     24   function createPeerConnection(done) {
     25     this.createPeerConnection(done, test.fail);
     26   }
     27 
     28   function onPeerConnectionCreated(peer1, peer2) {
     29     test.log("RTC Peers created.");
     30     pc1 = peer1;
     31     pc2 = peer2;
     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();
     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() {
     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     }
     85 
     86     function onSetSessionDescriptionSuccess() {
     87       test.log("Set session description success.");
     88     }
     89   }
     90 }
     91 
     92 test.wait( [ test.spawnBot.bind(test, "alice"),
     93              test.spawnBot.bind(test, "bob") ],
     94           testVideoStreaming);
     95