| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #include "webrtc/voice_engine/test/auto_test/voe_standard_test.h" | 11 #include "webrtc/voice_engine/test/auto_test/voe_standard_test.h" |
| 12 | 12 |
| 13 #include <assert.h> | 13 #include <assert.h> |
| 14 #include <stdio.h> | 14 #include <stdio.h> |
| 15 #include <string.h> | 15 #include <string.h> |
| 16 | 16 |
| 17 #include "webrtc/system_wrappers/include/event_wrapper.h" | 17 #include "webrtc/system_wrappers/include/event_wrapper.h" |
| 18 #include "webrtc/typedefs.h" | 18 #include "webrtc/typedefs.h" |
| 19 #include "webrtc/voice_engine/include/voe_neteq_stats.h" | 19 #include "webrtc/voice_engine/include/voe_neteq_stats.h" |
| 20 #include "webrtc/voice_engine/test/auto_test/automated_mode.h" | 20 #include "webrtc/voice_engine/test/auto_test/automated_mode.h" |
| 21 #include "webrtc/voice_engine/test/auto_test/voe_stress_test.h" | |
| 22 #include "webrtc/voice_engine/test/auto_test/voe_test_defines.h" | 21 #include "webrtc/voice_engine/test/auto_test/voe_test_defines.h" |
| 23 #include "webrtc/voice_engine/voice_engine_defines.h" | 22 #include "webrtc/voice_engine/voice_engine_defines.h" |
| 24 | 23 |
| 25 DEFINE_bool(include_timing_dependent_tests, true, | 24 DEFINE_bool(include_timing_dependent_tests, true, |
| 26 "If true, we will include tests / parts of tests that are known " | 25 "If true, we will include tests / parts of tests that are known " |
| 27 "to break in slow execution environments (such as valgrind)."); | 26 "to break in slow execution environments (such as valgrind)."); |
| 28 DEFINE_bool(automated, false, | 27 DEFINE_bool(automated, false, |
| 29 "If true, we'll run the automated tests we have in noninteractive " | 28 "If true, we'll run the automated tests we have in noninteractive " |
| 30 "mode."); | 29 "mode."); |
| 31 | 30 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 if (!_rtp_rtcp) | 77 if (!_rtp_rtcp) |
| 79 TEST_LOG(" RTP_RTCP\n"); | 78 TEST_LOG(" RTP_RTCP\n"); |
| 80 if (!_videoSync) | 79 if (!_videoSync) |
| 81 TEST_LOG(" VideoSync\n"); | 80 TEST_LOG(" VideoSync\n"); |
| 82 if (!_volumeControl) | 81 if (!_volumeControl) |
| 83 TEST_LOG(" VolumeControl\n"); | 82 TEST_LOG(" VolumeControl\n"); |
| 84 if (!_apm) | 83 if (!_apm) |
| 85 TEST_LOG(" AudioProcessing\n"); | 84 TEST_LOG(" AudioProcessing\n"); |
| 86 ANL(); | 85 ANL(); |
| 87 } | 86 } |
| 88 | |
| 89 VoETestManager::VoETestManager() | |
| 90 : initialized_(false), | |
| 91 voice_engine_(NULL), | |
| 92 voe_base_(0), | |
| 93 voe_codec_(0), | |
| 94 voe_xmedia_(0), | |
| 95 voe_file_(0), | |
| 96 voe_hardware_(0), | |
| 97 voe_network_(0), | |
| 98 voe_neteq_stats_(NULL), | |
| 99 voe_rtp_rtcp_(0), | |
| 100 voe_vsync_(0), | |
| 101 voe_volume_control_(0), | |
| 102 voe_apm_(0) { | |
| 103 } | |
| 104 | |
| 105 VoETestManager::~VoETestManager() { | |
| 106 } | |
| 107 | |
| 108 bool VoETestManager::Init() { | |
| 109 if (initialized_) | |
| 110 return true; | |
| 111 | |
| 112 voice_engine_ = VoiceEngine::Create(); | |
| 113 if (!voice_engine_) { | |
| 114 TEST_LOG("Failed to create VoiceEngine\n"); | |
| 115 return false; | |
| 116 } | |
| 117 | |
| 118 return true; | |
| 119 } | |
| 120 | |
| 121 void VoETestManager::GetInterfaces() { | |
| 122 if (voice_engine_) { | |
| 123 voe_base_ = VoEBase::GetInterface(voice_engine_); | |
| 124 voe_codec_ = VoECodec::GetInterface(voice_engine_); | |
| 125 voe_volume_control_ = VoEVolumeControl::GetInterface(voice_engine_); | |
| 126 voe_rtp_rtcp_ = VoERTP_RTCP::GetInterface(voice_engine_); | |
| 127 voe_apm_ = VoEAudioProcessing::GetInterface(voice_engine_); | |
| 128 voe_network_ = VoENetwork::GetInterface(voice_engine_); | |
| 129 voe_file_ = VoEFile::GetInterface(voice_engine_); | |
| 130 #ifdef _TEST_VIDEO_SYNC_ | |
| 131 voe_vsync_ = VoEVideoSync::GetInterface(voice_engine_); | |
| 132 #endif | |
| 133 voe_hardware_ = VoEHardware::GetInterface(voice_engine_); | |
| 134 // Set the audio layer to use in all tests | |
| 135 if (voe_hardware_) { | |
| 136 int res = voe_hardware_->SetAudioDeviceLayer(TESTED_AUDIO_LAYER); | |
| 137 if (res < 0) { | |
| 138 printf("\nERROR: failed to set audio layer to use in " | |
| 139 "testing\n"); | |
| 140 } else { | |
| 141 printf("\nAudio layer %d will be used in testing\n", | |
| 142 TESTED_AUDIO_LAYER); | |
| 143 } | |
| 144 } | |
| 145 #ifdef _TEST_XMEDIA_ | |
| 146 voe_xmedia_ = VoEExternalMedia::GetInterface(voice_engine_); | |
| 147 #endif | |
| 148 voe_neteq_stats_ = VoENetEqStats::GetInterface(voice_engine_); | |
| 149 } | |
| 150 } | |
| 151 | |
| 152 int VoETestManager::ReleaseInterfaces() { | |
| 153 bool releaseOK(true); | |
| 154 | |
| 155 if (voe_base_) { | |
| 156 voe_base_->Release(); | |
| 157 voe_base_ = NULL; | |
| 158 } | |
| 159 if (voe_codec_) { | |
| 160 voe_codec_->Release(); | |
| 161 voe_codec_ = NULL; | |
| 162 } | |
| 163 if (voe_volume_control_) { | |
| 164 voe_volume_control_->Release(); | |
| 165 voe_volume_control_ = NULL; | |
| 166 } | |
| 167 if (voe_rtp_rtcp_) { | |
| 168 voe_rtp_rtcp_->Release(); | |
| 169 voe_rtp_rtcp_ = NULL; | |
| 170 } | |
| 171 if (voe_apm_) { | |
| 172 voe_apm_->Release(); | |
| 173 voe_apm_ = NULL; | |
| 174 } | |
| 175 if (voe_network_) { | |
| 176 voe_network_->Release(); | |
| 177 voe_network_ = NULL; | |
| 178 } | |
| 179 if (voe_file_) { | |
| 180 voe_file_->Release(); | |
| 181 voe_file_ = NULL; | |
| 182 } | |
| 183 #ifdef _TEST_VIDEO_SYNC_ | |
| 184 if (voe_vsync_) { | |
| 185 voe_vsync_->Release(); | |
| 186 voe_vsync_ = NULL; | |
| 187 } | |
| 188 #endif | |
| 189 if (voe_hardware_) { | |
| 190 voe_hardware_->Release(); | |
| 191 voe_hardware_ = NULL; | |
| 192 } | |
| 193 #ifdef _TEST_XMEDIA_ | |
| 194 if (voe_xmedia_) { | |
| 195 voe_xmedia_->Release(); | |
| 196 voe_xmedia_ = NULL; | |
| 197 } | |
| 198 #endif | |
| 199 if (voe_neteq_stats_) { | |
| 200 voe_neteq_stats_->Release(); | |
| 201 voe_neteq_stats_ = NULL; | |
| 202 } | |
| 203 if (false == VoiceEngine::Delete(voice_engine_)) { | |
| 204 TEST_LOG("\n\nVoiceEngine::Delete() failed. \n"); | |
| 205 releaseOK = false; | |
| 206 } | |
| 207 | |
| 208 return (releaseOK == true) ? 0 : -1; | |
| 209 } | |
| 210 | |
| 211 int run_auto_test(TestType test_type) { | |
| 212 assert(test_type != Standard); | |
| 213 | |
| 214 SubAPIManager api_manager; | |
| 215 api_manager.DisplayStatus(); | |
| 216 | |
| 217 //////////////////////////////////// | |
| 218 // Create VoiceEngine and sub API:s | |
| 219 | |
| 220 voetest::VoETestManager test_manager; | |
| 221 if (!test_manager.Init()) { | |
| 222 return -1; | |
| 223 } | |
| 224 test_manager.GetInterfaces(); | |
| 225 | |
| 226 int result = -1; | |
| 227 if (test_type == Stress) { | |
| 228 VoEStressTest stressTest(test_manager); | |
| 229 result = stressTest.DoTest(); | |
| 230 } else { | |
| 231 // Should never end up here | |
| 232 assert(false); | |
| 233 } | |
| 234 | |
| 235 ////////////////// | |
| 236 // Release/Delete | |
| 237 | |
| 238 int release_ok = test_manager.ReleaseInterfaces(); | |
| 239 | |
| 240 if ((0 == result) && (release_ok != -1)) { | |
| 241 TEST_LOG("\n\n*** All tests passed *** \n\n"); | |
| 242 } else { | |
| 243 TEST_LOG("\n\n*** Test failed! *** \n"); | |
| 244 } | |
| 245 | |
| 246 return 0; | |
| 247 } | |
| 248 } // namespace voetest | 87 } // namespace voetest |
| 249 | 88 |
| 250 int RunInManualMode() { | 89 int RunInManualMode() { |
| 251 using namespace voetest; | 90 using namespace voetest; |
| 252 | 91 |
| 253 SubAPIManager api_manager; | 92 SubAPIManager api_manager; |
| 254 api_manager.DisplayStatus(); | 93 api_manager.DisplayStatus(); |
| 255 | 94 |
| 256 printf("----------------------------\n"); | 95 printf("----------------------------\n"); |
| 257 printf("Select type of test\n\n"); | 96 printf("Select type of test\n\n"); |
| 258 printf(" (0) Quit\n"); | 97 printf(" (0) Quit\n"); |
| 259 printf(" (1) Standard test\n"); | 98 printf(" (1) Standard test\n"); |
| 260 printf(" (2) [OBSOLETE: Extended test(s)...]\n"); | |
| 261 printf(" (3) Stress test(s)...\n"); | |
| 262 printf(" (4) [OBSOLETE: Unit test(s)...]\n"); | |
| 263 printf("\n: "); | 99 printf("\n: "); |
| 264 | 100 |
| 265 int selection(0); | 101 int selection(0); |
| 266 dummy = scanf("%d", &selection); | 102 dummy = scanf("%d", &selection); |
| 267 | 103 |
| 268 TestType test_type = Invalid; | |
| 269 switch (selection) { | 104 switch (selection) { |
| 270 case 0: | 105 case 0: |
| 271 return 0; | 106 return 0; |
| 272 case 1: | 107 case 1: |
| 273 test_type = Standard; | 108 TEST_LOG("\n\n+++ Running standard tests +++\n\n"); |
| 274 break; | 109 // Currently, all googletest-rewritten tests are in the "automated" suite. |
| 275 case 2: | 110 return RunInAutomatedMode(); |
| 276 break; | |
| 277 case 3: | |
| 278 test_type = Stress; | |
| 279 break; | |
| 280 case 4: | |
| 281 break; | |
| 282 default: | 111 default: |
| 283 TEST_LOG("Invalid selection!\n"); | 112 TEST_LOG("Invalid selection!\n"); |
| 284 return 0; | 113 return 0; |
| 285 } | 114 } |
| 286 | |
| 287 if (test_type == Standard) { | |
| 288 TEST_LOG("\n\n+++ Running standard tests +++\n\n"); | |
| 289 | |
| 290 // Currently, all googletest-rewritten tests are in the "automated" suite. | |
| 291 return RunInAutomatedMode(); | |
| 292 } | |
| 293 | |
| 294 // Function that can be called from other entry functions. | |
| 295 return run_auto_test(test_type); | |
| 296 } | 115 } |
| 297 | 116 |
| 298 // ---------------------------------------------------------------------------- | 117 // ---------------------------------------------------------------------------- |
| 299 // main | 118 // main |
| 300 // ---------------------------------------------------------------------------- | 119 // ---------------------------------------------------------------------------- |
| 301 | 120 |
| 302 #if !defined(WEBRTC_IOS) | 121 #if !defined(WEBRTC_IOS) |
| 303 int main(int argc, char** argv) { | 122 int main(int argc, char** argv) { |
| 304 // This function and RunInAutomatedMode is defined in automated_mode.cc | 123 // This function and RunInAutomatedMode is defined in automated_mode.cc |
| 305 // to avoid macro clashes with googletest (for instance ASSERT_TRUE). | 124 // to avoid macro clashes with googletest (for instance ASSERT_TRUE). |
| 306 InitializeGoogleTest(&argc, argv); | 125 InitializeGoogleTest(&argc, argv); |
| 307 // AllowCommandLineParsing allows us to ignore flags passed on to us by | 126 // AllowCommandLineParsing allows us to ignore flags passed on to us by |
| 308 // Chromium build bots without having to explicitly disable them. | 127 // Chromium build bots without having to explicitly disable them. |
| 309 google::AllowCommandLineReparsing(); | 128 google::AllowCommandLineReparsing(); |
| 310 google::ParseCommandLineFlags(&argc, &argv, true); | 129 google::ParseCommandLineFlags(&argc, &argv, true); |
| 311 | 130 |
| 312 if (FLAGS_automated) { | 131 if (FLAGS_automated) { |
| 313 return RunInAutomatedMode(); | 132 return RunInAutomatedMode(); |
| 314 } | 133 } |
| 315 | 134 |
| 316 return RunInManualMode(); | 135 return RunInManualMode(); |
| 317 } | 136 } |
| 318 #endif //#if !defined(WEBRTC_IOS) | 137 #endif //#if !defined(WEBRTC_IOS) |
| OLD | NEW |