New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 754441 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
not working at Google anymore
Closed: Sep 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Bug



Sign in to add a comment

--gtest_also_run_disabled_tests seems to crash the test launcher sometimes

Project Member Reported by nick@chromium.org, Aug 10 2017

Issue description

Repro steps:
OS: Windows 

1. Build a debug base_unittests (I originally noticed this with content_browsertests, so you could use any target -- it seems like it's a test launcher issue).

2. Find a test that is DISABLED_, and that will result in test failure when run. On my system RegistryTest.DISABLED_Wow64RedirectedFromNative fits this bill. You could also just write your own.

3. Run this disabled test:

  out\d\base_unittests --gtest_filter=RegistryTest.DISABLED_Wow64RedirectedFromNative --gtest_also_run_disabled_tests

4. The test runs, but the test launcher process crashes while printing output:

>	issue_debug_notification	C++
 	__acrt_report_runtime_error	C++
 	abort	C++
 	terminate	C++
 	__scrt_unhandled_exception_filter	C++
 	UnhandledExceptionFilter	Unknown
 	string "Enabling heap debug options\n"	Unknown
 	__C_specific_handler	Unknown
 	RtlpExecuteHandlerForException	Unknown
 	RtlDispatchException	Unknown
 	RtlRaiseException	Unknown
 	RaiseException	Unknown
 	_CxxThrowException	C++
 	std::_Xout_of_range	C++
 	std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, base::TestResultsTracker::CodeLocation, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, base::TestResultsTracker::CodeLocation> > >::at	C++
 	base::TestResultsTracker::PrintTests<std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > > >	C++
 	base::TestResultsTracker::PrintSummaryOfCurrentIteration	C++
 	base::TestLauncher::OnTestIterationFinished	C++
 	base::TestLauncher::OnTestFinished	C++
 	base::`anonymous namespace'::ProcessTestResults	C++
 	base::`anonymous namespace'::GTestCallback	C++
 	base::internal::FunctorTraits<void (*)(const base::(anonymous namespace)::GTestCallbackState &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), void>::Invoke<const base::(anonymous namespace)::GTestCallbackState &,int,const base::TimeDelta &,bool,const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &>	C++
 	base::internal::InvokeHelper<false, void>::MakeItSo<void (*const &)(const base::(anonymous namespace)::GTestCallbackState &, int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),const base::(anonymous namespace)::GTestCallbackState &,int,const base::TimeDelta &,bool,const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &>	C++
 	base::internal::Invoker<base::internal::BindState<void (*)(const base::(anonymous namespace)::GTestCallbackState &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::(anonymous namespace)::GTestCallbackState>, void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &)>::RunImpl<void (*const &)(const base::(anonymous namespace)::GTestCallbackState &, int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),const std::tuple<base::(anonymous namespace)::GTestCallbackState> &,0>	C++
 	base::internal::Invoker<base::internal::BindState<void (*)(const base::(anonymous namespace)::GTestCallbackState &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::(anonymous namespace)::GTestCallbackState>, void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &)>::Run	C++
 	base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating>::Run	C++
 	base::TestLauncher::OnLaunchTestProcessFinished	C++
 	base::internal::FunctorTraits<void (base::TestLauncher::*)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), void>::Invoke<base::TestLauncher *,const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating> &,int,const base::TimeDelta &,bool,const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &>	C++
 	base::internal::InvokeHelper<false, void>::MakeItSo<void (base::TestLauncher::*const &)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::TestLauncher *,const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating> &,int,const base::TimeDelta &,bool,const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &>	C++
 	base::internal::Invoker<base::internal::BindState<void (base::TestLauncher::*)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::UnretainedWrapper<base::TestLauncher>, base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating> >, void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &)>::RunImpl<void (base::TestLauncher::*const &)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),const std::tuple<base::internal::UnretainedWrapper<base::TestLauncher>,base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating> > &,0,1>	C++
 	base::internal::Invoker<base::internal::BindState<void (base::TestLauncher::*)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::UnretainedWrapper<base::TestLauncher>, base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating> >, void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &)>::Run	C++
 	base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating>::Run	C++
 	base::`anonymous namespace'::RunCallback	C++
 	base::internal::FunctorTraits<void (*)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), void>::Invoke<base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating>,int,base::TimeDelta,bool,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >	C++
 	base::internal::InvokeHelper<false, void>::MakeItSo<void (*)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating>,int,base::TimeDelta,bool,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >	C++
 	base::internal::Invoker<base::internal::BindState<void (*)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating>, int, base::TimeDelta, bool, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void ()>::RunImpl<void (*)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),std::tuple<base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > &),base::internal::CopyMode::Copyable,base::internal::RepeatMode::Repeating>,int,base::TimeDelta,bool,std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,0,1,2,3,4>	C++
 	base::internal::Invoker<base::internal::BindState<void (*)(const base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating> &, int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::Callback<void (int, const base::TimeDelta &, bool, const std::basic_string<char, std::char_traits<char>, std::allocator<char> > &), base::internal::CopyMode::Copyable, base::internal::RepeatMode::Repeating>, int, base::TimeDelta, bool, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, void ()>::RunOnce	C++
 	base::Callback<void (), base::internal::CopyMode::MoveOnly, base::internal::RepeatMode::Once>::Run	C++
 	base::debug::TaskAnnotator::RunTask	C++
 	base::MessageLoop::RunTask	C++
 	base::MessageLoop::DeferOrRunPendingTask	C++
 	base::MessageLoop::DoWork	C++
 	base::MessagePumpForIO::DoRunLoop	C++
 	base::MessagePumpWin::Run	C++
 	base::MessageLoop::Run	C++
 	base::RunLoop::Run	C++
 	base::TestLauncher::Run	C++
 	base::`anonymous namespace'::LaunchUnitTestsInternal	C++
 	base::LaunchUnitTests	C++
 	main	C++



 

Comment 1 by nick@chromium.org, Aug 10 2017

It looks like this is a regression due to https://chromium.googlesource.com/chromium/src/+/9b7f56db14ce378798d654102f54af85f70b1dc6%5E%21/#F1.

Removing the call to TestNameWithoutDisabledPrefix() from TestResultsTracker::AddTestLocation seems to fix the problem.
Project Member

Comment 3 by bugdroid1@chromium.org, Sep 19 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/ee31d1d4c67d2523443f9d309050c0aadbd2dcbc

commit ee31d1d4c67d2523443f9d309050c0aadbd2dcbc
Author: Nick Carter <nick@chromium.org>
Date: Tue Sep 19 00:10:59 2017

Fix test launcher crash when parsing the output of a failed, DISABLED test.

An earlier refactor of this code appears to have stripped out the DISABLED
prefix when building into the |test_locations_| map, but when that
map is queried, the DISABLED prefix was still present in the keys.
This caused a crash, at least in Windows debug builds it did.

TBR=seanmccullough@chromium.org

Bug:  754441 
Change-Id: Ie78294dfeb7369c3ad9573a2017a29e5e3787708
Reviewed-on: https://chromium-review.googlesource.com/611139
Reviewed-by: Nick Carter <nick@chromium.org>
Commit-Queue: Nick Carter <nick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#502726}
[modify] https://crrev.com/ee31d1d4c67d2523443f9d309050c0aadbd2dcbc/base/test/launcher/test_results_tracker.cc

Cc: -serg...@chromium.org

Comment 5 by nick@chromium.org, Sep 19 2017

Status: Fixed (was: Started)

Sign in to add a comment