Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(839)

Unified Diff: util/mach/exc_server_variants_test.cc

Issue 574753003: Add ExcServerSuccessfulReturnValue() and its test (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: clang-unformat Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « util/mach/exc_server_variants.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: util/mach/exc_server_variants_test.cc
diff --git a/util/mach/exc_server_variants_test.cc b/util/mach/exc_server_variants_test.cc
index c43b5621f2ef57f1b7410e89d97ce046bfbf9ee6..8ca041eb3891ffbc322cf7ea06bfbf7349da2e6b 100644
--- a/util/mach/exc_server_variants_test.cc
+++ b/util/mach/exc_server_variants_test.cc
@@ -556,17 +556,16 @@ TEST(ExcServerVariants, MockExceptionRaise) {
const exception_behavior_t kExceptionBehavior = EXCEPTION_DEFAULT;
EXPECT_CALL(server,
- MockCatchMachException(
- kExceptionBehavior,
- kServerLocalPort,
- kExceptionThreadPort,
- kExceptionTaskPort,
- kExceptionType,
- AreExceptionCodes(
- kTestExceptonCodes[0], kTestExceptonCodes[1]),
- Pointee(Eq(THREAD_STATE_NONE)),
- IsThreadStateCount(0u),
- IsThreadStateCount(0u)))
+ MockCatchMachException(kExceptionBehavior,
+ kServerLocalPort,
+ kExceptionThreadPort,
+ kExceptionTaskPort,
+ kExceptionType,
+ AreExceptionCodes(kTestExceptonCodes[0],
+ kTestExceptonCodes[1]),
+ Pointee(Eq(THREAD_STATE_NONE)),
+ IsThreadStateCount(0u),
+ IsThreadStateCount(0u)))
.WillOnce(Return(KERN_SUCCESS))
.RetiresOnSaturation();
@@ -595,18 +594,18 @@ TEST(ExcServerVariants, MockExceptionRaiseState) {
const exception_behavior_t kExceptionBehavior = EXCEPTION_STATE;
- EXPECT_CALL(server,
- MockCatchMachException(
- kExceptionBehavior,
- kServerLocalPort,
- MACH_PORT_NULL,
- MACH_PORT_NULL,
- kExceptionType,
- AreExceptionCodes(
- kTestExceptonCodes[0], kTestExceptonCodes[1]),
- Pointee(Eq(kThreadStateFlavor)),
- IsThreadStateCount(kThreadStateFlavorCount),
- IsThreadStateCount(arraysize(reply.new_state))))
+ EXPECT_CALL(
+ server,
+ MockCatchMachException(
+ kExceptionBehavior,
+ kServerLocalPort,
+ MACH_PORT_NULL,
+ MACH_PORT_NULL,
+ kExceptionType,
+ AreExceptionCodes(kTestExceptonCodes[0], kTestExceptonCodes[1]),
+ Pointee(Eq(kThreadStateFlavor)),
+ IsThreadStateCount(kThreadStateFlavorCount),
+ IsThreadStateCount(arraysize(reply.new_state))))
.WillOnce(Return(KERN_SUCCESS))
.RetiresOnSaturation();
@@ -638,18 +637,18 @@ TEST(ExcServerVariants, MockExceptionRaiseStateIdentity) {
const exception_behavior_t kExceptionBehavior = EXCEPTION_STATE_IDENTITY;
- EXPECT_CALL(server,
- MockCatchMachException(
- kExceptionBehavior,
- kServerLocalPort,
- kExceptionThreadPort,
- kExceptionTaskPort,
- kExceptionType,
- AreExceptionCodes(
- kTestExceptonCodes[0], kTestExceptonCodes[1]),
- Pointee(Eq(kThreadStateFlavor)),
- IsThreadStateCount(kThreadStateFlavorCount),
- IsThreadStateCount(arraysize(reply.new_state))))
+ EXPECT_CALL(
+ server,
+ MockCatchMachException(
+ kExceptionBehavior,
+ kServerLocalPort,
+ kExceptionThreadPort,
+ kExceptionTaskPort,
+ kExceptionType,
+ AreExceptionCodes(kTestExceptonCodes[0], kTestExceptonCodes[1]),
+ Pointee(Eq(kThreadStateFlavor)),
+ IsThreadStateCount(kThreadStateFlavorCount),
+ IsThreadStateCount(arraysize(reply.new_state))))
.WillOnce(Return(KERN_SUCCESS))
.RetiresOnSaturation();
@@ -681,17 +680,16 @@ TEST(ExcServerVariants, MockMachExceptionRaise) {
EXPECT_CALL(
server,
- MockCatchMachException(
- kExceptionBehavior,
- kServerLocalPort,
- kExceptionThreadPort,
- kExceptionTaskPort,
- kExceptionType,
- AreExceptionCodes(
- kTestMachExceptionCodes[0], kTestMachExceptionCodes[1]),
- Pointee(Eq(THREAD_STATE_NONE)),
- IsThreadStateCount(0u),
- IsThreadStateCount(0u)))
+ MockCatchMachException(kExceptionBehavior,
+ kServerLocalPort,
+ kExceptionThreadPort,
+ kExceptionTaskPort,
+ kExceptionType,
+ AreExceptionCodes(kTestMachExceptionCodes[0],
+ kTestMachExceptionCodes[1]),
+ Pointee(Eq(THREAD_STATE_NONE)),
+ IsThreadStateCount(0u),
+ IsThreadStateCount(0u)))
.WillOnce(Return(KERN_SUCCESS))
.RetiresOnSaturation();
@@ -723,17 +721,16 @@ TEST(ExcServerVariants, MockMachExceptionRaiseState) {
EXPECT_CALL(
server,
- MockCatchMachException(
- kExceptionBehavior,
- kServerLocalPort,
- MACH_PORT_NULL,
- MACH_PORT_NULL,
- kExceptionType,
- AreExceptionCodes(
- kTestMachExceptionCodes[0], kTestMachExceptionCodes[1]),
- Pointee(Eq(kThreadStateFlavor)),
- IsThreadStateCount(kThreadStateFlavorCount),
- IsThreadStateCount(arraysize(reply.new_state))))
+ MockCatchMachException(kExceptionBehavior,
+ kServerLocalPort,
+ MACH_PORT_NULL,
+ MACH_PORT_NULL,
+ kExceptionType,
+ AreExceptionCodes(kTestMachExceptionCodes[0],
+ kTestMachExceptionCodes[1]),
+ Pointee(Eq(kThreadStateFlavor)),
+ IsThreadStateCount(kThreadStateFlavorCount),
+ IsThreadStateCount(arraysize(reply.new_state))))
.WillOnce(Return(KERN_SUCCESS))
.RetiresOnSaturation();
@@ -768,17 +765,16 @@ TEST(ExcServerVariants, MockMachExceptionRaiseStateIdentity) {
EXPECT_CALL(
server,
- MockCatchMachException(
- kExceptionBehavior,
- kServerLocalPort,
- kExceptionThreadPort,
- kExceptionTaskPort,
- kExceptionType,
- AreExceptionCodes(
- kTestMachExceptionCodes[0], kTestMachExceptionCodes[1]),
- Pointee(Eq(kThreadStateFlavor)),
- IsThreadStateCount(kThreadStateFlavorCount),
- IsThreadStateCount(arraysize(reply.new_state))))
+ MockCatchMachException(kExceptionBehavior,
+ kServerLocalPort,
+ kExceptionThreadPort,
+ kExceptionTaskPort,
+ kExceptionType,
+ AreExceptionCodes(kTestMachExceptionCodes[0],
+ kTestMachExceptionCodes[1]),
+ Pointee(Eq(kThreadStateFlavor)),
+ IsThreadStateCount(kThreadStateFlavorCount),
+ IsThreadStateCount(arraysize(reply.new_state))))
.WillOnce(Return(KERN_SUCCESS))
.RetiresOnSaturation();
@@ -870,8 +866,7 @@ class TestExcServerVariants : public UniversalMachExcServer,
behavior_(behavior),
flavor_(flavor),
state_count_(state_count),
- handled_(false) {
- }
+ handled_(false) {}
// UniversalMachExcServer:
@@ -936,14 +931,7 @@ class TestExcServerVariants : public UniversalMachExcServer,
EXPECT_EQ(NULL, new_state);
}
- // Even for an EXC_CRASH handler, returning KERN_SUCCESS with a
- // state-carrying reply will cause the kernel to try to set a new thread
- // state, leading to a perceptible waste of time. Returning
- // MACH_RCV_PORT_DIED is the only way to suppress this behavior while also
- // preventing the kernel from looking for another (host-level) EXC_CRASH
- // handler. See 10.9.4 xnu-2422.110.17/osfmk/kern/exception.c
- // exception_triage().
- return has_state ? MACH_RCV_PORT_DIED : KERN_SUCCESS;
+ return ExcServerSuccessfulReturnValue(behavior, false);
}
private:
@@ -1057,18 +1045,18 @@ TEST(ExcServerVariants, ThreadStates) {
// Additionaly, the AVX state flavors are also not tested because they’re
// not available on all CPUs and OS versions.
#if defined(ARCH_CPU_X86)
- { x86_THREAD_STATE32, x86_THREAD_STATE32_COUNT },
- { x86_FLOAT_STATE32, x86_FLOAT_STATE32_COUNT },
- { x86_EXCEPTION_STATE32, x86_EXCEPTION_STATE32_COUNT },
+ {x86_THREAD_STATE32, x86_THREAD_STATE32_COUNT},
+ {x86_FLOAT_STATE32, x86_FLOAT_STATE32_COUNT},
+ {x86_EXCEPTION_STATE32, x86_EXCEPTION_STATE32_COUNT},
#endif
#if defined(ARCH_CPU_X86_64)
- { x86_THREAD_STATE64, x86_THREAD_STATE64_COUNT },
- { x86_FLOAT_STATE64, x86_FLOAT_STATE64_COUNT },
- { x86_EXCEPTION_STATE64, x86_EXCEPTION_STATE64_COUNT },
+ {x86_THREAD_STATE64, x86_THREAD_STATE64_COUNT},
+ {x86_FLOAT_STATE64, x86_FLOAT_STATE64_COUNT},
+ {x86_EXCEPTION_STATE64, x86_EXCEPTION_STATE64_COUNT},
#endif
- { x86_THREAD_STATE, x86_THREAD_STATE_COUNT },
- { x86_FLOAT_STATE, x86_FLOAT_STATE_COUNT },
- { x86_EXCEPTION_STATE, x86_EXCEPTION_STATE_COUNT },
+ {x86_THREAD_STATE, x86_THREAD_STATE_COUNT},
+ {x86_FLOAT_STATE, x86_FLOAT_STATE_COUNT},
+ {x86_EXCEPTION_STATE, x86_EXCEPTION_STATE_COUNT},
#else
#error Port this test to your CPU architecture.
#endif
@@ -1076,8 +1064,8 @@ TEST(ExcServerVariants, ThreadStates) {
for (size_t index = 0; index < arraysize(test_data); ++index) {
const TestData& test = test_data[index];
- SCOPED_TRACE(base::StringPrintf(
- "index %zu, flavor %d", index, test.flavor));
+ SCOPED_TRACE(
+ base::StringPrintf("index %zu, flavor %d", index, test.flavor));
TestExcServerVariants test_exc_server_variants(
MACH_EXCEPTION_CODES | EXCEPTION_STATE_IDENTITY,
@@ -1087,4 +1075,41 @@ TEST(ExcServerVariants, ThreadStates) {
}
}
+TEST(ExcServerVariants, ExcServerSuccessfulReturnValue) {
+ struct TestData {
+ exception_behavior_t behavior;
+ bool set_thread_state;
+ kern_return_t kr;
+ };
+ const TestData kTestData[] = {
+ {EXCEPTION_DEFAULT, false, KERN_SUCCESS},
+ {EXCEPTION_STATE, false, MACH_RCV_PORT_DIED},
+ {EXCEPTION_STATE_IDENTITY, false, MACH_RCV_PORT_DIED},
+ {kMachExceptionCodes | EXCEPTION_DEFAULT, false, KERN_SUCCESS},
+ {kMachExceptionCodes | EXCEPTION_STATE, false, MACH_RCV_PORT_DIED},
+ {kMachExceptionCodes | EXCEPTION_STATE_IDENTITY,
+ false,
+ MACH_RCV_PORT_DIED},
+ {EXCEPTION_DEFAULT, true, KERN_SUCCESS},
+ {EXCEPTION_STATE, true, KERN_SUCCESS},
+ {EXCEPTION_STATE_IDENTITY, true, KERN_SUCCESS},
+ {kMachExceptionCodes | EXCEPTION_DEFAULT, true, KERN_SUCCESS},
+ {kMachExceptionCodes | EXCEPTION_STATE, true, KERN_SUCCESS},
+ {kMachExceptionCodes | EXCEPTION_STATE_IDENTITY, true, KERN_SUCCESS},
+ };
+
+ for (size_t index = 0; index < arraysize(kTestData); ++index) {
+ const TestData& test_data = kTestData[index];
+ SCOPED_TRACE(
+ base::StringPrintf("index %zu, behavior %d, set_thread_state %s",
+ index,
+ test_data.behavior,
+ test_data.set_thread_state ? "true" : "false"));
+
+ EXPECT_EQ(test_data.kr,
+ ExcServerSuccessfulReturnValue(test_data.behavior,
+ test_data.set_thread_state));
+ }
+}
+
} // namespace
« no previous file with comments | « util/mach/exc_server_variants.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698