Chromium Code Reviews| Index: syzygy/integration_tests/instrument_integration_test.cc |
| diff --git a/syzygy/integration_tests/instrument_integration_test.cc b/syzygy/integration_tests/instrument_integration_test.cc |
| index c53f0e1160712a626b3c0fba14c9659358ca1178..1e91b424ad5c3fafa5eda79ab1e654b8081cc37c 100644 |
| --- a/syzygy/integration_tests/instrument_integration_test.cc |
| +++ b/syzygy/integration_tests/instrument_integration_test.cc |
| @@ -347,6 +347,11 @@ class TestingProfileGrinder : public grinder::grinders::ProfileGrinder { |
| using grinder::grinders::ProfileGrinder::parts_; |
| }; |
| +enum InstrumentationMode { |
| + SYZYGY, |
| + CLANG, |
| +}; |
| + |
| class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| public: |
| typedef testing::PELibUnitTest Super; |
| @@ -379,7 +384,7 @@ class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| base::FilePath abs_input_dll_path_ = |
| testing::GetExeRelativePath(testing::kIntegrationTestsDllName); |
| input_dll_path_ = testing::GetRelativePath(abs_input_dll_path_); |
| - output_dll_path_ = temp_dir_.Append(input_dll_path_.BaseName()); |
| + test_dll_path_ = temp_dir_.Append(input_dll_path_.BaseName()); |
|
Sébastien Marchand
2017/08/01 19:27:36
Don't set this here, as it'll be invalid for the C
njanevsk
2017/08/03 01:23:21
Done.
|
| // Initialize call_service output directory for produced trace files. |
| traces_dir_ = temp_dir_.Append(L"traces"); |
| @@ -420,18 +425,24 @@ class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| // Runs an instrumentation pass in the given mode and validates that the |
| // resulting output DLL loads. |
| - void EndToEndTest(const std::string& mode) { |
| - cmd_line_.AppendSwitchPath("input-image", input_dll_path_); |
| - cmd_line_.AppendSwitchPath("output-image", output_dll_path_); |
| - cmd_line_.AppendSwitchASCII("mode", mode); |
| - |
| - // Create the instrumented DLL. |
| - application::Application<instrument::InstrumentApp> app; |
| - ASSERT_NO_FATAL_FAILURE(ConfigureTestApp(&app)); |
| - ASSERT_EQ(0, app.Run()); |
| - |
| + void EndToEndTest(const std::string& mode, |
| + InstrumentationMode instrumentation_mode) { |
| + if (instrumentation_mode == SYZYGY) { |
| + cmd_line_.AppendSwitchPath("input-image", input_dll_path_); |
| + cmd_line_.AppendSwitchPath("output-image", test_dll_path_); |
| + cmd_line_.AppendSwitchASCII("mode", mode); |
| + |
| + // Create the instrumented DLL. |
| + application::Application<instrument::InstrumentApp> app; |
| + ASSERT_NO_FATAL_FAILURE(ConfigureTestApp(&app)); |
| + ASSERT_EQ(0, app.Run()); |
| + } else if (instrumentation_mode == CLANG) { |
|
Sébastien Marchand
2017/08/01 19:27:36
You don't need this yet as it's not instantiated.
njanevsk
2017/08/03 01:23:21
Done.
|
| + test_dll_path_ = |
| + testing::GetExeRelativePath(testing::kIntegrationTestsClangDllName); |
| + printf("%s\n", test_dll_path_.AsUTF8Unsafe().c_str()); |
|
Sébastien Marchand
2017/08/01 19:27:36
Remove the debugging code.
njanevsk
2017/08/03 01:23:21
Done.
|
| + } |
| // Validate that the test dll loads post instrumentation. |
| - ASSERT_NO_FATAL_FAILURE(LoadTestDll(output_dll_path_, &module_)); |
| + ASSERT_NO_FATAL_FAILURE(LoadTestDll(test_dll_path_, &module_)); |
| } |
| // Invoke a test function inside test_dll by addressing it with a test id. |
| @@ -453,7 +464,7 @@ class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| base::FilePath harness = testing::GetExeRelativePath(harness_name.c_str()); |
| base::CommandLine cmd_line(harness); |
| cmd_line.AppendSwitchASCII("test", base::StringPrintf("%d", test)); |
| - cmd_line.AppendSwitchPath("dll", output_dll_path_); |
| + cmd_line.AppendSwitchPath("dll", test_dll_path_); |
| if (expect_exception) |
| cmd_line.AppendSwitch("expect-exception"); |
| @@ -575,10 +586,12 @@ class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| } |
| } |
| - void EndToEndCheckTestDll() { |
| - // Validate that behavior is unchanged after instrumentation. |
| - EXPECT_EQ(0xfff80200, InvokeTestDllFunction(testing::kArrayComputation1)); |
| - EXPECT_EQ(0x00000200, InvokeTestDllFunction(testing::kArrayComputation2)); |
| + void EndToEndCheckTestDll(InstrumentationMode instrumentation_mode) { |
| + if (instrumentation_mode == SYZYGY) { |
|
Sébastien Marchand
2017/08/01 19:27:36
I don't sure that you need this check for now? You
njanevsk
2017/08/03 01:23:21
Done.
|
| + // Validate that behavior is unchanged after instrumentation. |
| + EXPECT_EQ(0xfff80200, InvokeTestDllFunction(testing::kArrayComputation1)); |
| + EXPECT_EQ(0x00000200, InvokeTestDllFunction(testing::kArrayComputation2)); |
| + } |
| } |
| bool AsanErrorCheck(testing::EndToEndTestId test, |
| @@ -617,7 +630,7 @@ class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| if (asan_error_count == 0 && i + 1 < max_tries) { |
| // If the module was unloaded and the test is retrying, then reload it. |
| if (unload) |
| - EXPECT_NO_FATAL_FAILURE(LoadTestDll(output_dll_path_, &module_)); |
| + EXPECT_NO_FATAL_FAILURE(LoadTestDll(test_dll_path_, &module_)); |
| continue; |
| } |
| @@ -880,8 +893,6 @@ class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| kAsanAccessViolationLog, kAsanHeapUseAfterFree); |
| } |
| - void AsanZebraHeapTest(bool enabled); |
|
Sébastien Marchand
2017/08/01 19:27:36
Don't remove this function.
njanevsk
2017/08/03 01:23:21
I haven't removed it. I moved it to the Parametriz
Sébastien Marchand
2017/08/03 18:12:59
Why just this one and not the other Asan*Test func
Sébastien Marchand
2017/08/03 20:44:31
Ha, I just realized that this depends on some thin
Sébastien Marchand
2017/08/03 20:46:03
(the body of the function or the tests, it just fe
|
| - |
| void BBEntryInvokeTestDll() { |
| EXPECT_EQ(42, InvokeTestDllFunction(testing::kBBEntryCallOnce)); |
| EXPECT_EQ(42, InvokeTestDllFunction(testing::kBBEntryCallTree)); |
| @@ -1179,6 +1190,53 @@ class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| FAIL() << "Didn't find GetMyRVA function entry."; |
| } |
| + // Stashes the current log-level before each test instance and restores it |
| + // after each test completes. |
| + testing::ScopedLogLevelSaver log_level_saver; |
| + |
| + // @name The application under test. |
| + // @{ |
| + TestApp test_app_; |
| + TestApp::Implementation& test_impl_; |
| + base::FilePath temp_dir_; |
| + base::FilePath stdin_path_; |
| + base::FilePath stdout_path_; |
| + base::FilePath stderr_path_; |
| + // @} |
| + |
| + // @name Command-line, parameters and outputs. |
| + // @{ |
| + base::CommandLine cmd_line_; |
| + base::FilePath input_dll_path_; |
| + base::FilePath test_dll_path_; |
| + base::FilePath traces_dir_; |
| + // @} |
| + |
| + // The test_dll module. |
| + testing::ScopedHMODULE module_; |
| + |
| + // Our call trace service process instance. |
| + testing::CallTraceService service_; |
| + |
| + // Decomposed image. |
| + pe::PEFile pe_image_; |
| + pe::ImageLayout image_layout_; |
| + block_graph::BlockGraph block_graph_; |
| + uint32_t get_my_rva_; |
| +}; |
| + |
| +class ParametrizedLenientInstrumentAppIntegrationTest |
| + : public LenientInstrumentAppIntegrationTest, |
| + public ::testing::WithParamInterface<InstrumentationMode> { |
| + public: |
| + void EndToEndTest(const std::string& mode) { |
| + LenientInstrumentAppIntegrationTest::EndToEndTest(mode, GetParam()); |
| + } |
| + void AsanZebraHeapTest(bool enabled); |
| + |
| + void EndToEndCheckTestDll() { |
| + LenientInstrumentAppIntegrationTest::EndToEndCheckTestDll(GetParam()); |
| + } |
| // Helper function to test the Asan symbolizer script. |
| // |
| // It starts by running a test with the '--minidump_on_failure' flag turned |
| @@ -1250,41 +1308,11 @@ class LenientInstrumentAppIntegrationTest : public testing::PELibUnitTest { |
| env->UnSetVar(::common::kSyzyAsanOptionsEnvVar); |
| } |
| +}; |
| - // Stashes the current log-level before each test instance and restores it |
| - // after each test completes. |
| - testing::ScopedLogLevelSaver log_level_saver; |
| - |
| - // @name The application under test. |
| - // @{ |
| - TestApp test_app_; |
| - TestApp::Implementation& test_impl_; |
| - base::FilePath temp_dir_; |
| - base::FilePath stdin_path_; |
| - base::FilePath stdout_path_; |
| - base::FilePath stderr_path_; |
| - // @} |
| - |
| - // @name Command-line, parameters and outputs. |
| - // @{ |
| - base::CommandLine cmd_line_; |
| - base::FilePath input_dll_path_; |
| - base::FilePath output_dll_path_; |
| - base::FilePath traces_dir_; |
| - // @} |
| - |
| - // The test_dll module. |
| - testing::ScopedHMODULE module_; |
| - |
| - // Our call trace service process instance. |
| - testing::CallTraceService service_; |
| +typedef testing::StrictMock<ParametrizedLenientInstrumentAppIntegrationTest> |
| + ParametrizedInstrumentAppIntegrationTest; |
| - // Decomposed image. |
| - pe::PEFile pe_image_; |
| - pe::ImageLayout image_layout_; |
| - block_graph::BlockGraph block_graph_; |
| - uint32_t get_my_rva_; |
| -}; |
| typedef testing::StrictMock<LenientInstrumentAppIntegrationTest> |
| InstrumentAppIntegrationTest; |
| @@ -1370,7 +1398,8 @@ void GetCallOffsets(const base::FilePath& image_path, |
| } |
| } |
| -void LenientInstrumentAppIntegrationTest::AsanZebraHeapTest(bool enabled) { |
| +void ParametrizedLenientInstrumentAppIntegrationTest::AsanZebraHeapTest( |
| + bool enabled) { |
| // Find the offset of the call we want to instrument. |
| static const char kTest1[] = |
| "testing::AsanReadPageAllocationTrailerBeforeFree"; |
| @@ -1407,7 +1436,7 @@ void LenientInstrumentAppIntegrationTest::AsanZebraHeapTest(bool enabled) { |
| } // namespace |
| -TEST_F(InstrumentAppIntegrationTest, AsanEndToEnd) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanEndToEnd) { |
| // Disable the heap checking as this is implies touching all the shadow bytes |
| // and this make those tests really slow. |
| cmd_line_.AppendSwitchASCII("asan-rtl-options", "--no_check_heap_on_failure"); |
| @@ -1417,7 +1446,7 @@ TEST_F(InstrumentAppIntegrationTest, AsanEndToEnd) { |
| ASSERT_NO_FATAL_FAILURE(CheckTestDllImportsRedirected()); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoLiveness) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanEndToEndNoLiveness) { |
| // Disable the heap checking as this is implies touching all the shadow bytes |
| // and this make those tests really slow. |
| cmd_line_.AppendSwitchASCII("asan-rtl-options", "--no_check_heap_on_failure"); |
| @@ -1427,7 +1456,8 @@ TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoLiveness) { |
| ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll()); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoRedundancyAnalysis) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanEndToEndNoRedundancyAnalysis) { |
| // Disable the heap checking as this is implies touching all the shadow bytes |
| // and this make those tests really slow. |
| cmd_line_.AppendSwitchASCII("asan-rtl-options", "--no_check_heap_on_failure"); |
| @@ -1437,7 +1467,8 @@ TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoRedundancyAnalysis) { |
| ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll()); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoFunctionInterceptors) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanEndToEndNoFunctionInterceptors) { |
| // Disable the heap checking as this is implies touching all the shadow bytes |
| // and this make those tests really slow. |
| cmd_line_.AppendSwitchASCII("asan-rtl-options", "--no_check_heap_on_failure"); |
| @@ -1447,7 +1478,7 @@ TEST_F(InstrumentAppIntegrationTest, AsanEndToEndNoFunctionInterceptors) { |
| ASSERT_NO_FATAL_FAILURE(AsanErrorCheckTestDll()); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanEndToEndWithRtlOptions) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanEndToEndWithRtlOptions) { |
| cmd_line_.AppendSwitchASCII( |
| "asan-rtl-options", |
| "--quarantine_size=20000000 --quarantine_block_size=1000000 " |
| @@ -1463,7 +1494,7 @@ TEST_F(InstrumentAppIntegrationTest, AsanEndToEndWithRtlOptions) { |
| ASSERT_EQ(1000000u, runtime->params().quarantine_block_size); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| AsanEndToEndWithRtlOptionsOverrideWithEnvironment) { |
| std::unique_ptr<base::Environment> env(base::Environment::Create()); |
| ASSERT_NE(env.get(), nullptr); |
| @@ -1489,7 +1520,7 @@ TEST_F(InstrumentAppIntegrationTest, |
| env->UnSetVar(::common::kSyzyAsanOptionsEnvVar); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, FullOptimizedAsanEndToEnd) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, FullOptimizedAsanEndToEnd) { |
| // Disable the heap checking as this implies touching all the shadow bytes |
| // and this make these tests really slow. |
| cmd_line_.AppendSwitchASCII("asan-rtl-options", "--no_check_heap_on_failure"); |
| @@ -1499,7 +1530,7 @@ TEST_F(InstrumentAppIntegrationTest, FullOptimizedAsanEndToEnd) { |
| ASSERT_NO_FATAL_FAILURE(AsanErrorCheckInterceptedFunctions()); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| AsanInvalidAccessWithCorruptAllocatedBlockHeader) { |
| ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); |
| ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| @@ -1508,7 +1539,8 @@ TEST_F(InstrumentAppIntegrationTest, |
| kAsanCorruptHeap, NULL); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanOverflowCallsCrashForException) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanOverflowCallsCrashForException) { |
| // Asan-detected violations go through CrashForException if it is available. |
| ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); |
| ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| @@ -1518,7 +1550,7 @@ TEST_F(InstrumentAppIntegrationTest, AsanOverflowCallsCrashForException) { |
| EXPECT_EQ(kExeCrashForExceptionExitCode, exit_code); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| AsanInvalidAccessWithCorruptAllocatedBlockTrailer) { |
| ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); |
| ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| @@ -1527,7 +1559,7 @@ TEST_F(InstrumentAppIntegrationTest, |
| kAsanCorruptHeap, NULL); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| AsanInvalidAccessWithCorruptFreedBlock) { |
| ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); |
| ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| @@ -1536,7 +1568,8 @@ TEST_F(InstrumentAppIntegrationTest, |
| NULL); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanCorruptBlockWithPageProtections) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanCorruptBlockWithPageProtections) { |
| ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); |
| ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| OutOfProcessAsanErrorCheckAndValidateLog( |
| @@ -1544,7 +1577,8 @@ TEST_F(InstrumentAppIntegrationTest, AsanCorruptBlockWithPageProtections) { |
| kAsanHeapUseAfterFree, kAsanCorruptHeap); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, SampledAllocationsAsanEndToEnd) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + SampledAllocationsAsanEndToEnd) { |
| cmd_line_.AppendSwitchASCII("asan-rtl-options", |
| "--allocation_guard_rate=0.5 " |
| "--no_check_heap_on_failure"); |
| @@ -1553,7 +1587,10 @@ TEST_F(InstrumentAppIntegrationTest, SampledAllocationsAsanEndToEnd) { |
| ASSERT_NO_FATAL_FAILURE(AsanErrorCheckSampledAllocations()); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanLargeBlockHeapEnabledTest) { |
| +// The following two tests are timing out when instrumented and run with Clang. |
|
Sébastien Marchand
2017/08/01 19:27:36
Remove this comment as you're not instantiating th
njanevsk
2017/08/03 01:23:21
Done.
|
| +// TODO(njanevsk): Check why the tests are timing out. |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanLargeBlockHeapEnabledTest) { |
| cmd_line_.AppendSwitchASCII("asan-rtl-options", |
| "--no_check_heap_on_failure " |
| "--quarantine_size=4000000 " |
| @@ -1563,7 +1600,8 @@ TEST_F(InstrumentAppIntegrationTest, AsanLargeBlockHeapEnabledTest) { |
| ASSERT_NO_FATAL_FAILURE(AsanLargeBlockHeapTests(true)); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanLargeBlockHeapDisabledTest) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanLargeBlockHeapDisabledTest) { |
| cmd_line_.AppendSwitchASCII("asan-rtl-options", |
| "--no_check_heap_on_failure " |
| "--disable_large_block_heap"); |
| @@ -1572,15 +1610,16 @@ TEST_F(InstrumentAppIntegrationTest, AsanLargeBlockHeapDisabledTest) { |
| ASSERT_NO_FATAL_FAILURE(AsanLargeBlockHeapTests(false)); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanZebraHeapDisabledTest) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanZebraHeapDisabledTest) { |
| AsanZebraHeapTest(false); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanZebraHeapEnabledTest) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanZebraHeapEnabledTest) { |
| AsanZebraHeapTest(true); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanSymbolizerTestAsanBufferOverflow) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanSymbolizerTestAsanBufferOverflow) { |
| AsanSymbolizerTest(testing::kAsanRead8BufferOverflow, |
| STRINGIFY(HEAP_BUFFER_OVERFLOW), |
| STRINGIFY(ASAN_READ_ACCESS), |
| @@ -1588,7 +1627,8 @@ TEST_F(InstrumentAppIntegrationTest, AsanSymbolizerTestAsanBufferOverflow) { |
| false); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanSymbolizerTestAsanBufferUnderflow) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanSymbolizerTestAsanBufferUnderflow) { |
| AsanSymbolizerTest(testing::kAsanWrite32BufferUnderflow, |
| STRINGIFY(HEAP_BUFFER_UNDERFLOW), |
| STRINGIFY(ASAN_WRITE_ACCESS), |
| @@ -1596,7 +1636,8 @@ TEST_F(InstrumentAppIntegrationTest, AsanSymbolizerTestAsanBufferUnderflow) { |
| false); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanSymbolizerTestAsanUseAfterFree) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanSymbolizerTestAsanUseAfterFree) { |
| AsanSymbolizerTest(testing::kAsanRead64UseAfterFree, |
| STRINGIFY(USE_AFTER_FREE), |
| STRINGIFY(ASAN_READ_ACCESS), |
| @@ -1604,7 +1645,8 @@ TEST_F(InstrumentAppIntegrationTest, AsanSymbolizerTestAsanUseAfterFree) { |
| false); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, AsanSymbolizerTestAsanCorruptBlock) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| + AsanSymbolizerTestAsanCorruptBlock) { |
| AsanSymbolizerTest(testing::kAsanCorruptBlock, |
| STRINGIFY(CORRUPT_BLOCK), |
| STRINGIFY(ASAN_UNKNOWN_ACCESS), |
| @@ -1612,7 +1654,7 @@ TEST_F(InstrumentAppIntegrationTest, AsanSymbolizerTestAsanCorruptBlock) { |
| false); |
| } |
| -TEST_F(InstrumentAppIntegrationTest, |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, |
| AsanSymbolizerTestAsanCorruptBlockInQuarantine) { |
| AsanSymbolizerTest(testing::kAsanCorruptBlockInQuarantine, |
| STRINGIFY(CORRUPT_BLOCK), |
| @@ -1622,7 +1664,7 @@ TEST_F(InstrumentAppIntegrationTest, |
| } |
| // These tests require corrupt heap checking to be enabled. |
| -TEST_F(InstrumentAppIntegrationTest, AsanNearNullptrAccess) { |
| +TEST_P(ParametrizedInstrumentAppIntegrationTest, AsanNearNullptrAccess) { |
| ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); |
| OutOfProcessAsanErrorCheckAndValidateLog( |
| @@ -1642,10 +1684,15 @@ TEST_F(InstrumentAppIntegrationTest, AsanNearNullptrAccess) { |
| kAsanHandlingException, kAsanNearNullptrAccessNoHeapCorruption); |
| } |
| +// Instantiate the test cases only with SYZYGY until some problems are fixed. |
| +INSTANTIATE_TEST_CASE_P(InstantiationName, |
| + ParametrizedInstrumentAppIntegrationTest, |
| + testing::Values(SYZYGY)); |
| + |
| TEST_F(InstrumentAppIntegrationTest, BBEntryEndToEnd) { |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("bbentry")); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("bbentry", SYZYGY)); |
|
Sébastien Marchand
2017/08/01 19:27:36
I'm not such a fan of having all these extra "SYZY
njanevsk
2017/08/03 01:23:21
Done.
|
| + ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll(SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(BBEntryInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| ASSERT_NO_FATAL_FAILURE(BBEntryCheckTestDll()); |
| @@ -1653,8 +1700,8 @@ TEST_F(InstrumentAppIntegrationTest, BBEntryEndToEnd) { |
| TEST_F(InstrumentAppIntegrationTest, BranchEndToEnd) { |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("branch")); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("branch", SYZYGY)); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll(SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(BBEntryInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(UnloadDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| @@ -1664,8 +1711,8 @@ TEST_F(InstrumentAppIntegrationTest, BranchEndToEnd) { |
| TEST_F(InstrumentAppIntegrationTest, BranchWithBufferingEndToEnd) { |
| cmd_line_.AppendSwitch("buffering"); |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("branch")); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("branch", SYZYGY)); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll(SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(BBEntryInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(UnloadDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| @@ -1675,8 +1722,8 @@ TEST_F(InstrumentAppIntegrationTest, BranchWithBufferingEndToEnd) { |
| TEST_F(InstrumentAppIntegrationTest, BranchWithSlotEndToEnd) { |
| cmd_line_.AppendSwitchASCII("fs-slot", "1"); |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("branch")); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("branch", SYZYGY)); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll(SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(BBEntryInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(UnloadDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| @@ -1687,8 +1734,8 @@ TEST_F(InstrumentAppIntegrationTest, BranchWithSlotAndBufferingEndToEnd) { |
| cmd_line_.AppendSwitch("buffering"); |
| cmd_line_.AppendSwitchASCII("fs-slot", "1"); |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("branch")); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("branch", SYZYGY)); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll(SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(BBEntryInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(UnloadDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| @@ -1696,15 +1743,15 @@ TEST_F(InstrumentAppIntegrationTest, BranchWithSlotAndBufferingEndToEnd) { |
| } |
| TEST_F(InstrumentAppIntegrationTest, CallTraceEndToEnd) { |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("calltrace")); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("calltrace", SYZYGY)); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll(SYZYGY)); |
| } |
| TEST_F(InstrumentAppIntegrationTest, CoverageEndToEnd) { |
| base::win::ScopedCOMInitializer scoped_com_initializer; |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("coverage")); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("coverage", SYZYGY)); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll(SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(CoverageInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| ASSERT_NO_FATAL_FAILURE(CoverageCheckTestDll()); |
| @@ -1715,8 +1762,8 @@ TEST_F(InstrumentAppIntegrationTest, BBEntryCoverageEndToEnd) { |
| // instrumentation. |
| base::win::ScopedCOMInitializer scoped_com_initializer; |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("bbentry")); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll()); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("bbentry", SYZYGY)); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndCheckTestDll(SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(CoverageInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| ASSERT_NO_FATAL_FAILURE(CoverageCheckTestDll()); |
| @@ -1724,7 +1771,7 @@ TEST_F(InstrumentAppIntegrationTest, BBEntryCoverageEndToEnd) { |
| TEST_F(InstrumentAppIntegrationTest, ProfileEndToEnd) { |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("profile")); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("profile", SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(ProfileInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(UnloadDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| @@ -1734,7 +1781,7 @@ TEST_F(InstrumentAppIntegrationTest, ProfileEndToEnd) { |
| TEST_F(InstrumentAppIntegrationTest, ProfileWithImportsEndToEnd) { |
| cmd_line_.AppendSwitch("instrument-imports"); |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("profile")); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("profile", SYZYGY)); |
| ASSERT_NO_FATAL_FAILURE(ProfileInvokeTestDll()); |
| ASSERT_NO_FATAL_FAILURE(UnloadDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |
| @@ -1743,7 +1790,7 @@ TEST_F(InstrumentAppIntegrationTest, ProfileWithImportsEndToEnd) { |
| TEST_F(InstrumentAppIntegrationTest, DeferredFreeTLS) { |
| ASSERT_NO_FATAL_FAILURE(StartService()); |
| - ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan")); |
| + ASSERT_NO_FATAL_FAILURE(EndToEndTest("asan", SYZYGY)); |
| ASSERT_EQ(0, InvokeTestDllFunction(testing::kAsanDeferredFreeTLS)); |
| ASSERT_NO_FATAL_FAILURE(UnloadDll()); |
| ASSERT_NO_FATAL_FAILURE(StopService()); |