3030import software .amazon .awssdk .services .sts .model .Credentials ;
3131
3232import java .nio .file .Paths ;
33+ import java .time .Duration ;
3334import java .time .Instant ;
3435import software .amazon .awssdk .testutils .EnvironmentVariableHelper ;
3536
3637import static org .mockito .Mockito .when ;
38+ import static org .assertj .core .api .Assertions .assertThat ;
3739
3840@ ExtendWith (MockitoExtension .class )
3941class StsWebIdentityTokenCredentialProviderTest {
@@ -57,6 +59,18 @@ public void cleanUp(){
5759 ENVIRONMENT_VARIABLE_HELPER .reset ();
5860 }
5961
62+ private void mockStsClientResponse (Instant expiration ) {
63+ when (stsClient .assumeRoleWithWebIdentity (Mockito .any (AssumeRoleWithWebIdentityRequest .class )))
64+ .thenReturn (AssumeRoleWithWebIdentityResponse .builder ()
65+ .credentials (Credentials .builder ()
66+ .accessKeyId ("key" )
67+ .expiration (expiration )
68+ .sessionToken ("session" )
69+ .secretAccessKey ("secret" )
70+ .build ())
71+ .build ());
72+ }
73+
6074 @ Test
6175 void createAssumeRoleWithWebIdentityTokenCredentialsProviderWithoutStsClient_throws_Exception () {
6276
@@ -111,4 +125,57 @@ void createAssumeRoleWithWebIdentityTokenCredentialsProvider_raisesInResolveCred
111125 // exception should be raised lazily when resolving credentials, not at creation time.
112126 Assert .assertThrows (IllegalStateException .class , provider ::resolveCredentials );
113127 }
128+
129+ @ Test
130+ void prefetchTimeAndStaleTime_withCustomConfiguration_shouldReturnConfiguredValues () {
131+ mockStsClientResponse (Instant .now ().plusSeconds (3600 ));
132+
133+ StsWebIdentityTokenFileCredentialsProvider provider =
134+ StsWebIdentityTokenFileCredentialsProvider .builder ()
135+ .stsClient (stsClient )
136+ .prefetchTime (Duration .ofMinutes (10 ))
137+ .staleTime (Duration .ofMinutes (2 ))
138+ .build ();
139+
140+ provider .resolveCredentials ();
141+
142+ assertThat (provider .prefetchTime ()).isEqualTo (Duration .ofMinutes (10 ));
143+ assertThat (provider .staleTime ()).isEqualTo (Duration .ofMinutes (2 ));
144+
145+ }
146+
147+ @ Test
148+ void prefetchTimeAndStaleTime_withoutConfiguration_shouldReturnDefaultValues () {
149+ mockStsClientResponse (Instant .now ().plusSeconds (3600 ));
150+
151+ StsWebIdentityTokenFileCredentialsProvider provider =
152+ StsWebIdentityTokenFileCredentialsProvider .builder ()
153+ .stsClient (stsClient )
154+ .build ();
155+
156+
157+ provider .resolveCredentials ();
158+
159+ assertThat (provider .prefetchTime ()).isEqualTo (Duration .ofMinutes (5 ));
160+ assertThat (provider .staleTime ()).isEqualTo (Duration .ofMinutes (1 ));
161+ }
162+
163+ @ Test
164+ void toBuilder_withTimingConfiguration_shouldPreserveConfiguration () {
165+ mockStsClientResponse (Instant .now ().plusSeconds (3600 ));
166+ StsWebIdentityTokenFileCredentialsProvider originalProvider =
167+ StsWebIdentityTokenFileCredentialsProvider .builder ()
168+ .stsClient (stsClient )
169+ .prefetchTime (Duration .ofMinutes (8 ))
170+ .staleTime (Duration .ofMinutes (3 ))
171+ .build ();
172+
173+
174+ StsWebIdentityTokenFileCredentialsProvider copiedProvider = originalProvider .toBuilder ().build ();
175+
176+ copiedProvider .resolveCredentials ();
177+
178+ assertThat (copiedProvider .prefetchTime ()).isEqualTo (Duration .ofMinutes (8 ));
179+ assertThat (copiedProvider .staleTime ()).isEqualTo (Duration .ofMinutes (3 ));
180+ }
114181}
0 commit comments