Suppressed all voe_auto_test standard suite bugs and introduced a flag for excluding timing-dependent tests.

Also Suppressed FakeMediaProcess errors (bug 898) and took out a test and suppressed general errors (bug 332). Lastly, fixed memory leak in misc test.

BUG=898, 332
TEST=Ran voe_auto_test with repeat=10 through the whole standard suite, under valgrind. Ran without valgrind. Tested that the extended and standard tests still start and are reachable from the menu.

Review URL: https://webrtc-codereview.appspot.com/855009

git-svn-id: http://webrtc.googlecode.com/svn/trunk@2898 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
phoglund@webrtc.org 2012-10-10 15:41:03 +00:00
parent fafb0bf38b
commit ff33bdd9d7
11 changed files with 247 additions and 54 deletions

View File

@ -10,8 +10,10 @@
#include "gtest/gtest.h"
int RunInAutomatedMode(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
void InitializeGoogleTest(int* argc, char** argv) {
testing::InitGoogleTest(argc, argv);
}
int RunInAutomatedMode() {
return RUN_ALL_TESTS();
}

View File

@ -11,6 +11,7 @@
#ifndef SRC_VOICE_ENGINE_MAIN_TEST_AUTO_TEST_AUTOMATED_MODE_H_
#define SRC_VOICE_ENGINE_MAIN_TEST_AUTO_TEST_AUTOMATED_MODE_H_
int RunInAutomatedMode(int argc, char** argv);
void InitializeGoogleTest(int* argc, char** argv);
int RunInAutomatedMode();
#endif // SRC_VOICE_ENGINE_MAIN_TEST_AUTO_TEST_AUTOMATED_MODE_H_

View File

@ -15,22 +15,22 @@
#include "common_types.h"
#include "engine_configurations.h"
#include "voe_audio_processing.h"
#include "voe_base.h"
#include "voe_call_report.h"
#include "voe_codec.h"
#include "voe_dtmf.h"
#include "voe_encryption.h"
#include "voe_errors.h"
#include "voe_external_media.h"
#include "voe_file.h"
#include "voe_hardware.h"
#include "voe_neteq_stats.h"
#include "voe_network.h"
#include "voe_rtp_rtcp.h"
#include "voe_test_defines.h"
#include "voe_video_sync.h"
#include "voe_volume_control.h"
#include "voice_engine/include/voe_audio_processing.h"
#include "voice_engine/include/voe_base.h"
#include "voice_engine/include/voe_call_report.h"
#include "voice_engine/include/voe_codec.h"
#include "voice_engine/include/voe_dtmf.h"
#include "voice_engine/include/voe_encryption.h"
#include "voice_engine/include/voe_errors.h"
#include "voice_engine/include/voe_external_media.h"
#include "voice_engine/include/voe_file.h"
#include "voice_engine/include/voe_hardware.h"
#include "voice_engine/include/voe_neteq_stats.h"
#include "voice_engine/include/voe_network.h"
#include "voice_engine/include/voe_rtp_rtcp.h"
#include "voice_engine/include/voe_video_sync.h"
#include "voice_engine/include/voe_volume_control.h"
#include "voice_engine/test/auto_test/voe_test_defines.h"
// TODO(qhogpat): Remove these undefs once the clashing macros are gone.
#undef TEST

View File

@ -8,8 +8,10 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include "after_streaming_fixture.h"
#include "testsupport/fileutils.h"
#include "voice_engine/test/auto_test/fixtures/after_streaming_fixture.h"
#include "voice_engine/test/auto_test/voe_standard_test.h"
#include "test/testsupport/fileutils.h"
class FileTest : public AfterStreamingFixture {
protected:
@ -24,6 +26,11 @@ class FileTest : public AfterStreamingFixture {
};
TEST_F(FileTest, ManualRecordToFileForThreeSecondsAndPlayback) {
if (!FLAGS_include_timing_dependent_tests) {
TEST_LOG("Skipping test - running in slow execution environment.../n");
return;
}
SwitchToManualMicrophone();
std::string recording_filename =

View File

@ -11,6 +11,7 @@
#include "voice_engine/test/auto_test/fakes/fake_external_transport.h"
#include "voice_engine/test/auto_test/fixtures/after_streaming_fixture.h"
#include "voice_engine/test/auto_test/voe_test_interface.h"
#include "voice_engine/test/auto_test/voe_standard_test.h"
#include "voice_engine/include/mock/mock_voe_connection_observer.h"
#include "voice_engine/include/mock/mock_voe_observer.h"
@ -143,6 +144,11 @@ TEST_F(NetworkTest, DoesNotCallDeRegisteredObserver) {
}
TEST_F(NetworkTest, DeadOrAliveObserverSeesAliveMessagesIfEnabled) {
if (!FLAGS_include_timing_dependent_tests) {
TEST_LOG("Skipping test - running in slow execution environment.../n");
return;
}
webrtc::MockVoeConnectionObserver mock_observer;
EXPECT_EQ(0, voe_network_->RegisterDeadOrAliveObserver(
channel_, mock_observer));
@ -158,6 +164,11 @@ TEST_F(NetworkTest, DeadOrAliveObserverSeesAliveMessagesIfEnabled) {
}
TEST_F(NetworkTest, DeadOrAliveObserverSeesDeadMessagesIfEnabled) {
if (!FLAGS_include_timing_dependent_tests) {
TEST_LOG("Skipping test - running in slow execution environment.../n");
return;
}
// "When do you see them?" - "All the time!"
webrtc::MockVoeConnectionObserver mock_observer;
EXPECT_EQ(0, voe_network_->RegisterDeadOrAliveObserver(

View File

@ -8,9 +8,9 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include "after_streaming_fixture.h"
#include "voe_standard_test.h"
#include "testsupport/fileutils.h"
#include "test/testsupport/fileutils.h"
#include "voice_engine/test/auto_test/fixtures/after_streaming_fixture.h"
#include "voice_engine/test/auto_test/voe_standard_test.h"
class TestRtpObserver : public webrtc::VoERTPObserver {
public:
@ -139,6 +139,11 @@ void RtcpAppHandler::Reset() {
}
TEST_F(RtpRtcpTest, RemoteRtcpCnameHasPropagatedToRemoteSide) {
if (!FLAGS_include_timing_dependent_tests) {
TEST_LOG("Skipping test - running in slow execution environment.../n");
return;
}
// We need to sleep a bit here for the name to propagate. For instance,
// 200 milliseconds is not enough, so we'll go with one second here.
Sleep(1000);

View File

@ -8,7 +8,9 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include "before_initialization_fixture.h"
#include "voice_engine/test/auto_test/fixtures/before_initialization_fixture.h"
#include <cstdlib>
class VoeBaseMiscTest : public BeforeInitializationFixture {
};
@ -21,6 +23,7 @@ TEST_F(VoeBaseMiscTest, MaxNumChannelsIs32) {
TEST_F(VoeBaseMiscTest, GetVersionPrintsSomeUsefulInformation) {
char char_buffer[1024];
memset(char_buffer, 0, sizeof(char_buffer));
EXPECT_EQ(0, voe_base_->GetVersion(char_buffer));
EXPECT_THAT(char_buffer, ContainsRegex("VoiceEngine"));
}

View File

@ -8,37 +8,27 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "engine_configurations.h"
#if defined(_WIN32)
#include <conio.h> // Exists only on windows.
#include <tchar.h>
#endif
#include "voice_engine/test/auto_test/voe_standard_test.h"
#if defined (_ENABLE_VISUAL_LEAK_DETECTOR_) && defined(_DEBUG) && \
defined(_WIN32) && !defined(_INSTRUMENTATION_TESTING_)
#include "vld.h"
#endif
#include <stdio.h>
#include <string.h>
#include "system_wrappers/interface/critical_section_wrapper.h"
#include "engine_configurations.h"
#include "system_wrappers/interface/event_wrapper.h"
#include "system_wrappers/interface/thread_wrapper.h"
#include "voice_engine/voice_engine_defines.h"
#include "voice_engine/test/auto_test/automated_mode.h"
#ifdef _TEST_NETEQ_STATS_
#include "voice_engine/include/voe_neteq_stats.h"
#endif
#include "voice_engine/test/auto_test/automated_mode.h"
#include "voice_engine/test/auto_test/voe_cpu_test.h"
#include "voice_engine/test/auto_test/voe_extended_test.h"
#include "voice_engine/test/auto_test/voe_stress_test.h"
#include "voice_engine/test/auto_test/voe_unit_test.h"
#include "voice_engine/voice_engine_defines.h"
DEFINE_bool(include_timing_dependent_tests, true,
"If true, we will include tests / parts of tests that are known "
"to break in slow execution environments (such as valgrind).");
DEFINE_bool(automated, false,
"If true, we'll run the automated tests we have in noninteractive "
"mode.");
using namespace webrtc;
@ -535,7 +525,7 @@ int run_auto_test(TestType test_type, ExtendedSelection ext_selection) {
}
} // namespace voetest
int RunInManualMode(int argc, char** argv) {
int RunInManualMode() {
using namespace voetest;
SubAPIManager api_manager;
@ -587,7 +577,7 @@ int RunInManualMode(int argc, char** argv) {
TEST_LOG("\n\n+++ Running standard tests +++\n\n");
// Currently, all googletest-rewritten tests are in the "automated" suite.
return RunInAutomatedMode(argc, argv);
return RunInAutomatedMode();
}
// Function that can be called from other entry functions.
@ -600,12 +590,15 @@ int RunInManualMode(int argc, char** argv) {
#if !defined(WEBRTC_IOS)
int main(int argc, char** argv) {
if (argc > 1 && std::string(argv[1]) == "--automated") {
// This function is defined in automated_mode.cc to avoid macro clashes
// with googletest (for instance the ASSERT_TRUE macro).
return RunInAutomatedMode(argc, argv);
// This function and RunInAutomatedMode is defined in automated_mode.cc
// to avoid macro clashes with googletest (for instance ASSERT_TRUE).
InitializeGoogleTest(&argc, argv);
google::ParseCommandLineFlags(&argc, &argv, true);
if (FLAGS_automated) {
return RunInAutomatedMode();
}
return RunInManualMode(argc, argv);
return RunInManualMode();
}
#endif //#if !defined(WEBRTC_IOS)

View File

@ -14,6 +14,7 @@
#include <stdio.h>
#include <string>
#include "gflags/gflags.h"
#include "resource_manager.h"
#include "voe_audio_processing.h"
#include "voe_base.h"
@ -60,6 +61,8 @@ class VoENetEqStats;
extern char mobileLogMsg[640];
#endif
DECLARE_bool(include_timing_dependent_tests);
namespace voetest {
class SubAPIManager {

View File

@ -18,6 +18,7 @@
'<(webrtc_root)/test/test.gyp:test_support',
'<(DEPTH)/testing/gtest.gyp:gtest',
'<(DEPTH)/testing/gmock.gyp:gmock',
'<(DEPTH)/third_party/google-gflags/google-gflags.gyp:google-gflags',
'<(webrtc_root)/test/libtest/libtest.gyp:libtest',
],
'include_dirs': [

View File

@ -218,6 +218,171 @@
fun:StartThread
}
{
bug_898_1
Memcheck:Uninitialized
...
fun:_ZN16FakeMediaProcess7ProcessEiN6webrtc15ProcessingTypesEPsiib
...
fun:_ZN6webrtc21AudioDeviceLinuxPulse17PlayThreadProcessEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse14PlayThreadFuncEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_898_2
Memcheck:Uninitialized
...
fun:_ZN16FakeMediaProcess7ProcessEiN6webrtc15ProcessingTypesEPsiib
...
fun:_ZN6webrtc21AudioDeviceLinuxPulse16RecThreadProcessEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse13RecThreadFuncEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_1
Memcheck:Uninitialized
...
fun:_ZN6webrtc11VoEBaseImpl16NeedMorePlayDataEjhhjPvRj
fun:_ZN6webrtc17AudioDeviceBuffer18RequestPlayoutDataEj
fun:_ZN6webrtc21AudioDeviceLinuxPulse17PlayThreadProcessEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse14PlayThreadFuncEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_2
Memcheck:Unaddressable
fun:memcpy@@GLIBC_2.14
fun:_ZN6webrtc21AudioDeviceLinuxPulse16ReadRecordedDataEPKvm
fun:_ZN6webrtc21AudioDeviceLinuxPulse16RecThreadProcessEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse13RecThreadFuncEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_3
Memcheck:Uninitialized
fun:_ZN6webrtc11RTCPUtility21RTCPParseCommonHeaderEPKhS2_RNS0_16RTCPCommonHeaderE
...
fun:_ZN6webrtc12RTCPReceiver10HandleSDESERNS_11RTCPUtility12RTCPParserV2E
fun:_ZN6webrtc12RTCPReceiver18IncomingRTCPPacketERNS_8RTCPHelp21RTCPPacketInformationEPNS_11RTCPUtility12RTCPParserV2E
fun:_ZN6webrtc17ModuleRtpRtcpImpl14IncomingPacketEPKht
fun:_ZN6webrtc3voe7Channel18IncomingRTCPPacketEPKaiPKct
fun:_ZN6webrtc16UdpTransportImpl20IncomingRTCPFunctionEPKaiPKNS_13SocketAddressE
fun:_ZN6webrtc16UdpTransportImpl20IncomingRTCPCallbackEPvPKaiPKNS_13SocketAddressE
fun:_ZN6webrtc14UdpSocketPosix11HasIncomingEv
fun:_ZN6webrtc25UdpSocketManagerPosixImpl7ProcessEv
fun:_ZN6webrtc25UdpSocketManagerPosixImpl3RunEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_4
Memcheck:Uninitialized
...
fun:_ZN6webrtc3voe10AudioLevel12ComputeLevelERKNS_10AudioFrameE
fun:_ZN6webrtc3voe11OutputMixer28DoOperationsOnCombinedSignalEv
fun:_ZN6webrtc11VoEBaseImpl16NeedMorePlayDataEjhhjPvRj
fun:_ZN6webrtc17AudioDeviceBuffer18RequestPlayoutDataEj
fun:_ZN6webrtc21AudioDeviceLinuxPulse17PlayThreadProcessEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse14PlayThreadFuncEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_5
Memcheck:Uninitialized
fun:WebRtcSpl_UpBy2ShortToInt
fun:WebRtcSpl_Resample8khzTo22khz
fun:_ZN6webrtc9Resampler4PushEPKsiPsiRi
fun:_ZN6webrtc3voe16RemixAndResampleERKNS_10AudioFrameEPNS_9ResamplerEPS1_
fun:_ZN6webrtc3voe11OutputMixer13GetMixedAudioEiiPNS_10AudioFrameE
fun:_ZN6webrtc11VoEBaseImpl16NeedMorePlayDataEjhhjPvRj
fun:_ZN6webrtc17AudioDeviceBuffer18RequestPlayoutDataEj
fun:_ZN6webrtc21AudioDeviceLinuxPulse17PlayThreadProcessEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse14PlayThreadFuncEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_6
Memcheck:Param
socketcall.sendto(msg)
obj:/lib/x86_64-linux-gnu/libpthread-2.15.so
fun:_ZN6webrtc14UdpSocketPosix6SendToEPKaiRKNS_13SocketAddressE
fun:_ZN6webrtc16UdpTransportImpl10SendPacketEiPKvi
...
fun:_ZN6webrtc21AudioDeviceLinuxPulse16ReadRecordedDataEPKvm
fun:_ZN6webrtc21AudioDeviceLinuxPulse16RecThreadProcessEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse13RecThreadFuncEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_7
Memcheck:Param
socketcall.sendto(msg)
obj:/lib/x86_64-linux-gnu/libpthread-2.15.so
fun:_ZN6webrtc14UdpSocketPosix6SendToEPKaiRKNS_13SocketAddressE
fun:_ZN6webrtc16UdpTransportImpl14SendRTCPPacketEiPKvi
fun:_ZN6webrtc3voe7Channel14SendRTCPPacketEiPKvi
fun:_ZN6webrtc10RTCPSender13SendToNetworkEPKht
fun:_ZN6webrtc10RTCPSender8SendRTCPEjiPKtbm
fun:_ZN6webrtc17ModuleRtpRtcpImpl7ProcessEv
fun:_ZN6webrtc17ProcessThreadImpl7ProcessEv
fun:_ZN6webrtc17ProcessThreadImpl3RunEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_8
Memcheck:Uninitialized
fun:linear_to_ulaw
fun:WebRtcG711_EncodeU
fun:_ZN6webrtc7ACMPCMU14InternalEncodeEPhPs
fun:_ZN6webrtc15ACMGenericCodec10EncodeSafeEPhPsPjPNS_21WebRtcACMEncodingTypeE
fun:_ZN6webrtc15ACMGenericCodec6EncodeEPhPsPjPNS_21WebRtcACMEncodingTypeE
fun:_ZN6webrtc21AudioCodingModuleImpl7ProcessEv
fun:_ZN6webrtc3voe7Channel13EncodeAndSendEv
fun:_ZN6webrtc3voe13TransmitMixer13EncodeAndSendEv
fun:_ZN6webrtc11VoEBaseImpl23RecordedDataIsAvailableEPKvjhhjjijRj
fun:_ZN6webrtc17AudioDeviceBuffer19DeliverRecordedDataEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse19ProcessRecordedDataEPajj
fun:_ZN6webrtc21AudioDeviceLinuxPulse16ReadRecordedDataEPKvm
fun:_ZN6webrtc21AudioDeviceLinuxPulse16RecThreadProcessEv
fun:_ZN6webrtc21AudioDeviceLinuxPulse13RecThreadFuncEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_332_9
Memcheck:Uninitialized
...
fun:_ZN6webrtc12RTCPReceiver18IncomingRTCPPacketERNS_8RTCPHelp21RTCPPacketInformationEPNS_11RTCPUtility12RTCPParserV2E
fun:_ZN6webrtc17ModuleRtpRtcpImpl14IncomingPacketEPKht
fun:_ZN6webrtc3voe7Channel18IncomingRTCPPacketEPKaiPKct
fun:_ZN6webrtc16UdpTransportImpl20IncomingRTCPFunctionEPKaiPKNS_13SocketAddressE
fun:_ZN6webrtc16UdpTransportImpl20IncomingRTCPCallbackEPvPKaiPKNS_13SocketAddressE
fun:_ZN6webrtc14UdpSocketPosix11HasIncomingEv
fun:_ZN6webrtc25UdpSocketManagerPosixImpl7ProcessEv
fun:_ZN6webrtc25UdpSocketManagerPosixImpl3RunEPv
fun:_ZN6webrtc11ThreadPosix3RunEv
fun:StartThread
}
{
bug_891
Memcheck:Unaddressable
@ -238,3 +403,5 @@
fun:_ZN6webrtc5Trace3AddENS_10TraceLevelENS_11TraceModuleEiPKcz
...
}