summaryrefslogtreecommitdiff
path: root/src/mongo/db/process_health/fault_state_machine_test.cpp
diff options
context:
space:
mode:
authorKshitij Gupta <kshitij.gupta@mongodb.com>2021-12-13 21:03:13 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-12-13 21:30:20 +0000
commit907d0bff8a62b6a2c7360ed96b2d4a780bfde936 (patch)
treea4066b6126ba0822baf1512cc94cd70a8376fcc8 /src/mongo/db/process_health/fault_state_machine_test.cpp
parent09d330def86f4467559cebbf0e91ecf038c296e6 (diff)
downloadmongo-907d0bff8a62b6a2c7360ed96b2d4a780bfde936.tar.gz
SERVER-59382: Enforce non-critical facets not entering ActiveFault state
Diffstat (limited to 'src/mongo/db/process_health/fault_state_machine_test.cpp')
-rw-r--r--src/mongo/db/process_health/fault_state_machine_test.cpp57
1 files changed, 43 insertions, 14 deletions
diff --git a/src/mongo/db/process_health/fault_state_machine_test.cpp b/src/mongo/db/process_health/fault_state_machine_test.cpp
index c1d3c5efc59..8a4b639d576 100644
--- a/src/mongo/db/process_health/fault_state_machine_test.cpp
+++ b/src/mongo/db/process_health/fault_state_machine_test.cpp
@@ -214,10 +214,6 @@ TEST_F(FaultManagerTest, OneFacetIsResolved) {
DEATH_TEST_F(FaultManagerTest, TransitionsToActiveFaultAfterTimeoutFromTransientFault, "Fatal") {
RAIIServerParameterControllerForTest _controller{"featureFlagHealthMonitoring", true};
auto faultFacetType = FaultFacetType::kMock1;
- auto config = test::getConfigWithDisabledPeriodicChecks();
- auto activeFaultDuration = Milliseconds(100);
- config->setActiveFaultDurationForTests(activeFaultDuration);
- resetManager(std::move(config));
registerMockHealthObserver(faultFacetType, [] { return 1.1; });
auto initialHealthCheckFuture = manager().startPeriodicHealthChecks();
@@ -227,47 +223,80 @@ DEATH_TEST_F(FaultManagerTest, TransitionsToActiveFaultAfterTimeoutFromTransient
manager().acceptTest(HealthCheckStatus(faultFacetType, 1.0, "error"));
ASSERT(manager().getFaultState() == FaultState::kTransientFault);
- advanceTime(activeFaultDuration);
+ advanceTime(Seconds(kActiveFaultDurationSecs));
waitForTransitionIntoState(FaultState::kActiveFault);
}
-DEATH_TEST_F(FaultManagerTest, TransitionsToActiveFaultAfterTimeoutFromStartupCheck, "Fatal") {
+TEST_F(FaultManagerTest,
+ NonCriticalFacetDoesNotTransitionToActiveFaultAfterTimeoutFromTransientFault) {
RAIIServerParameterControllerForTest _controller{"featureFlagHealthMonitoring", true};
auto faultFacetType = FaultFacetType::kMock1;
auto config = test::getConfigWithDisabledPeriodicChecks();
- auto activeFaultDuration = Milliseconds(100);
- config->setActiveFaultDurationForTests(activeFaultDuration);
+ config->setIntensityForType(faultFacetType, HealthObserverIntensityEnum::kNonCritical);
resetManager(std::move(config));
registerMockHealthObserver(faultFacetType, [] { return 1.1; });
auto initialHealthCheckFuture = manager().startPeriodicHealthChecks();
+ manager().acceptTest(HealthCheckStatus(faultFacetType));
+ ASSERT(manager().getFaultState() == FaultState::kOk);
+
+ manager().acceptTest(HealthCheckStatus(faultFacetType, 1.0, "error"));
+ ASSERT(manager().getFaultState() == FaultState::kTransientFault);
+
+ advanceTime(Seconds(kActiveFaultDurationSecs));
+ // Should be enough time to move to Active fault if we were going to crash.
+ sleepFor(Seconds(1));
+ ASSERT(manager().getFaultState() == FaultState::kTransientFault);
+}
+
+DEATH_TEST_F(FaultManagerTest, TransitionsToActiveFaultAfterTimeoutFromStartupCheck, "Fatal") {
+ RAIIServerParameterControllerForTest _controller{"featureFlagHealthMonitoring", true};
+ auto faultFacetType = FaultFacetType::kMock1;
+
+ registerMockHealthObserver(faultFacetType, [] { return 1.1; });
+ auto initialHealthCheckFuture = manager().startPeriodicHealthChecks();
manager().acceptTest(HealthCheckStatus(faultFacetType, 1.0, "error"));
ASSERT(manager().getFaultState() == FaultState::kStartupCheck);
- advanceTime(activeFaultDuration);
+ advanceTime(Seconds(kActiveFaultDurationSecs));
waitForTransitionIntoState(FaultState::kActiveFault);
}
-TEST_F(FaultManagerTest, DoesNotTransitionToActiveFaultIfResolved) {
+TEST_F(FaultManagerTest,
+ NonCriticalFacetDoesNotTransitionToActiveFaultAfterTimeoutFromStartupCheck) {
RAIIServerParameterControllerForTest _controller{"featureFlagHealthMonitoring", true};
auto faultFacetType = FaultFacetType::kMock1;
auto config = test::getConfigWithDisabledPeriodicChecks();
- auto activeFaultDuration = Milliseconds(100);
- config->setActiveFaultDurationForTests(activeFaultDuration);
+ config->setIntensityForType(faultFacetType, HealthObserverIntensityEnum::kNonCritical);
resetManager(std::move(config));
registerMockHealthObserver(faultFacetType, [] { return 1.1; });
auto initialHealthCheckFuture = manager().startPeriodicHealthChecks();
+ manager().acceptTest(HealthCheckStatus(faultFacetType, 1.0, "error"));
+ ASSERT(manager().getFaultState() == FaultState::kStartupCheck);
+
+ advanceTime(Seconds(kActiveFaultDurationSecs) * 10);
+ // Should be enough time to move to Active fault if we were going to crash.
+ sleepFor(Seconds(1));
+ ASSERT(manager().getFaultState() == FaultState::kStartupCheck);
+}
+
+TEST_F(FaultManagerTest, DoesNotTransitionToActiveFaultIfResolved) {
+ RAIIServerParameterControllerForTest _controller{"featureFlagHealthMonitoring", true};
+ auto faultFacetType = FaultFacetType::kMock1;
+
+ registerMockHealthObserver(faultFacetType, [] { return 1.1; });
+ auto initialHealthCheckFuture = manager().startPeriodicHealthChecks();
manager().acceptTest(HealthCheckStatus(faultFacetType));
ASSERT(manager().getFaultState() == FaultState::kOk);
manager().acceptTest(HealthCheckStatus(faultFacetType, 1.0, "error"));
ASSERT(manager().getFaultState() == FaultState::kTransientFault);
- advanceTime(activeFaultDuration / 2);
+ advanceTime(Seconds(kActiveFaultDurationSecs / 2));
manager().acceptTest(HealthCheckStatus(faultFacetType));
- advanceTime(activeFaultDuration);
+ advanceTime(Seconds(kActiveFaultDurationSecs));
ASSERT(manager().getFaultState() == FaultState::kOk);
}