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]

Reply via email to