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.
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"
18 static const int64 kStartMillisecond = GG_INT64_C(12345678900000);
22 static void RelaseFrame(const PcmAudioFrame* frame) {
26 class AudioSenderTest : public ::testing::Test {
29 testing_clock_.Advance(
30 base::TimeDelta::FromMilliseconds(kStartMillisecond));
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;
46 new AudioSender(cast_environment_, audio_config, &mock_transport_));
49 virtual ~AudioSenderTest() {}
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_;
58 TEST_F(AudioSenderTest, Encode20ms) {
59 EXPECT_CALL(mock_transport_, SendPackets(_)).Times(1);
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);
66 base::TimeTicks recorded_time;
67 audio_sender_->InsertRawAudioFrame(audio_frame, recorded_time,
68 base::Bind(&RelaseFrame, audio_frame));
70 task_runner_->RunTasks();
73 TEST_F(AudioSenderTest, RtcpTimer) {
74 EXPECT_CALL(mock_transport_, SendRtcpPacket(_)).Times(1);
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();