| Index: content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
|
| diff --git a/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0a30d4ec0e3c7c9f2983cefd5d43336bbeae4bde
|
| --- /dev/null
|
| +++ b/content/renderer/media/webrtc/webrtc_local_audio_track_adapter_unittest.cc
|
| @@ -0,0 +1,102 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <stddef.h>
|
| +
|
| +#include "content/renderer/media/media_stream_audio_level_calculator.h"
|
| +#include "content/renderer/media/webrtc/webrtc_local_audio_track_adapter.h"
|
| +#include "content/renderer/media/webrtc_audio_capturer.h"
|
| +#include "content/renderer/media/webrtc_local_audio_track.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "third_party/webrtc/api/mediastreaminterface.h"
|
| +
|
| +using ::testing::_;
|
| +using ::testing::AnyNumber;
|
| +
|
| +namespace content {
|
| +
|
| +namespace {
|
| +
|
| +class MockWebRtcAudioSink : public webrtc::AudioTrackSinkInterface {
|
| + public:
|
| + MockWebRtcAudioSink() {}
|
| + ~MockWebRtcAudioSink() {}
|
| + MOCK_METHOD5(OnData, void(const void* audio_data,
|
| + int bits_per_sample,
|
| + int sample_rate,
|
| + size_t number_of_channels,
|
| + size_t number_of_frames));
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class WebRtcLocalAudioTrackAdapterTest : public ::testing::Test {
|
| + public:
|
| + WebRtcLocalAudioTrackAdapterTest()
|
| + : params_(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
|
| + media::CHANNEL_LAYOUT_STEREO, 48000, 16, 480),
|
| + adapter_(WebRtcLocalAudioTrackAdapter::Create(std::string(), NULL)) {
|
| + track_.reset(new WebRtcLocalAudioTrack(adapter_.get()));
|
| + }
|
| +
|
| + protected:
|
| + void SetUp() override {
|
| + track_->OnSetFormat(params_);
|
| + EXPECT_TRUE(track_->GetAudioAdapter()->enabled());
|
| + }
|
| +
|
| + media::AudioParameters params_;
|
| + scoped_refptr<WebRtcLocalAudioTrackAdapter> adapter_;
|
| + std::unique_ptr<WebRtcLocalAudioTrack> track_;
|
| +};
|
| +
|
| +// Adds and Removes a WebRtcAudioSink to a local audio track.
|
| +TEST_F(WebRtcLocalAudioTrackAdapterTest, AddAndRemoveSink) {
|
| + // Add a sink to the webrtc track.
|
| + std::unique_ptr<MockWebRtcAudioSink> sink(new MockWebRtcAudioSink());
|
| + webrtc::AudioTrackInterface* webrtc_track =
|
| + static_cast<webrtc::AudioTrackInterface*>(adapter_.get());
|
| + webrtc_track->AddSink(sink.get());
|
| +
|
| + // Send a packet via |track_| and the data should reach the sink of the
|
| + // |adapter_|.
|
| + const std::unique_ptr<media::AudioBus> audio_bus =
|
| + media::AudioBus::Create(params_);
|
| + // While this test is not checking the signal data being passed around, the
|
| + // implementation in WebRtcLocalAudioTrack reads the data for its signal level
|
| + // computation. Initialize all samples to zero to make the memory sanitizer
|
| + // happy.
|
| + audio_bus->Zero();
|
| +
|
| + base::TimeTicks estimated_capture_time = base::TimeTicks::Now();
|
| + EXPECT_CALL(*sink,
|
| + OnData(_, 16, params_.sample_rate(), params_.channels(),
|
| + params_.frames_per_buffer()));
|
| + track_->Capture(*audio_bus, estimated_capture_time);
|
| +
|
| + // Remove the sink from the webrtc track.
|
| + webrtc_track->RemoveSink(sink.get());
|
| + sink.reset();
|
| +
|
| + // Verify that no more callback gets into the sink.
|
| + estimated_capture_time +=
|
| + params_.frames_per_buffer() * base::TimeDelta::FromSeconds(1) /
|
| + params_.sample_rate();
|
| + track_->Capture(*audio_bus, estimated_capture_time);
|
| +}
|
| +
|
| +TEST_F(WebRtcLocalAudioTrackAdapterTest, GetSignalLevel) {
|
| + webrtc::AudioTrackInterface* webrtc_track =
|
| + static_cast<webrtc::AudioTrackInterface*>(adapter_.get());
|
| + int signal_level = -1;
|
| + EXPECT_FALSE(webrtc_track->GetSignalLevel(&signal_level));
|
| + MediaStreamAudioLevelCalculator calculator;
|
| + adapter_->SetLevel(calculator.level());
|
| + signal_level = -1;
|
| + EXPECT_TRUE(webrtc_track->GetSignalLevel(&signal_level));
|
| + EXPECT_EQ(0, signal_level);
|
| +}
|
| +
|
| +} // namespace content
|
|
|