TEST_F(ReporterTest, ShutdownImmediatelyAfterTriggerWhileKeepAliveTimeoutIsScheduledShouldSucceed) { processNetworkResponse(BSON("ok" << 1)); auto keepAliveTimeoutWhen = getExecutor().now() + reporter->getKeepAliveInterval(); ASSERT_EQUALS(keepAliveTimeoutWhen, reporter->getKeepAliveTimeoutWhen_forTest()); ASSERT_TRUE(reporter->isActive()); auto until = keepAliveTimeoutWhen - reporter->getKeepAliveInterval() / 2; runUntil(until); ASSERT_OK(reporter->trigger()); // '_keepAliveTimeoutWhen' is reset by trigger() not by the canceled callback. ASSERT_EQUALS(Date_t(), reporter->getKeepAliveTimeoutWhen_forTest()); ASSERT_TRUE(reporter->isActive()); auto net = getNet(); net->enterNetwork(); ASSERT_TRUE(net->hasReadyRequests()); net->exitNetwork(); reporter->shutdown(); net->enterNetwork(); ASSERT_FALSE(net->hasReadyRequests()); // Executor should invoke reporter callback with a ErrorCodes::CallbackCanceled status. net->runReadyNetworkOperations(); net->exitNetwork(); ASSERT_EQUALS(ErrorCodes::CallbackCanceled, reporter->join()); assertReporterDone(); }
executor::RemoteCommandRequest AbstractOplogFetcherTest::processNetworkResponse( executor::RemoteCommandResponse response, bool expectReadyRequestsAfterProcessing) { auto net = getNet(); executor::NetworkInterfaceMock::InNetworkGuard guard(net); unittest::log() << "scheduling response."; auto request = net->scheduleSuccessfulResponse(response); unittest::log() << "running network ops."; net->runReadyNetworkOperations(); unittest::log() << "checking for more requests"; ASSERT_EQUALS(expectReadyRequestsAfterProcessing, net->hasReadyRequests()); unittest::log() << "returning consumed request"; return request; }