Skip to content

Commit

Permalink
fix: iamAsyncClient without endpointOverride (#492)
Browse files Browse the repository at this point in the history
  • Loading branch information
ronjaquensel authored Nov 28, 2024
1 parent 8566aec commit 0f4cf76
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
* Contributors:
* Bayerische Motoren Werke Aktiengesellschaft (BMW AG) - Initial implementation
* ZF Friedrichshafen AG - Initial implementation
* Cofinity-X - fix iamAsyncClient without endpointOverride
*
*/

Expand Down Expand Up @@ -42,6 +43,8 @@
import static software.amazon.awssdk.core.client.config.SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR;

public class AwsClientProviderImpl implements AwsClientProvider {

private static final String NO_ENDPOINT_OVERRIDE = "default";

private final AwsCredentialsProvider credentialsProvider;
private final AwsClientProviderConfiguration configuration;
Expand Down Expand Up @@ -70,7 +73,7 @@ public S3AsyncClient s3AsyncClient(S3ClientRequest clientRequest) {

@Override
public IamAsyncClient iamAsyncClient(S3ClientRequest clientRequest) {
var key = clientRequest.endpointOverride();
var key = clientRequest.endpointOverride() != null ? clientRequest.endpointOverride() : NO_ENDPOINT_OVERRIDE;
return iamAsyncClients.computeIfAbsent(key, s -> createIamAsyncClient(clientRequest.endpointOverride()));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* Copyright (c) 2024 Cofinity-X
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
* https://www.apache.org/licenses/LICENSE-2.0
*
* SPDX-License-Identifier: Apache-2.0
*
* Contributors:
* Cofinity-X - initial API and implementation
*
*/

package org.eclipse.edc.aws.s3;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

import java.net.URI;

import static org.assertj.core.api.Assertions.assertThat;

class AwsClientProviderImplTest {

private AwsClientProvider clientProvider;

@BeforeEach
void setUp() {
var config = AwsClientProviderConfiguration.Builder.newInstance()
.credentialsProvider(DefaultCredentialsProvider.create())
.build();
clientProvider = new AwsClientProviderImpl(config);
}

@Test
void iamAsyncClient_noEndpointOverride_shouldReturnClient() {
var clientRequest = S3ClientRequest.from("region", null);

var client = clientProvider.iamAsyncClient(clientRequest);

assertThat(client).isNotNull();
assertThat(client.serviceClientConfiguration().endpointOverride()).isEmpty();
}

@Test
void iamAsyncClient_requestMultipleTimesNoEndpointOverride_shouldReturnSameClient() {
var clientRequest = S3ClientRequest.from("region", null);

var client1 = clientProvider.iamAsyncClient(clientRequest);
var client2 = clientProvider.iamAsyncClient(clientRequest);

assertThat(client1).isSameAs(client2);
}

@Test
void iamAsyncClient_withEndpointOverride_shouldReturnClient() {
var endpointOverride = "https://endpointOverride";
var clientRequest = S3ClientRequest.from("region", endpointOverride);

var client = clientProvider.iamAsyncClient(clientRequest);

assertThat(client).isNotNull();
assertThat(client.serviceClientConfiguration().endpointOverride()).contains(URI.create(endpointOverride));
}

@Test
void iamAsyncClient_requestMultipleTimesWithEndpointOverride_shouldReturnSameClient() {
var clientRequest = S3ClientRequest.from("region", "https://endpointOverride");

var client1 = clientProvider.iamAsyncClient(clientRequest);
var client2 = clientProvider.iamAsyncClient(clientRequest);

assertThat(client1).isSameAs(client2);
}
}

0 comments on commit 0f4cf76

Please sign in to comment.