| 24 | namespace { |
| 25 | |
| 26 | TEST(RetryingUtilsTest, CallWithRetries_RetryDelays) { |
| 27 | std::vector<double> requested_delays; // requested delays in seconds |
| 28 | std::function<void(int64)> sleep = [&requested_delays](int64 delay) { |
| 29 | requested_delays.emplace_back(delay / 1000000.0); |
| 30 | }; |
| 31 | std::function<Status()> f = []() { return errors::Unavailable("Failed."); }; |
| 32 | |
| 33 | const auto& status = RetryingUtils::CallWithRetries( |
| 34 | f, sleep, RetryConfig(500000 /* init_delay_time_us */)); |
| 35 | EXPECT_EQ(errors::Code::ABORTED, status.code()); |
| 36 | EXPECT_TRUE(absl::StrContains( |
| 37 | status.error_message(), |
| 38 | "All 10 retry attempts failed. The last failure: Unavailable: Failed.")) |
| 39 | << status; |
| 40 | |
| 41 | EXPECT_EQ(10, requested_delays.size()); |
| 42 | EXPECT_NEAR(0.5, requested_delays[0], 1.0); |
| 43 | EXPECT_NEAR(1.0, requested_delays[1], 1.0); |
| 44 | EXPECT_NEAR(2.0, requested_delays[2], 1.0); |
| 45 | EXPECT_NEAR(4.0, requested_delays[3], 1.0); |
| 46 | EXPECT_NEAR(8.0, requested_delays[4], 1.0); |
| 47 | EXPECT_NEAR(16.0, requested_delays[5], 1.0); |
| 48 | |
| 49 | // All subsequent delays are capped at 32 seconds (plus jitter). |
| 50 | EXPECT_NEAR(32.0, requested_delays[6], 1.0); |
| 51 | EXPECT_NEAR(32.0, requested_delays[7], 1.0); |
| 52 | EXPECT_NEAR(32.0, requested_delays[8], 1.0); |
| 53 | EXPECT_NEAR(32.0, requested_delays[9], 1.0); |
| 54 | } |
| 55 | |
| 56 | TEST(RetryingUtilsTest, CallWithRetries_NotFoundIsNotRetried) { |
| 57 | std::vector<Status> results( |
nothing calls this directly
no test coverage detected