1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_standard_test.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13945d9699698c681546bd6dc0bcf45984ef656cbdhenrik.lundin@webrtc.org#include <assert.h> 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <string.h> 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/engine_configurations.h" 18471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/system_wrappers/interface/event_wrapper.h" 19471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/include/voe_neteq_stats.h" 20471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/automated_mode.h" 21471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_cpu_test.h" 22471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_stress_test.h" 23471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/test/auto_test/voe_test_defines.h" 24471ae72f18e7b23a96b245dbd508386fe139449cpbos@webrtc.org#include "webrtc/voice_engine/voice_engine_defines.h" 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgDEFINE_bool(include_timing_dependent_tests, true, 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "If true, we will include tests / parts of tests that are known " 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "to break in slow execution environments (such as valgrind)."); 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgDEFINE_bool(automated, false, 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "If true, we'll run the automated tests we have in noninteractive " 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "mode."); 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgusing namespace webrtc; 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace voetest { 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint dummy = 0; // Dummy used in different functions to avoid warnings 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid SubAPIManager::DisplayStatus() const { 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Supported sub APIs:\n\n"); 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_base) 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Base\n"); 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_codec) 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Codec\n"); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_dtmf) 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Dtmf\n"); 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_externalMedia) 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" ExternalMedia\n"); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_file) 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" File\n"); 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_hardware) 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Hardware\n"); 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_netEqStats) 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" NetEqStats\n"); 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_network) 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Network\n"); 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_rtp_rtcp) 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" RTP_RTCP\n"); 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_videoSync) 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" VideoSync\n"); 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_volumeControl) 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" VolumeControl\n"); 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (_apm) 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" AudioProcessing\n"); 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ANL(); 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Excluded sub APIs:\n\n"); 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_base) 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Base\n"); 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_codec) 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Codec\n"); 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_dtmf) 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Dtmf\n"); 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_externalMedia) 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" ExternamMedia\n"); 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_file) 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" File\n"); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_hardware) 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Hardware\n"); 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_netEqStats) 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" NetEqStats\n"); 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_network) 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" Network\n"); 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_rtp_rtcp) 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" RTP_RTCP\n"); 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_videoSync) 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" VideoSync\n"); 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_volumeControl) 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" VolumeControl\n"); 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!_apm) 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG(" AudioProcessing\n"); 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ANL(); 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoETestManager::VoETestManager() 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org : initialized_(false), 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voice_engine_(NULL), 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_base_(0), 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_codec_(0), 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_dtmf_(0), 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_xmedia_(0), 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_file_(0), 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_hardware_(0), 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_network_(0), 1048510750bf2847dcdca26d914974c6d51d1e311a7pbos@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_neteq_stats_(NULL), 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_rtp_rtcp_(0), 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_vsync_(0), 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_volume_control_(0), 1100de0049a4e555f347cab027c2fddd32e7f916ed3minyue@webrtc.org voe_apm_(0) { 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 113b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgVoETestManager::~VoETestManager() { 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool VoETestManager::Init() { 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (initialized_) 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (VoiceEngine::SetTraceFile(NULL) != -1) { 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // should not be possible to call a Trace method before the VoE is 122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // created 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nError at line: %i (VoiceEngine::SetTraceFile()" 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "should fail)!\n", __LINE__); 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 128945d9699698c681546bd6dc0bcf45984ef656cbdhenrik.lundin@webrtc.org voice_engine_ = VoiceEngine::Create(); 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!voice_engine_) { 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Failed to create VoiceEngine\n"); 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return false; 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return true; 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid VoETestManager::GetInterfaces() { 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voice_engine_) { 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_base_ = VoEBase::GetInterface(voice_engine_); 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_codec_ = VoECodec::GetInterface(voice_engine_); 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_volume_control_ = VoEVolumeControl::GetInterface(voice_engine_); 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_dtmf_ = VoEDtmf::GetInterface(voice_engine_); 143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_rtp_rtcp_ = VoERTP_RTCP::GetInterface(voice_engine_); 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_apm_ = VoEAudioProcessing::GetInterface(voice_engine_); 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_network_ = VoENetwork::GetInterface(voice_engine_); 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_file_ = VoEFile::GetInterface(voice_engine_); 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _TEST_VIDEO_SYNC_ 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_vsync_ = VoEVideoSync::GetInterface(voice_engine_); 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_hardware_ = VoEHardware::GetInterface(voice_engine_); 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Set the audio layer to use in all tests 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_hardware_) { 153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int res = voe_hardware_->SetAudioDeviceLayer(TESTED_AUDIO_LAYER); 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (res < 0) { 155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\nERROR: failed to set audio layer to use in " 156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "testing\n"); 157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\nAudio layer %d will be used in testing\n", 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TESTED_AUDIO_LAYER); 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _TEST_XMEDIA_ 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_xmedia_ = VoEExternalMedia::GetInterface(voice_engine_); 164b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 1658510750bf2847dcdca26d914974c6d51d1e311a7pbos@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_neteq_stats_ = VoENetEqStats::GetInterface(voice_engine_); 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 171b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint VoETestManager::ReleaseInterfaces() { 172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool releaseOK(true); 173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_base_) { 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_base_->Release(); 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_base_ = NULL; 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_codec_) { 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_codec_->Release(); 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_codec_ = NULL; 181b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 182b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_volume_control_) { 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_volume_control_->Release(); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_volume_control_ = NULL; 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_dtmf_) { 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_dtmf_->Release(); 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_dtmf_ = NULL; 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_rtp_rtcp_) { 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_rtp_rtcp_->Release(); 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_rtp_rtcp_ = NULL; 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_apm_) { 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_apm_->Release(); 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_apm_ = NULL; 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_network_) { 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_network_->Release(); 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_network_ = NULL; 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_file_) { 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_file_->Release(); 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_file_ = NULL; 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _TEST_VIDEO_SYNC_ 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_vsync_) { 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_vsync_->Release(); 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_vsync_ = NULL; 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_hardware_) { 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_hardware_->Release(); 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_hardware_ = NULL; 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef _TEST_XMEDIA_ 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_xmedia_) { 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_xmedia_->Release(); 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_xmedia_ = NULL; 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 2228510750bf2847dcdca26d914974c6d51d1e311a7pbos@webrtc.org#ifdef WEBRTC_VOICE_ENGINE_NETEQ_STATS_API 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (voe_neteq_stats_) { 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_neteq_stats_->Release(); 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voe_neteq_stats_ = NULL; 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (false == VoiceEngine::Delete(voice_engine_)) { 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n\nVoiceEngine::Delete() failed. \n"); 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org releaseOK = false; 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (VoiceEngine::SetTraceFile(NULL) != -1) { 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\nError at line: %i (VoiceEngine::SetTraceFile()" 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "should fail)!\n", __LINE__); 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (releaseOK == true) ? 0 : -1; 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2419a95ac2a317e31e0f866b17f17b79013d72e2536solenberg@webrtc.orgint run_auto_test(TestType test_type) { 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(test_type != Standard); 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SubAPIManager api_manager; 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org api_manager.DisplayStatus(); 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //////////////////////////////////// 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Create VoiceEngine and sub API:s 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org voetest::VoETestManager test_manager; 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (!test_manager.Init()) { 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return -1; 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org test_manager.GetInterfaces(); 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2569a95ac2a317e31e0f866b17f17b79013d72e2536solenberg@webrtc.org int result = -1; 2579a95ac2a317e31e0f866b17f17b79013d72e2536solenberg@webrtc.org if (test_type == Stress) { 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoEStressTest stressTest(test_manager); 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org result = stressTest.DoTest(); 260b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else if (test_type == CPU) { 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VoECpuTest cpuTest(test_manager); 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org result = cpuTest.DoTest(); 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Should never end up here 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org assert(false); 266b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 267b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ////////////////// 269b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Release/Delete 270b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int release_ok = test_manager.ReleaseInterfaces(); 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 273b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if ((0 == result) && (release_ok != -1)) { 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n\n*** All tests passed *** \n\n"); 275b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } else { 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n\n*** Test failed! *** \n"); 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 278b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 279b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 280b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 2813b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace voetest 282b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 283b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint RunInManualMode() { 284b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org using namespace voetest; 285b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 286b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org SubAPIManager api_manager; 287b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org api_manager.DisplayStatus(); 288b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 289b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("----------------------------\n"); 290b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("Select type of test\n\n"); 291b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" (0) Quit\n"); 292b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" (1) Standard test\n"); 2939a95ac2a317e31e0f866b17f17b79013d72e2536solenberg@webrtc.org printf(" (2) [OBSOLETE: Extended test(s)...]\n"); 294b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" (3) Stress test(s)...\n"); 295f6c4fc37636a466cc1f8f11bfee9ad42c0d05473solenberg@webrtc.org printf(" (4) [OBSOLETE: Unit test(s)...]\n"); 296b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf(" (5) CPU & memory reference test [Windows]...\n"); 297b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org printf("\n: "); 298b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 299b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int selection(0); 300b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org dummy = scanf("%d", &selection); 301b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 302b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TestType test_type = Invalid; 303b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org switch (selection) { 304b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 0: 305b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 306b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 1: 307b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org test_type = Standard; 308b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 309b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 2: 310b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 311b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 3: 312b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org test_type = Stress; 313b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 314b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 4: 315b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 316b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org case 5: 317b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org test_type = CPU; 318b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org break; 319b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org default: 320b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("Invalid selection!\n"); 321b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return 0; 322b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 323b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 324b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (test_type == Standard) { 325b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org TEST_LOG("\n\n+++ Running standard tests +++\n\n"); 326b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 327b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Currently, all googletest-rewritten tests are in the "automated" suite. 328b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return RunInAutomatedMode(); 329b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 330b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 331b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Function that can be called from other entry functions. 3329a95ac2a317e31e0f866b17f17b79013d72e2536solenberg@webrtc.org return run_auto_test(test_type); 333b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 334b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 335b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 336b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// main 337b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ---------------------------------------------------------------------------- 338b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 339b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if !defined(WEBRTC_IOS) 340b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint main(int argc, char** argv) { 341b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // This function and RunInAutomatedMode is defined in automated_mode.cc 342b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // to avoid macro clashes with googletest (for instance ASSERT_TRUE). 343b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org InitializeGoogleTest(&argc, argv); 344f33a674b21b3adb9d6b253a2986f81e2893373dakjellander@webrtc.org // AllowCommandLineParsing allows us to ignore flags passed on to us by 345f33a674b21b3adb9d6b253a2986f81e2893373dakjellander@webrtc.org // Chromium build bots without having to explicitly disable them. 346f33a674b21b3adb9d6b253a2986f81e2893373dakjellander@webrtc.org google::AllowCommandLineReparsing(); 347b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org google::ParseCommandLineFlags(&argc, &argv, true); 348b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 349b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (FLAGS_automated) { 350b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return RunInAutomatedMode(); 351b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 352b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 353b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return RunInManualMode(); 354b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 355b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif //#if !defined(WEBRTC_IOS) 356