|
30 | 30 | import org.mockito.junit.jupiter.MockitoExtension;
|
31 | 31 | import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
|
32 | 32 | import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
|
| 33 | +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; |
33 | 34 | import software.amazon.awssdk.regions.Region;
|
34 | 35 | import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
|
35 | 36 | import software.amazon.awssdk.services.secretsmanager.SecretsManagerClientBuilder;
|
36 | 37 | import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
|
37 | 38 | import software.amazon.awssdk.services.secretsmanager.model.PutSecretValueRequest;
|
38 | 39 | import software.amazon.awssdk.services.sts.auth.StsAssumeRoleCredentialsProvider;
|
| 40 | +import software.amazon.awssdk.services.sts.model.AssumeRoleRequest; |
39 | 41 |
|
40 | 42 | import java.io.IOException;
|
41 | 43 | import java.io.InputStream;
|
42 | 44 | import java.time.Duration;
|
| 45 | +import java.util.List; |
43 | 46 | import java.util.Set;
|
44 | 47 |
|
45 | 48 | import static org.hamcrest.CoreMatchers.equalTo;
|
|
49 | 52 | import static org.junit.jupiter.api.Assertions.assertThrows;
|
50 | 53 | import static org.mockito.ArgumentMatchers.any;
|
51 | 54 | import static org.mockito.ArgumentMatchers.anyString;
|
| 55 | +import static org.mockito.Mockito.mock; |
52 | 56 | import static org.mockito.Mockito.mockStatic;
|
53 | 57 | import static org.mockito.Mockito.verify;
|
54 | 58 | import static org.mockito.Mockito.when;
|
@@ -207,6 +211,49 @@ void testCreateSecretManagerClientWithStsCredential() throws IOException {
|
207 | 211 | assertThat(awsCredentialsProvider, instanceOf(StsAssumeRoleCredentialsProvider.class));
|
208 | 212 | }
|
209 | 213 |
|
| 214 | + @Test |
| 215 | + void testCreateSecretManagerClientWithStsHeaderOverrides() throws IOException { |
| 216 | + final InputStream inputStream = AwsSecretPluginConfigTest.class.getResourceAsStream( |
| 217 | + "/test-aws-secret-manager-configuration-with-sts-headers.yaml"); |
| 218 | + final AwsSecretManagerConfiguration awsSecretManagerConfiguration = objectMapper.readValue( |
| 219 | + inputStream, AwsSecretManagerConfiguration.class); |
| 220 | + assertThat(awsSecretManagerConfiguration.getAwsSecretId(), equalTo("test-secret")); |
| 221 | + final StsAssumeRoleCredentialsProvider.Builder stsAssumeRoleCredentialsProviderBuilder = |
| 222 | + mock(StsAssumeRoleCredentialsProvider.Builder.class); |
| 223 | + final StsAssumeRoleCredentialsProvider stsAssumeRoleCredentialsProvider = |
| 224 | + mock(StsAssumeRoleCredentialsProvider.class); |
| 225 | + when(stsAssumeRoleCredentialsProviderBuilder.stsClient(any())) |
| 226 | + .thenReturn(stsAssumeRoleCredentialsProviderBuilder); |
| 227 | + when(stsAssumeRoleCredentialsProviderBuilder.refreshRequest(any(AssumeRoleRequest.class))) |
| 228 | + .thenReturn(stsAssumeRoleCredentialsProviderBuilder); |
| 229 | + when(stsAssumeRoleCredentialsProviderBuilder.build()).thenReturn(stsAssumeRoleCredentialsProvider); |
| 230 | + when(secretsManagerClientBuilder.region(any(Region.class))).thenReturn(secretsManagerClientBuilder); |
| 231 | + when(secretsManagerClientBuilder.credentialsProvider(any(AwsCredentialsProvider.class))) |
| 232 | + .thenReturn(secretsManagerClientBuilder); |
| 233 | + when(secretsManagerClientBuilder.build()).thenReturn(secretsManagerClient); |
| 234 | + try (final MockedStatic<SecretsManagerClient> secretsManagerClientMockedStatic = mockStatic( |
| 235 | + SecretsManagerClient.class); |
| 236 | + final MockedStatic<StsAssumeRoleCredentialsProvider> stsAssumeRoleCredentialsProviderMockedStatic = |
| 237 | + mockStatic(StsAssumeRoleCredentialsProvider.class)) { |
| 238 | + secretsManagerClientMockedStatic.when(SecretsManagerClient::builder).thenReturn(secretsManagerClientBuilder); |
| 239 | + stsAssumeRoleCredentialsProviderMockedStatic.when(StsAssumeRoleCredentialsProvider::builder).thenReturn( |
| 240 | + stsAssumeRoleCredentialsProviderBuilder); |
| 241 | + assertThat(awsSecretManagerConfiguration.createSecretManagerClient(), is(secretsManagerClient)); |
| 242 | + } |
| 243 | + verify(secretsManagerClientBuilder).credentialsProvider(awsCredentialsProviderArgumentCaptor.capture()); |
| 244 | + final AwsCredentialsProvider awsCredentialsProvider = awsCredentialsProviderArgumentCaptor.getValue(); |
| 245 | + assertThat(awsCredentialsProvider, instanceOf(StsAssumeRoleCredentialsProvider.class)); |
| 246 | + final ArgumentCaptor<AssumeRoleRequest> assumeRoleRequestArgumentCaptor = |
| 247 | + ArgumentCaptor.forClass(AssumeRoleRequest.class); |
| 248 | + verify(stsAssumeRoleCredentialsProviderBuilder).refreshRequest(assumeRoleRequestArgumentCaptor.capture()); |
| 249 | + final AssumeRoleRequest assumeRoleRequest = assumeRoleRequestArgumentCaptor.getValue(); |
| 250 | + assertThat(assumeRoleRequest.overrideConfiguration().isPresent(), is(true)); |
| 251 | + final AwsRequestOverrideConfiguration awsRequestOverrideConfiguration = assumeRoleRequest |
| 252 | + .overrideConfiguration().get(); |
| 253 | + assertThat(awsRequestOverrideConfiguration.headers().size(), equalTo(1)); |
| 254 | + assertThat(awsRequestOverrideConfiguration.headers().get("test-header"), equalTo(List.of("test-value"))); |
| 255 | + } |
| 256 | + |
210 | 257 | @ParameterizedTest
|
211 | 258 | @ValueSource(strings = {
|
212 | 259 | "/test-aws-secret-manager-configuration-invalid-sts-1.yaml",
|
|
0 commit comments