/* * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "webrtc/voice_engine/include/voe_base.h" #include "testing/gtest/include/gtest/gtest.h" #include "webrtc/modules/audio_processing/include/audio_processing.h" #include "webrtc/voice_engine/channel_manager.h" #include "webrtc/voice_engine/shared_data.h" #include "webrtc/voice_engine/voice_engine_fixture.h" #include "webrtc/voice_engine/voice_engine_impl.h" namespace webrtc { class VoEBaseTest : public VoiceEngineFixture {}; TEST_F(VoEBaseTest, InitWithExternalAudioDeviceAndAudioProcessing) { AudioProcessing* audioproc = AudioProcessing::Create(); EXPECT_EQ(0, base_->Init(&adm_, audioproc)); EXPECT_EQ(audioproc, base_->audio_processing()); EXPECT_EQ(0, base_->LastError()); } TEST_F(VoEBaseTest, InitWithExternalAudioDevice) { EXPECT_EQ(nullptr, base_->audio_processing()); EXPECT_EQ(0, base_->Init(&adm_, nullptr)); EXPECT_NE(nullptr, base_->audio_processing()); EXPECT_EQ(0, base_->LastError()); } TEST_F(VoEBaseTest, CreateChannelBeforeInitShouldFail) { int channelID = base_->CreateChannel(); EXPECT_EQ(channelID, -1); } TEST_F(VoEBaseTest, CreateChannelAfterInit) { EXPECT_EQ(0, base_->Init(&adm_, nullptr)); int channelID = base_->CreateChannel(); EXPECT_NE(channelID, -1); EXPECT_EQ(0, base_->DeleteChannel(channelID)); } TEST_F(VoEBaseTest, AssociateSendChannel) { AudioProcessing* audioproc = AudioProcessing::Create(); EXPECT_EQ(0, base_->Init(&adm_, audioproc)); const int channel_1 = base_->CreateChannel(); // Associating with a channel that does not exist should fail. EXPECT_EQ(-1, base_->AssociateSendChannel(channel_1, channel_1 + 1)); const int channel_2 = base_->CreateChannel(); // Let the two channels associate with each other. This is not a normal use // case. Actually, circular association should be avoided in practice. This // is just to test that no crash is caused. EXPECT_EQ(0, base_->AssociateSendChannel(channel_1, channel_2)); EXPECT_EQ(0, base_->AssociateSendChannel(channel_2, channel_1)); voe::SharedData* shared_data = static_cast( static_cast(voe_)); voe::ChannelOwner reference = shared_data->channel_manager() .GetChannel(channel_1); EXPECT_EQ(0, base_->DeleteChannel(channel_1)); // Make sure that the only use of the channel-to-delete is |reference| // at this point. EXPECT_EQ(1, reference.use_count()); reference = shared_data->channel_manager().GetChannel(channel_2); EXPECT_EQ(0, base_->DeleteChannel(channel_2)); EXPECT_EQ(1, reference.use_count()); } TEST_F(VoEBaseTest, GetVersion) { char v1[1024] = {75}; base_->GetVersion(v1); std::string v2 = VoiceEngine::GetVersionString() + "\n"; EXPECT_EQ(v2, v1); } } // namespace webrtc