You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2019/03/08 13:14:47 UTC
[james-project] 04/05: JAMES-2669 Add Aws S3 BlobStore configuration
This is an automated email from the ASF dual-hosted git repository.
rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit bb623523c0f41caa70f9615a8d6372a351d5348f
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Fri Feb 22 18:00:51 2019 +0100
JAMES-2669 Add Aws S3 BlobStore configuration
---
.../aws/AwsS3ObjectStorageConfiguration.java | 112 ------------------
.../guice/blob-objectstorage-guice/pom.xml | 5 +
.../ObjectStorageBlobConfiguration.java | 13 ++-
.../ObjectStorageDependenciesModule.java | 5 +-
.../objectstorage/ObjectStorageProvider.java | 3 +-
.../aws/s3/AwsS3AuthConfiguration.java | 125 +++++++++++++++++++++
.../s3/AwsS3ConfigurationReader.java} | 28 +++--
.../ObjectStorageBlobConfigurationTest.java | 13 +++
.../objectstorage/ObjectStorageProviderTest.java | 13 ++-
.../aws/s3/AwsS3AuthConfigurationTest.java} | 35 +++---
.../aws/s3/AwsS3ConfigurationReaderTest.java | 76 +++++++++++++
.../objectstorage/swift/DockerSwiftTestRule.java | 5 +-
12 files changed, 284 insertions(+), 149 deletions(-)
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageConfiguration.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageConfiguration.java
deleted file mode 100644
index 53c7e5b..0000000
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageConfiguration.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.james.blob.objectstorage.aws;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-
-public class AwsS3ObjectStorageConfiguration {
-
- public static Builder builder() {
- return new Builder();
- }
-
- public static class Builder {
-
- private String endpoint;
- private String accessKeyId;
- private String secretKey;
-
- private Builder() {}
-
- public Builder endpoint(String endpoint) {
- this.endpoint = endpoint;
- return this;
- }
-
- public Builder accessKeyId(String accessKeyId) {
- this.accessKeyId = accessKeyId;
- return this;
- }
-
- public Builder secretKey(String secretKey) {
- this.secretKey = secretKey;
- return this;
- }
-
- public AwsS3ObjectStorageConfiguration build() {
- Preconditions.checkArgument(!Strings.isNullOrEmpty(endpoint), "'endpoint' is mandatory");
- Preconditions.checkArgument(!Strings.isNullOrEmpty(accessKeyId), "'accessKeyId' is mandatory");
- Preconditions.checkArgument(!Strings.isNullOrEmpty(secretKey), "'secretKey' is mandatory");
- return new AwsS3ObjectStorageConfiguration(endpoint, accessKeyId, secretKey);
- }
- }
-
- private final String endpoint;
- private final String accessKeyId;
- private final String secretKey;
-
- private AwsS3ObjectStorageConfiguration(String endpoint,
- String accessKeyId,
- String secretKey) {
- this.endpoint = endpoint;
- this.accessKeyId = accessKeyId;
- this.secretKey = secretKey;
- }
-
- public String getEndpoint() {
- return endpoint;
- }
-
- public String getAccessKeyId() {
- return accessKeyId;
- }
-
- public String getSecretKey() {
- return secretKey;
- }
-
- @Override
- public final boolean equals(Object o) {
- if (o instanceof AwsS3ObjectStorageConfiguration) {
- AwsS3ObjectStorageConfiguration that = (AwsS3ObjectStorageConfiguration) o;
- return Objects.equal(endpoint, that.endpoint) &&
- Objects.equal(accessKeyId, that.accessKeyId) &&
- Objects.equal(secretKey, that.secretKey);
- }
- return false;
- }
-
- @Override
- public final int hashCode() {
- return Objects.hashCode(endpoint, accessKeyId, secretKey);
- }
-
- @Override
- public final String toString() {
- return MoreObjects.toStringHelper(this)
- .add("endpoint", endpoint)
- .add("accessKeyId", accessKeyId)
- .add("secretKey", secretKey)
- .toString();
- }
-}
diff --git a/server/container/guice/blob-objectstorage-guice/pom.xml b/server/container/guice/blob-objectstorage-guice/pom.xml
index 53aba50..a44a535 100644
--- a/server/container/guice/blob-objectstorage-guice/pom.xml
+++ b/server/container/guice/blob-objectstorage-guice/pom.xml
@@ -66,6 +66,11 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>nl.jqno.equalsverifier</groupId>
+ <artifactId>equalsverifier</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
index b36576f..e17da58 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
@@ -27,6 +27,7 @@ import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.james.blob.objectstorage.ContainerName;
import org.apache.james.blob.objectstorage.PayloadCodec;
+import org.apache.james.modules.objectstorage.aws.s3.AwsS3ConfigurationReader;
import org.apache.james.modules.objectstorage.swift.SwiftAuthConfiguration;
import com.google.common.annotations.VisibleForTesting;
@@ -69,12 +70,21 @@ public class ObjectStorageBlobConfiguration {
.codec(payloadCodecFactory)
.provider(ObjectStorageProvider.from(provider))
.container(ContainerName.of(namespace))
- .authConfiguration(SwiftAuthConfiguration.defineAuthApi(configuration))
+ .authConfiguration(authConfiguration(provider, configuration))
.aesSalt(aesSalt)
.aesPassword(aesPassword)
.build();
}
+ private static SpecificAuthConfiguration authConfiguration(String provider, Configuration configuration) throws ConfigurationException {
+ switch (ObjectStorageProvider.from(provider)) {
+ case SWIFT:
+ return SwiftAuthConfiguration.defineAuthApi(configuration);
+ case AWSS3:
+ return AwsS3ConfigurationReader.readAwsS3Configuration(configuration);
+ }
+ throw new ConfigurationException("Unknown object storage provider: " + provider);
+ }
public static Builder.RequirePayloadCodec builder() {
return payloadCodec -> provider -> container -> authConfiguration -> new Builder.ReadyToBuild(payloadCodec, provider, container, authConfiguration);
@@ -107,6 +117,7 @@ public class ObjectStorageBlobConfiguration {
private final ObjectStorageProvider provider;
private final ContainerName container;
private final SpecificAuthConfiguration specificAuthConfiguration;
+
private Optional<String> aesSalt;
private Optional<char[]> aesPassword;
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
index 3d63afd..a4acb21 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
@@ -71,7 +71,10 @@ public class ObjectStorageDependenciesModule extends AbstractModule {
}
private ObjectStorageBlobsDAOBuilder.RequireContainerName selectDaoBuilder(ObjectStorageBlobConfiguration configuration) {
- return SwiftObjectStorage.builder(configuration);
+ if (configuration.getProvider() == ObjectStorageProvider.SWIFT) {
+ return SwiftObjectStorage.builder(configuration);
+ }
+ throw new IllegalArgumentException("unknown provider " + configuration.getProvider());
}
}
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageProvider.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageProvider.java
index d89151d..a9c1cf6 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageProvider.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageProvider.java
@@ -24,7 +24,8 @@ import java.util.Arrays;
import org.apache.commons.configuration.ConfigurationException;
public enum ObjectStorageProvider {
- SWIFT("swift");
+ SWIFT("swift"),
+ AWSS3("aws-s3");
private final String name;
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3AuthConfiguration.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3AuthConfiguration.java
new file mode 100644
index 0000000..2c9ee1c
--- /dev/null
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3AuthConfiguration.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.james.modules.objectstorage.aws.s3;
+
+import org.apache.james.modules.objectstorage.SpecificAuthConfiguration;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+
+public class AwsS3AuthConfiguration implements SpecificAuthConfiguration {
+
+ public static Builder.RequiredEndpoint builder() {
+ return endpoint -> accessKeyId -> secretKey -> new Builder.ReadyToBuild(endpoint, accessKeyId, secretKey);
+ }
+
+ public interface Builder {
+
+ @FunctionalInterface
+ interface RequiredEndpoint {
+ RequiredAccessKeyId endpoint(String endpoint);
+ }
+
+ @FunctionalInterface
+ interface RequiredAccessKeyId {
+ RequiredSecretKey accessKeyId(String accessKeyId);
+ }
+
+ @FunctionalInterface
+ interface RequiredSecretKey {
+ ReadyToBuild secretKey(String secretKey);
+ }
+
+ class ReadyToBuild {
+ private final String endpoint;
+ private final String accessKeyId;
+ private final String secretKey;
+
+ public ReadyToBuild(String endpoint, String accessKeyId, String secretKey) {
+ this.endpoint = endpoint;
+ this.accessKeyId = accessKeyId;
+ this.secretKey = secretKey;
+ }
+
+ 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");
+
+ Preconditions.checkNotNull(secretKey, "'secretKey' is mandatory");
+ Preconditions.checkArgument(!secretKey.isEmpty(), "'secretKey' is mandatory");
+
+ return new AwsS3AuthConfiguration(endpoint, accessKeyId, secretKey);
+ }
+ }
+ }
+
+ private final String endpoint;
+ private final String accessKeyId;
+ private final String secretKey;
+
+ private AwsS3AuthConfiguration(String endpoint,
+ String accessKeyId,
+ String secretKey) {
+ this.endpoint = endpoint;
+ this.accessKeyId = accessKeyId;
+ this.secretKey = secretKey;
+ }
+
+ public String getEndpoint() {
+ return endpoint;
+ }
+
+ public String getAccessKeyId() {
+ return accessKeyId;
+ }
+
+ public String getSecretKey() {
+ return secretKey;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof AwsS3AuthConfiguration) {
+ AwsS3AuthConfiguration that = (AwsS3AuthConfiguration) o;
+ return Objects.equal(endpoint, that.endpoint) &&
+ Objects.equal(accessKeyId, that.accessKeyId) &&
+ Objects.equal(secretKey, that.secretKey);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hashCode(endpoint, accessKeyId, secretKey);
+ }
+
+ @Override
+ public final String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("endpoint", endpoint)
+ .add("accessKeyId", accessKeyId)
+ .add("secretKey", secretKey)
+ .toString();
+ }
+}
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageProvider.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java
similarity index 50%
copy from server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageProvider.java
copy to server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java
index d89151d..6f36c91 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageProvider.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java
@@ -17,25 +17,23 @@
* under the License.
*/
-package org.apache.james.modules.objectstorage;
+package org.apache.james.modules.objectstorage.aws.s3;
-import java.util.Arrays;
+import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationException;
+public class AwsS3ConfigurationReader {
-public enum ObjectStorageProvider {
- SWIFT("swift");
+ static final String OBJECTSTORAGE_ENDPOINT = "objectstorage.s3.endPoint";
+ static final String OBJECTSTORAGE_ACCESKEYID = "objectstorage.s3.accessKeyId";
+ static final String OBJECTSTORAGE_SECRETKEY = "objectstorage.s3.secretKey";
- private final String name;
+ public static AwsS3AuthConfiguration readAwsS3Configuration(Configuration configuration) {
- ObjectStorageProvider(String name) {
- this.name = name;
- }
-
- public static ObjectStorageProvider from(String provider) throws ConfigurationException {
- return Arrays.stream(values())
- .filter(value -> value.name.equals(provider))
- .findFirst()
- .orElseThrow(() -> new ConfigurationException("Unknown object storage provider: " + provider));
+ return AwsS3AuthConfiguration.builder()
+ .endpoint(configuration.getString(OBJECTSTORAGE_ENDPOINT))
+ .accessKeyId(configuration.getString(OBJECTSTORAGE_ACCESKEYID))
+ .secretKey(configuration.getString(OBJECTSTORAGE_SECRETKEY))
+ .build();
}
}
+
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
index 004b7bf..2396eae 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
@@ -157,4 +157,17 @@ class ObjectStorageBlobConfigurationTest {
assertThatThrownBy(() -> ObjectStorageBlobConfiguration.from(configuration)).isInstanceOf(IllegalStateException.class);
}
+ @Test
+ void shouldThrowWhenUnknownProvider() throws Exception {
+ MapConfiguration configuration = new MapConfiguration(
+ ImmutableMap.<String, Object>builder()
+ .put("objectstorage.payload.codec", PayloadCodecFactory.DEFAULT.name())
+ .put("objectstorage.provider", "unknown")
+ .put("objectstorage.namespace", "foo")
+ .build());
+
+ assertThatThrownBy(() -> ObjectStorageBlobConfiguration.from(configuration))
+ .isInstanceOf(ConfigurationException.class)
+ .hasMessage("Unknown object storage provider: unknown");
+ }
}
\ No newline at end of file
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageProviderTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageProviderTest.java
index 2899956..6fe0488 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageProviderTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageProviderTest.java
@@ -30,12 +30,19 @@ class ObjectStorageProviderTest {
@Test
void fromShouldThrowWhenUnkownObjectStorage() {
assertThatThrownBy(() -> ObjectStorageProvider.from("unknown"))
- .isInstanceOf(RuntimeException.class)
+ .isInstanceOf(ConfigurationException.class)
.hasMessage("Unknown object storage provider: unknown");
}
@Test
- void fromShouldReturnThenObjectStorage() throws ConfigurationException {
- assertThat(ObjectStorageProvider.from("swift")).isEqualTo(ObjectStorageProvider.SWIFT);
+ void fromShouldMatchSwift() throws ConfigurationException {
+ assertThat(ObjectStorageProvider.from("swift"))
+ .isEqualTo(ObjectStorageProvider.SWIFT);
+ }
+
+ @Test
+ void fromShouldMatchAwsS3() throws ConfigurationException {
+ assertThat(ObjectStorageProvider.from("aws-s3"))
+ .isEqualTo(ObjectStorageProvider.AWSS3);
}
}
\ No newline at end of file
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageConfigurationTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3AuthConfigurationTest.java
similarity index 71%
rename from server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageConfigurationTest.java
rename to server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3AuthConfigurationTest.java
index adf8f1f..445bcdd 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageConfigurationTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3AuthConfigurationTest.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.james.blob.objectstorage.aws;
+package org.apache.james.modules.objectstorage.aws.s3;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.SoftAssertions.assertSoftly;
@@ -26,25 +26,30 @@ import org.junit.jupiter.api.Test;
import nl.jqno.equalsverifier.EqualsVerifier;
-public class AwsS3ObjectStorageConfigurationTest {
+public class AwsS3AuthConfigurationTest {
@Test
public void credentialsShouldRespectBeanContract() {
- EqualsVerifier.forClass(AwsS3ObjectStorageConfiguration.class).verify();
+ EqualsVerifier.forClass(AwsS3AuthConfiguration.class).verify();
}
@Test
public void builderShouldThrowWhenEndpointIsNull() {
- assertThatThrownBy(() -> AwsS3ObjectStorageConfiguration.builder()
+ assertThatThrownBy(() -> AwsS3AuthConfiguration.builder()
+ .endpoint(null)
+ .accessKeyId("myAccessKeyId")
+ .secretKey("mySecretKey")
.build())
- .isInstanceOf(IllegalArgumentException.class)
+ .isInstanceOf(NullPointerException.class)
.hasMessage("'endpoint' is mandatory");
}
@Test
public void builderShouldThrowWhenEndpointIsEmpty() {
- assertThatThrownBy(() -> AwsS3ObjectStorageConfiguration.builder()
+ assertThatThrownBy(() -> AwsS3AuthConfiguration.builder()
.endpoint("")
+ .accessKeyId("myAccessKeyId")
+ .secretKey("mySecretKey")
.build())
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("'endpoint' is mandatory");
@@ -52,18 +57,21 @@ public class AwsS3ObjectStorageConfigurationTest {
@Test
public void builderShouldThrowWhenAccessKeyIdIsNull() {
- assertThatThrownBy(() -> AwsS3ObjectStorageConfiguration.builder()
+ assertThatThrownBy(() -> AwsS3AuthConfiguration.builder()
.endpoint("myEndpoint")
+ .accessKeyId(null)
+ .secretKey("mySecretKey")
.build())
- .isInstanceOf(IllegalArgumentException.class)
+ .isInstanceOf(NullPointerException.class)
.hasMessage("'accessKeyId' is mandatory");
}
@Test
public void builderShouldThrowWhenAccessKeyIdIsEmpty() {
- assertThatThrownBy(() -> AwsS3ObjectStorageConfiguration.builder()
+ assertThatThrownBy(() -> AwsS3AuthConfiguration.builder()
.endpoint("myEndpoint")
.accessKeyId("")
+ .secretKey("mySecretKey")
.build())
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("'accessKeyId' is mandatory");
@@ -71,17 +79,18 @@ public class AwsS3ObjectStorageConfigurationTest {
@Test
public void builderShouldThrowWhenSecretKeyIsNull() {
- assertThatThrownBy(() -> AwsS3ObjectStorageConfiguration.builder()
+ assertThatThrownBy(() -> AwsS3AuthConfiguration.builder()
.endpoint("myEndpoint")
.accessKeyId("myAccessKeyId")
+ .secretKey(null)
.build())
- .isInstanceOf(IllegalArgumentException.class)
+ .isInstanceOf(NullPointerException.class)
.hasMessage("'secretKey' is mandatory");
}
@Test
public void builderShouldThrowWhenSecretKeyIsEmpty() {
- assertThatThrownBy(() -> AwsS3ObjectStorageConfiguration.builder()
+ assertThatThrownBy(() -> AwsS3AuthConfiguration.builder()
.endpoint("myEndpoint")
.accessKeyId("myAccessKeyId")
.secretKey("")
@@ -95,7 +104,7 @@ public class AwsS3ObjectStorageConfigurationTest {
String endpoint = "myEndpoint";
String accessKeyId = "myAccessKeyId";
String secretKey = "mySecretKey";
- AwsS3ObjectStorageConfiguration configuration = AwsS3ObjectStorageConfiguration.builder()
+ AwsS3AuthConfiguration configuration = AwsS3AuthConfiguration.builder()
.endpoint(endpoint)
.accessKeyId(accessKeyId)
.secretKey(secretKey)
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java
new file mode 100644
index 0000000..4f59cc3
--- /dev/null
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+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 org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.junit.jupiter.api.Test;
+
+class AwsS3ConfigurationReaderTest {
+
+ @Test
+ void fromShouldThrowWhenEndpointIsNull() {
+ Configuration configuration = new PropertiesConfiguration();
+ assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration))
+ .isInstanceOf(NullPointerException.class)
+ .hasMessage("'endpoint' is mandatory");
+ }
+
+ @Test
+ void fromShouldThrowWhenAccessKeyIdIsNull() {
+ Configuration configuration = new PropertiesConfiguration();
+ configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, "myEndpoint");
+ assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration))
+ .isInstanceOf(NullPointerException.class)
+ .hasMessage("'accessKeyId' is mandatory");
+ }
+
+ @Test
+ void fromShouldThrowWhenSecretKeyIsNull() {
+ Configuration configuration = new PropertiesConfiguration();
+ configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, "myEndpoint");
+ configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ACCESKEYID, "myAccessKeyId");
+ assertThatThrownBy(() -> AwsS3ConfigurationReader.from(configuration))
+ .isInstanceOf(NullPointerException.class)
+ .hasMessage("'secretKey' is mandatory");
+ }
+
+ @Test
+ void fromShouldWork() {
+ Configuration configuration = new PropertiesConfiguration();
+ String endpoint = "myEndpoint";
+ configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ENDPOINT, endpoint);
+ String accessKeyId = "myAccessKeyId";
+ configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_ACCESKEYID, accessKeyId);
+ String secretKey = "mySecretKey";
+ configuration.addProperty(AwsS3ConfigurationReader.OBJECTSTORAGE_SECRETKEY, secretKey);
+
+ AwsS3AuthConfiguration expected = AwsS3AuthConfiguration.builder()
+ .endpoint(endpoint)
+ .accessKeyId(accessKeyId)
+ .secretKey(secretKey)
+ .build();
+ AwsS3AuthConfiguration authConfiguration = AwsS3ConfigurationReader.from(configuration);
+ assertThat(authConfiguration).isEqualTo(expected);
+ }
+}
\ No newline at end of file
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
index 76481c3..67a2a53 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
@@ -27,6 +27,7 @@ import javax.inject.Inject;
import org.apache.james.CleanupTasksPerformer;
import org.apache.james.GuiceModuleTestRule;
import org.apache.james.blob.objectstorage.ContainerName;
+import org.apache.james.blob.objectstorage.DockerSwiftRule;
import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
import org.apache.james.blob.objectstorage.PayloadCodec;
import org.apache.james.blob.objectstorage.swift.Credentials;
@@ -36,7 +37,6 @@ import org.apache.james.blob.objectstorage.swift.UserName;
import org.apache.james.modules.objectstorage.ObjectStorageBlobConfiguration;
import org.apache.james.modules.objectstorage.ObjectStorageProvider;
import org.apache.james.modules.objectstorage.PayloadCodecFactory;
-import org.apache.james.modules.objectstorage.swift.SwiftAuthConfiguration;
import org.apache.james.utils.GuiceProbe;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
@@ -78,8 +78,7 @@ public class DockerSwiftTestRule implements GuiceModuleTestRule {
}
private final PayloadCodecFactory payloadCodecFactory;
- private org.apache.james.blob.objectstorage.DockerSwiftRule swiftContainer =
- new org.apache.james.blob.objectstorage.DockerSwiftRule();
+ private DockerSwiftRule swiftContainer = new DockerSwiftRule();
public DockerSwiftTestRule() {
this(PayloadCodecFactory.DEFAULT);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org