1818
1919import static com .google .common .truth .Truth .assertThat ;
2020import static java .time .Duration .ZERO ;
21+ import static java .time .Duration .ofSeconds ;
2122import static org .junit .Assert .assertThrows ;
2223
2324import com .google .cloud .storage .Backoff .BackoffDuration ;
@@ -83,15 +84,17 @@ public void simple() {
8384 assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffDuration .of (Duration .ofSeconds (57 )));
8485 assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffDuration .of (Duration .ofSeconds (57 )));
8586 assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffDuration .of (Duration .ofSeconds (57 )));
87+ assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffDuration .of (Duration .ofSeconds (57 )));
8688 assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffResults .EXHAUSTED );
8789 }
8890
8991 @ Test
90- public void happyPath () {
92+ public void backoffDuration_min_of_backoff_maxBackoff_remainingFromTimeout () {
9193 Backoff backoff = defaultBackoff ();
9294
9395 Duration elapsed = Duration .ofMinutes (6 ).plusSeconds (58 );
94- assertThat (backoff .nextBackoff (elapsed )).isEqualTo (BackoffResults .EXHAUSTED );
96+ assertThat (backoff .nextBackoff (elapsed )).isEqualTo (BackoffDuration .of (Duration .ofSeconds (2 )));
97+ assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffResults .EXHAUSTED );
9598 }
9699
97100 @ Test
@@ -116,7 +119,8 @@ public void resetWorks() {
116119 .setRetryDelayMultiplier (2.0 )
117120 .build ();
118121
119- assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffDuration .of (Duration .ofSeconds (2 )));
122+ assertThat (backoff .nextBackoff (Duration .ofSeconds (4 )))
123+ .isEqualTo (BackoffDuration .of (Duration .ofSeconds (2 )));
120124 assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffResults .EXHAUSTED );
121125 backoff .reset ();
122126 assertThat (backoff .nextBackoff (Duration .ofSeconds (10 ))).isEqualTo (BackoffResults .EXHAUSTED );
@@ -139,8 +143,14 @@ public void onceExhaustedStaysExhaustedUntilReset() {
139143 assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffDuration .of (Duration .ofSeconds (2 )));
140144 }
141145
146+ /**
147+ * If a next computed backoff would exceed the timeout, truncate the backoff to the amount of time
148+ * remaining until timeout.
149+ *
150+ * <p>This is primarily here to preserve behavior of {@link com.google.cloud.RetryHelper}.
151+ */
142152 @ Test
143- public void ifANextBackoffWouldExceedTheTimeoutItShouldBeConsideredExhausted () {
153+ public void ifANextBackoffWouldExceedTheTimeoutTheBackoffDurationShouldBeTruncated () {
144154 Backoff backoff =
145155 Backoff .newBuilder ()
146156 .setInitialBackoff (Duration .ofSeconds (2 ))
@@ -150,10 +160,9 @@ public void ifANextBackoffWouldExceedTheTimeoutItShouldBeConsideredExhausted() {
150160 .setRetryDelayMultiplier (2.0 )
151161 .build ();
152162
153- assertThat (backoff .nextBackoff (Duration .ofSeconds (5 )))
154- .isEqualTo (BackoffDuration .of (Duration .ofSeconds (2 )));
155-
156- assertThat (backoff .nextBackoff (Duration .ofSeconds (15 ))).isEqualTo (BackoffResults .EXHAUSTED );
163+ assertThat (backoff .nextBackoff (Duration .ofSeconds (22 )))
164+ .isEqualTo (BackoffDuration .of (ofSeconds (2 )));
165+ assertThat (backoff .nextBackoff (ZERO )).isEqualTo (BackoffResults .EXHAUSTED );
157166 }
158167
159168 @ Test
0 commit comments