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 bt...@apache.org on 2019/11/05 09:02:16 UTC
[james-project] 01/05: JAMES-2946 Return InvalidArgument when a
MailRepository is tried to be created with an unsupported protocol
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 982c4309a910e634e420e635a7c9c8a18d3c8f7d
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Wed Oct 30 12:48:47 2019 +0100
JAMES-2946 Return InvalidArgument when a MailRepository is tried to be created with an unsupported protocol
---
.../james/modules/server/GuiceMailRepositoryLoader.java | 2 +-
.../MailRepositoryStoreBeanFactory.java | 2 +-
.../james/mailrepository/api/MailRepositoryStore.java | 10 ++++++++++
.../mailrepository/memory/MemoryMailRepositoryStore.java | 4 ++--
.../memory/MemoryMailRepositoryStoreTest.java | 2 +-
.../memory/TestingMailRepositoryLoader.java | 2 +-
.../james/webadmin/routes/MailRepositoriesRoutes.java | 7 +++++++
.../webadmin/routes/MailRepositoriesRoutesTest.java | 16 ++++++++++++++++
8 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/GuiceMailRepositoryLoader.java b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/GuiceMailRepositoryLoader.java
index ef70d35..2c62334 100644
--- a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/GuiceMailRepositoryLoader.java
+++ b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/GuiceMailRepositoryLoader.java
@@ -45,7 +45,7 @@ public class GuiceMailRepositoryLoader implements MailRepositoryLoader {
return genericLoader.<MailRepository>withChildModule(urlModule)
.instantiate(new ClassName(fullyQualifiedClassName));
} catch (ClassNotFoundException e) {
- throw new MailRepositoryStore.MailRepositoryStoreException("No Mail Repository found with class name " + fullyQualifiedClassName);
+ throw new MailRepositoryStore.UnsupportedRepositoryStoreException("No Mail Repository found with class name " + fullyQualifiedClassName);
} catch (ClassCastException e) {
throw new MailRepositoryStore.MailRepositoryStoreException(fullyQualifiedClassName + " is not a MailRepository");
}
diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
index 3f529af..91002ba 100644
--- a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
+++ b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
@@ -206,7 +206,7 @@ public class MailRepositoryStoreBeanFactory extends AbstractBeanFactory implemen
return reply;
} catch (Exception e) {
LOGGER.warn("Exception while creating repository: {}", e.getMessage(), e);
- throw new MailRepositoryStoreException("Cannot find or init repository", e);
+ throw new UnsupportedRepositoryStoreException("Cannot find or init repository", e);
}
}
diff --git a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
index 7d0c520..f220775 100644
--- a/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
+++ b/server/data/data-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
@@ -92,4 +92,14 @@ public interface MailRepositoryStore {
super(msg);
}
}
+
+ class UnsupportedRepositoryStoreException extends MailRepositoryStoreException {
+ public UnsupportedRepositoryStoreException(String msg, Throwable t) {
+ super(msg, t);
+ }
+
+ public UnsupportedRepositoryStoreException(String msg) {
+ super(msg);
+ }
+ }
}
diff --git a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
index 61c1069..da5d546 100644
--- a/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
+++ b/server/data/data-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
@@ -133,7 +133,7 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Startable
((Initializable) mailRepository).init();
}
} catch (Exception e) {
- throw new MailRepositoryStoreException("Cannot init mail repository", e);
+ throw new UnsupportedRepositoryStoreException("Cannot init mail repository", e);
}
}
@@ -145,6 +145,6 @@ public class MemoryMailRepositoryStore implements MailRepositoryStore, Startable
return fullyQualifiedClass
.map(Throwing.function(fqcnToMailRepository).sneakyThrow())
- .orElseThrow(() -> new MailRepositoryStoreException("No Mail Repository associated with " + protocol.getValue()));
+ .orElseThrow(() -> new UnsupportedRepositoryStoreException("No Mail Repository associated with " + protocol.getValue()));
}
}
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
index b430595..ffb36e2 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
+++ b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
@@ -69,7 +69,7 @@ public class MemoryMailRepositoryStoreTest {
repositoryStore.init();
}
- @Test(expected = MailRepositoryStore.MailRepositoryStoreException.class)
+ @Test(expected = MailRepositoryStore.UnsupportedRepositoryStoreException.class)
public void selectingANonRegisteredProtocolShouldFail() {
repositoryStore.select(MailRepositoryUrl.from("proto://repo"));
}
diff --git a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/TestingMailRepositoryLoader.java b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/TestingMailRepositoryLoader.java
index 93db1f9..025d5a6 100644
--- a/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/TestingMailRepositoryLoader.java
+++ b/server/data/data-memory/src/test/java/org/apache/james/mailrepository/memory/TestingMailRepositoryLoader.java
@@ -29,6 +29,6 @@ public class TestingMailRepositoryLoader implements MailRepositoryLoader {
if (fullyQualifiedClassName.equals(MemoryMailRepository.class.getCanonicalName())) {
return new MemoryMailRepository();
}
- throw new MailRepositoryStore.MailRepositoryStoreException(fullyQualifiedClassName + " is not supported");
+ throw new MailRepositoryStore.UnsupportedRepositoryStoreException(fullyQualifiedClassName + " is not supported");
}
}
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index c9fc45e..4bd881f 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -151,6 +151,13 @@ public class MailRepositoriesRoutes implements Routes {
try {
repositoryStoreService.createMailRepository(path, protocol);
return Responses.returnNoContent(response);
+ } catch (MailRepositoryStore.UnsupportedRepositoryStoreException e) {
+ throw ErrorResponder.builder()
+ .statusCode(HttpStatus.BAD_REQUEST_400)
+ .type(ErrorType.INVALID_ARGUMENT)
+ .cause(e)
+ .message(String.format("'%s' is an unsupported protocol", protocol))
+ .haltError();
} catch (MailRepositoryStore.MailRepositoryStoreException e) {
throw ErrorResponder.builder()
.statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 967b260..00aeef4 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -177,6 +177,22 @@ public class MailRepositoriesRoutesTest {
}
@Test
+ public void putMailRepositoryShouldReturnInvalidArgumentWhenProtocolIsUnsupported() {
+ given()
+ .params("protocol", "unsupported")
+ .when()
+ .put(PATH_ESCAPED_MY_REPO)
+ .then()
+ .statusCode(HttpStatus.BAD_REQUEST_400)
+ .body("statusCode", is(400))
+ .body("type", is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+ .body("message", is("'unsupported' is an unsupported protocol"));
+
+ assertThat(mailRepositoryStore.get(URL_MY_REPO))
+ .isEmpty();
+ }
+
+ @Test
public void getMailRepositoriesShouldReturnEmptyWhenEmpty() {
List<Object> mailRepositories =
when()
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org