Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / tools / rtcbot / test / webrtc_video_streaming.js
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']);