blob: 55f9634a837b200d00228915f8cc79ba7e3b8e58 [file] [log] [blame]
andrew@webrtc.orgf0a90c32013-03-05 01:12:49 +00001/*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "webrtc/voice_engine/include/voe_base.h"
12
pbos@webrtc.org956aa7e2013-05-21 13:52:32 +000013#include "webrtc/modules/audio_processing/include/audio_processing.h"
kwibergac9f8762016-09-30 22:29:43 -070014#include "webrtc/test/gtest.h"
Minyue2013aec2015-05-13 14:14:42 +020015#include "webrtc/voice_engine/channel_manager.h"
16#include "webrtc/voice_engine/shared_data.h"
Jelena Marusic46bd31b2015-04-30 10:57:10 +020017#include "webrtc/voice_engine/voice_engine_fixture.h"
Minyue2013aec2015-05-13 14:14:42 +020018#include "webrtc/voice_engine/voice_engine_impl.h"
andrew@webrtc.orgf0a90c32013-03-05 01:12:49 +000019
20namespace webrtc {
21
Jelena Marusic0b154452015-05-04 09:55:59 +020022class VoEBaseTest : public VoiceEngineFixture {};
andrew@webrtc.orgf0a90c32013-03-05 01:12:49 +000023
Jelena Marusic0b154452015-05-04 09:55:59 +020024TEST_F(VoEBaseTest, InitWithExternalAudioDevice) {
peaha9cc40b2017-06-29 08:32:09 -070025 EXPECT_EQ(0, base_->Init(&adm_, apm_.get()));
Jelena Marusic06b08af2015-04-21 11:39:57 +020026 EXPECT_EQ(0, base_->LastError());
27}
28
Jelena Marusic0b154452015-05-04 09:55:59 +020029TEST_F(VoEBaseTest, CreateChannelBeforeInitShouldFail) {
Jelena Marusic06b08af2015-04-21 11:39:57 +020030 int channelID = base_->CreateChannel();
Jelena Marusic46bd31b2015-04-30 10:57:10 +020031 EXPECT_EQ(channelID, -1);
Jelena Marusic06b08af2015-04-21 11:39:57 +020032}
33
Jelena Marusic0b154452015-05-04 09:55:59 +020034TEST_F(VoEBaseTest, CreateChannelAfterInit) {
peaha9cc40b2017-06-29 08:32:09 -070035 EXPECT_EQ(0, base_->Init(&adm_, apm_.get(), nullptr));
Jelena Marusic06b08af2015-04-21 11:39:57 +020036 int channelID = base_->CreateChannel();
Jelena Marusic46bd31b2015-04-30 10:57:10 +020037 EXPECT_NE(channelID, -1);
Jelena Marusic06b08af2015-04-21 11:39:57 +020038 EXPECT_EQ(0, base_->DeleteChannel(channelID));
andrew@webrtc.orgf0a90c32013-03-05 01:12:49 +000039}
40
Minyue2013aec2015-05-13 14:14:42 +020041TEST_F(VoEBaseTest, AssociateSendChannel) {
peaha9cc40b2017-06-29 08:32:09 -070042 EXPECT_EQ(0, base_->Init(&adm_, apm_.get()));
Minyue2013aec2015-05-13 14:14:42 +020043
44 const int channel_1 = base_->CreateChannel();
45
46 // Associating with a channel that does not exist should fail.
47 EXPECT_EQ(-1, base_->AssociateSendChannel(channel_1, channel_1 + 1));
48
49 const int channel_2 = base_->CreateChannel();
50
51 // Let the two channels associate with each other. This is not a normal use
52 // case. Actually, circular association should be avoided in practice. This
53 // is just to test that no crash is caused.
54 EXPECT_EQ(0, base_->AssociateSendChannel(channel_1, channel_2));
55 EXPECT_EQ(0, base_->AssociateSendChannel(channel_2, channel_1));
56
57 voe::SharedData* shared_data = static_cast<voe::SharedData*>(
58 static_cast<VoiceEngineImpl*>(voe_));
59 voe::ChannelOwner reference = shared_data->channel_manager()
60 .GetChannel(channel_1);
61 EXPECT_EQ(0, base_->DeleteChannel(channel_1));
62 // Make sure that the only use of the channel-to-delete is |reference|
63 // at this point.
64 EXPECT_EQ(1, reference.use_count());
65
66 reference = shared_data->channel_manager().GetChannel(channel_2);
67 EXPECT_EQ(0, base_->DeleteChannel(channel_2));
68 EXPECT_EQ(1, reference.use_count());
69}
70
solenberg2515af22015-12-02 06:19:36 -080071TEST_F(VoEBaseTest, GetVersion) {
72 char v1[1024] = {75};
73 base_->GetVersion(v1);
74 std::string v2 = VoiceEngine::GetVersionString() + "\n";
75 EXPECT_EQ(v2, v1);
76}
andrew@webrtc.orgf0a90c32013-03-05 01:12:49 +000077} // namespace webrtc