This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 8a18ca7b5f411765148840313eeddad553208e7a Author: Matthieu Baechler <[email protected]> AuthorDate: Tue Feb 11 12:10:41 2020 +0100 JAMES-3028 add URI typing to AWS S3 endpoint --- .../objectstorage/aws/AwsS3AuthConfiguration.java | 15 +++--- .../blob/objectstorage/aws/S3DumbBlobStore.java | 11 ++--- .../aws/AwsS3AuthConfigurationTest.java | 53 +++++++++------------- .../objectstorage/aws/DockerAwsS3Container.java | 4 +- .../aws/s3/AwsS3ConfigurationReader.java | 9 +++- .../aws/s3/AwsS3ConfigurationReaderTest.java | 4 +- 6 files changed, 48 insertions(+), 48 deletions(-) diff --git a/server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfiguration.java b/server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfiguration.java index f0a8d06..4305d1f 100644 --- a/server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfiguration.java +++ b/server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfiguration.java @@ -19,6 +19,8 @@ package org.apache.james.blob.objectstorage.aws; +import java.net.URI; + import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Preconditions; @@ -33,7 +35,7 @@ public class AwsS3AuthConfiguration { @FunctionalInterface interface RequiredEndpoint { - RequiredAccessKeyId endpoint(String endpoint); + RequiredAccessKeyId endpoint(URI endpoint); } @FunctionalInterface @@ -47,11 +49,11 @@ public class AwsS3AuthConfiguration { } class ReadyToBuild { - private final String endpoint; + private final URI endpoint; private final String accessKeyId; private final String secretKey; - public ReadyToBuild(String endpoint, String accessKeyId, String secretKey) { + public ReadyToBuild(URI endpoint, String accessKeyId, String secretKey) { this.endpoint = endpoint; this.accessKeyId = accessKeyId; this.secretKey = secretKey; @@ -59,7 +61,6 @@ public class AwsS3AuthConfiguration { public AwsS3AuthConfiguration build() { Preconditions.checkNotNull(endpoint, "'endpoint' is mandatory"); - Preconditions.checkArgument(!endpoint.isEmpty(), "'endpoint' is mandatory"); Preconditions.checkNotNull(accessKeyId, "'accessKeyId' is mandatory"); Preconditions.checkArgument(!accessKeyId.isEmpty(), "'accessKeyId' is mandatory"); @@ -72,11 +73,11 @@ public class AwsS3AuthConfiguration { } } - private final String endpoint; + private final URI endpoint; private final String accessKeyId; private final String secretKey; - private AwsS3AuthConfiguration(String endpoint, + private AwsS3AuthConfiguration(URI endpoint, String accessKeyId, String secretKey) { this.endpoint = endpoint; @@ -84,7 +85,7 @@ public class AwsS3AuthConfiguration { this.secretKey = secretKey; } - public String getEndpoint() { + public URI getEndpoint() { return endpoint; } diff --git a/server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStore.java b/server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStore.java index d8e9deb..629c94f 100644 --- a/server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStore.java +++ b/server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3DumbBlobStore.java @@ -22,7 +22,6 @@ package org.apache.james.blob.objectstorage.aws; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; -import java.net.URI; import java.nio.ByteBuffer; import java.time.Duration; import java.util.List; @@ -92,7 +91,7 @@ public class S3DumbBlobStore implements DumbBlobStore, Closeable { .httpClientBuilder(NettyNioAsyncHttpClient.builder() .maxConcurrency(100) .maxPendingConnectionAcquires(10_000)) - .endpointOverride(URI.create(configuration.getEndpoint())) + .endpointOverride(configuration.getEndpoint()) .region(region.asAws()) .build(); } @@ -113,7 +112,7 @@ public class S3DumbBlobStore implements DumbBlobStore, Closeable { } private static class FluxResponse { - final CompletableFuture<FluxResponse> cf = new CompletableFuture<>(); + final CompletableFuture<FluxResponse> supportingCompletableFuture = new CompletableFuture<>(); GetObjectResponse sdkResponse; Flux<ByteBuffer> flux; } @@ -129,7 +128,7 @@ public class S3DumbBlobStore implements DumbBlobStore, Closeable { @Override public CompletableFuture<FluxResponse> prepare() { response = new FluxResponse(); - return response.cf; + return response.supportingCompletableFuture; } @Override @@ -139,13 +138,13 @@ public class S3DumbBlobStore implements DumbBlobStore, Closeable { @Override public void exceptionOccurred(Throwable error) { - this.response.cf.completeExceptionally(error); + this.response.supportingCompletableFuture.completeExceptionally(error); } @Override public void onStream(SdkPublisher<ByteBuffer> publisher) { response.flux = Flux.from(publisher); - response.cf.complete(response); + response.supportingCompletableFuture.complete(response); } })); } diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfigurationTest.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfigurationTest.java index d4da020..16a5837 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfigurationTest.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfigurationTest.java @@ -22,13 +22,18 @@ package org.apache.james.blob.objectstorage.aws; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.SoftAssertions.assertSoftly; -import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration; +import java.net.URI; + import org.junit.jupiter.api.Test; import nl.jqno.equalsverifier.EqualsVerifier; public class AwsS3AuthConfigurationTest { + private static final URI ENDPOINT = URI.create("http://myEndpoint"); + private static final String ACCESS_KEY_ID = "myAccessKeyId"; + private static final String SECRET_KEY = "mySecretKey"; + @Test public void credentialsShouldRespectBeanContract() { EqualsVerifier.forClass(AwsS3AuthConfiguration.class).verify(); @@ -38,30 +43,19 @@ public class AwsS3AuthConfigurationTest { public void builderShouldThrowWhenEndpointIsNull() { assertThatThrownBy(() -> AwsS3AuthConfiguration.builder() .endpoint(null) - .accessKeyId("myAccessKeyId") - .secretKey("mySecretKey") + .accessKeyId(ACCESS_KEY_ID) + .secretKey(SECRET_KEY) .build()) .isInstanceOf(NullPointerException.class) .hasMessage("'endpoint' is mandatory"); } @Test - public void builderShouldThrowWhenEndpointIsEmpty() { - assertThatThrownBy(() -> AwsS3AuthConfiguration.builder() - .endpoint("") - .accessKeyId("myAccessKeyId") - .secretKey("mySecretKey") - .build()) - .isInstanceOf(IllegalArgumentException.class) - .hasMessage("'endpoint' is mandatory"); - } - - @Test public void builderShouldThrowWhenAccessKeyIdIsNull() { assertThatThrownBy(() -> AwsS3AuthConfiguration.builder() - .endpoint("myEndpoint") + .endpoint(ENDPOINT) .accessKeyId(null) - .secretKey("mySecretKey") + .secretKey(SECRET_KEY) .build()) .isInstanceOf(NullPointerException.class) .hasMessage("'accessKeyId' is mandatory"); @@ -70,9 +64,9 @@ public class AwsS3AuthConfigurationTest { @Test public void builderShouldThrowWhenAccessKeyIdIsEmpty() { assertThatThrownBy(() -> AwsS3AuthConfiguration.builder() - .endpoint("myEndpoint") + .endpoint(ENDPOINT) .accessKeyId("") - .secretKey("mySecretKey") + .secretKey(SECRET_KEY) .build()) .isInstanceOf(IllegalArgumentException.class) .hasMessage("'accessKeyId' is mandatory"); @@ -81,8 +75,8 @@ public class AwsS3AuthConfigurationTest { @Test public void builderShouldThrowWhenSecretKeyIsNull() { assertThatThrownBy(() -> AwsS3AuthConfiguration.builder() - .endpoint("myEndpoint") - .accessKeyId("myAccessKeyId") + .endpoint(ENDPOINT) + .accessKeyId(ACCESS_KEY_ID) .secretKey(null) .build()) .isInstanceOf(NullPointerException.class) @@ -92,8 +86,8 @@ public class AwsS3AuthConfigurationTest { @Test public void builderShouldThrowWhenSecretKeyIsEmpty() { assertThatThrownBy(() -> AwsS3AuthConfiguration.builder() - .endpoint("myEndpoint") - .accessKeyId("myAccessKeyId") + .endpoint(ENDPOINT) + .accessKeyId(ACCESS_KEY_ID) .secretKey("") .build()) .isInstanceOf(IllegalArgumentException.class) @@ -102,19 +96,16 @@ public class AwsS3AuthConfigurationTest { @Test public void builderShouldWork() { - String endpoint = "myEndpoint"; - String accessKeyId = "myAccessKeyId"; - String secretKey = "mySecretKey"; AwsS3AuthConfiguration configuration = AwsS3AuthConfiguration.builder() - .endpoint(endpoint) - .accessKeyId(accessKeyId) - .secretKey(secretKey) + .endpoint(ENDPOINT) + .accessKeyId(ACCESS_KEY_ID) + .secretKey(SECRET_KEY) .build(); assertSoftly(softly -> { - softly.assertThat(configuration.getEndpoint()).isEqualTo(endpoint); - softly.assertThat(configuration.getAccessKeyId()).isEqualTo(accessKeyId); - softly.assertThat(configuration.getSecretKey()).isEqualTo(secretKey); + softly.assertThat(configuration.getEndpoint()).isEqualTo(ENDPOINT); + softly.assertThat(configuration.getAccessKeyId()).isEqualTo(ACCESS_KEY_ID); + softly.assertThat(configuration.getSecretKey()).isEqualTo(SECRET_KEY); }); } } diff --git a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java index 5e2d690..06d8e8d 100644 --- a/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java +++ b/server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java @@ -72,8 +72,8 @@ public class DockerAwsS3Container { return awsS3Container.getMappedPort(AWS_S3_PORT); } - public String getEndpoint() { - return "http://" + getIp() + ":" + getPort() + "/"; + public URI getEndpoint() { + return URI.create("http://" + getIp() + ":" + getPort() + "/"); } public DockerAwsS3 dockerAwsS3() { diff --git a/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java index 387e922..c400e75 100644 --- a/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java +++ b/server/container/guice/blob-s3-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java @@ -19,7 +19,10 @@ package org.apache.james.modules.objectstorage.aws.s3; +import java.net.URI; + import org.apache.commons.configuration2.Configuration; +import org.apache.commons.lang3.StringUtils; import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration; public class AwsS3ConfigurationReader { @@ -29,9 +32,13 @@ public class AwsS3ConfigurationReader { static final String OBJECTSTORAGE_SECRETKEY = "objectstorage.s3.secretKey"; public static AwsS3AuthConfiguration from(Configuration configuration) { + String endpoint = configuration.getString(OBJECTSTORAGE_ENDPOINT); + if (StringUtils.isEmpty(endpoint)) { + throw new NullPointerException("'endpoint' is mandatory"); + } return AwsS3AuthConfiguration.builder() - .endpoint(configuration.getString(OBJECTSTORAGE_ENDPOINT)) + .endpoint(URI.create(endpoint)) .accessKeyId(configuration.getString(OBJECTSTORAGE_ACCESKEYID)) .secretKey(configuration.getString(OBJECTSTORAGE_SECRETKEY)) .build(); diff --git a/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java index c1225d7..7bf39db 100644 --- a/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java +++ b/server/container/guice/blob-s3-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java @@ -22,6 +22,8 @@ package org.apache.james.modules.objectstorage.aws.s3; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.net.URI; + import org.apache.commons.configuration2.Configuration; import org.apache.commons.configuration2.PropertiesConfiguration; import org.apache.james.blob.objectstorage.aws.AwsS3AuthConfiguration; @@ -59,7 +61,7 @@ class AwsS3ConfigurationReaderTest { @Test void fromShouldWork() { Configuration configuration = new PropertiesConfiguration(); - String endpoint = "myEndpoint"; + URI endpoint = URI.create("http://myEndpoint"); configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, endpoint); String accessKeyId = "myAccessKeyId"; configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ACCESKEYID, accessKeyId); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
