1+ package com .microsoft .kiota .http .middleware ;
2+
3+ import static org .junit .jupiter .api .Assertions .assertEquals ;
4+
5+ import org .junit .jupiter .api .BeforeEach ;
6+ import org .junit .jupiter .params .ParameterizedTest ;
7+ import org .junit .jupiter .params .provider .Arguments ;
8+ import org .junit .jupiter .params .provider .MethodSource ;
9+
10+ import java .util .stream .Stream ;
11+
12+ class RetryHandlerTest {
13+
14+ private static final double DELAY_MILLISECONDS = 1000.0 ;
15+ private static final double DEFAULT_DELAY_MILLISECONDS = -1.0 ;
16+ private static final double DELTA = 0.01 ;
17+
18+ private RetryHandler retryHandler ;
19+
20+ @ BeforeEach
21+ void setUp () {
22+ retryHandler = new RetryHandler ();
23+ }
24+
25+ private static Stream <Arguments > retryAfterHeaderValues () {
26+ return Stream .of (
27+ // Single values
28+ Arguments .of ("10" , 10.0 * DELAY_MILLISECONDS ),
29+ Arguments .of ("0" , DEFAULT_DELAY_MILLISECONDS ), // Zero should return default
30+ Arguments .of ("-5" , DEFAULT_DELAY_MILLISECONDS ), // Negative should return default
31+
32+ // Comma-separated values
33+ Arguments .of ("31,120" , 31.0 * DELAY_MILLISECONDS ), // First positive value
34+ Arguments .of ("0,45" , 45.0 * DELAY_MILLISECONDS ), // Skip zero, take next
35+ Arguments .of ("-10,25" , 25.0 * DELAY_MILLISECONDS ), // Skip negative, take next
36+ Arguments .of ("0,-5,60" , 60.0 * DELAY_MILLISECONDS ), // Skip multiple invalid
37+
38+ // Edge cases
39+ Arguments .of ("" , DEFAULT_DELAY_MILLISECONDS ), // Empty string
40+ Arguments .of (" " , DEFAULT_DELAY_MILLISECONDS ), // Whitespace only
41+ Arguments .of ("abc" , DEFAULT_DELAY_MILLISECONDS ), // Invalid number
42+ Arguments .of ("10,abc,20" , 10.0 * DELAY_MILLISECONDS ), // Mixed valid/invalid
43+ Arguments .of ("abc,20" , 20.0 * DELAY_MILLISECONDS ), // Invalid first, valid second
44+ Arguments .of ("0,0,0" , DEFAULT_DELAY_MILLISECONDS ), // All zeros
45+ Arguments .of ("-1,-2,-3" , DEFAULT_DELAY_MILLISECONDS ), // All negative
46+
47+ // Whitespace handling
48+ Arguments .of (" 15 " , 15.0 * DELAY_MILLISECONDS ), // Whitespace around value
49+ Arguments .of ("10, 20" , 10.0 * DELAY_MILLISECONDS ), // Whitespace after comma
50+ Arguments .of (" 0 , 30 " , 30.0 * DELAY_MILLISECONDS ) // Multiple whitespaces
51+ );
52+ }
53+
54+ @ ParameterizedTest
55+ @ MethodSource ("retryAfterHeaderValues" )
56+ void testTryParseTimeHeader (String headerValue , double expectedDelay ) {
57+ double result = retryHandler .tryParseTimeHeader (headerValue );
58+ assertEquals (expectedDelay , result , DELTA ,
59+ "Failed for header value: '" + headerValue + "'" );
60+ }
61+ }
0 commit comments