- add sources.
[platform/framework/web/crosswalk.git] / src / media / cast / audio_sender / audio_sender_unittest.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/bind.h"
6 #include "base/memory/scoped_ptr.h"
7 #include "base/test/simple_test_tick_clock.h"
8 #include "media/cast/audio_sender/audio_sender.h"
9 #include "media/cast/cast_config.h"
10 #include "media/cast/cast_environment.h"
11 #include "media/cast/pacing/mock_paced_packet_sender.h"
12 #include "media/cast/test/fake_task_runner.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 namespace media {
16 namespace cast {
17
18 static const int64 kStartMillisecond = GG_INT64_C(12345678900000);
19
20 using testing::_;
21
22 static void RelaseFrame(const PcmAudioFrame* frame) {
23   delete frame;
24 }
25
26 class AudioSenderTest : public ::testing::Test {
27  protected:
28   AudioSenderTest() {
29     testing_clock_.Advance(
30         base::TimeDelta::FromMilliseconds(kStartMillisecond));
31   }
32
33   virtual void SetUp() {
34     task_runner_ = new test::FakeTaskRunner(&testing_clock_);
35     cast_environment_ = new CastEnvironment(&testing_clock_, task_runner_,
36         task_runner_, task_runner_, task_runner_, task_runner_);
37     AudioSenderConfig audio_config;
38     audio_config.codec = kOpus;
39     audio_config.use_external_encoder = false;
40     audio_config.frequency = 48000;
41     audio_config.channels = 2;
42     audio_config.bitrate = 64000;
43     audio_config.rtp_payload_type = 127;
44
45     audio_sender_.reset(
46         new AudioSender(cast_environment_, audio_config, &mock_transport_));
47   }
48
49   virtual ~AudioSenderTest() {}
50
51   base::SimpleTestTickClock testing_clock_;
52   MockPacedPacketSender mock_transport_;
53   scoped_refptr<test::FakeTaskRunner> task_runner_;
54   scoped_ptr<AudioSender> audio_sender_;
55   scoped_refptr<CastEnvironment> cast_environment_;
56 };
57
58 TEST_F(AudioSenderTest, Encode20ms) {
59   EXPECT_CALL(mock_transport_, SendPackets(_)).Times(1);
60
61   PcmAudioFrame* audio_frame = new PcmAudioFrame();
62   audio_frame->channels = 2;
63   audio_frame->frequency = 48000;
64   audio_frame->samples.insert(audio_frame->samples.begin(), 480 * 2 * 2, 123);
65
66   base::TimeTicks recorded_time;
67   audio_sender_->InsertRawAudioFrame(audio_frame, recorded_time,
68       base::Bind(&RelaseFrame, audio_frame));
69
70   task_runner_->RunTasks();
71 }
72
73 TEST_F(AudioSenderTest, RtcpTimer) {
74   EXPECT_CALL(mock_transport_, SendRtcpPacket(_)).Times(1);
75
76   // Make sure that we send at least one RTCP packet.
77   base::TimeDelta max_rtcp_timeout =
78       base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2);
79   testing_clock_.Advance(max_rtcp_timeout);
80   task_runner_->RunTasks();
81 }
82
83 }  // namespace cast
84 }  // namespace media