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 2018/03/14 02:20:38 UTC
[1/6] james-project git commit: JAMES-2347 Demonstrate that
IsOverQuota matcher is working in mailet pipeline
Repository: james-project
Updated Branches:
refs/heads/master c105847d0 -> 43d732497
JAMES-2347 Demonstrate that IsOverQuota matcher is working in mailet pipeline
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/142438a5
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/142438a5
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/142438a5
Branch: refs/heads/master
Commit: 142438a52e7c80b1f248bcaf1842afdc88b7b316
Parents: c105847
Author: Antoine Duprat <ad...@linagora.com>
Authored: Mon Mar 12 16:03:29 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Wed Mar 14 09:05:15 2018 +0700
----------------------------------------------------------------------
.../mailets/IsOverQuotaMatcherTest.java | 133 +++++++++++++++++++
1 file changed, 133 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/142438a5/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
new file mode 100644
index 0000000..7e514f9
--- /dev/null
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
@@ -0,0 +1,133 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
+import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
+import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
+import static org.apache.james.mailets.configuration.Constants.PASSWORD;
+import static org.apache.james.mailets.configuration.Constants.SMTP_PORT;
+import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMinute;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.apache.james.MemoryJamesServerMain;
+import org.apache.james.mailbox.quota.QuotaSize;
+import org.apache.james.mailbox.store.mail.model.SerializableQuotaValue;
+import org.apache.james.mailbox.store.probe.QuotaProbe;
+import org.apache.james.mailets.TemporaryJamesServer;
+import org.apache.james.mailets.configuration.CommonProcessors;
+import org.apache.james.mailets.configuration.MailetConfiguration;
+import org.apache.james.mailets.configuration.MailetContainer;
+import org.apache.james.mailets.configuration.ProcessorConfiguration;
+import org.apache.james.modules.QuotaProbesImpl;
+import org.apache.james.probe.DataProbe;
+import org.apache.james.transport.matchers.IsOverQuota;
+import org.apache.james.utils.DataProbeImpl;
+import org.apache.james.utils.IMAPMessageReader;
+import org.apache.james.utils.SMTPMessageSender;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+public class IsOverQuotaMatcherTest {
+
+ private static final String FROM = "fromuser@" + DEFAULT_DOMAIN;
+ private static final String RECIPIENT = "touser@" + DEFAULT_DOMAIN;
+ private static final String BOUNCE_SENDER = "bounce.sender@" + DEFAULT_DOMAIN;
+
+ private static final String OVER_QUOTA_MESSAGE = "The recipient is over quota";
+ private static final String RECIPIENT_QUOTA_ROOT = "#private&" + RECIPIENT;
+ private static final QuotaSize SMALL_SIZE = QuotaSize.size(1);
+ private static final QuotaSize LARGE_SIZE = QuotaSize.size(10000);
+
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+ @Rule
+ public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
+ @Rule
+ public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
+
+ private TemporaryJamesServer jamesServer;
+
+ @Before
+ public void setup() throws Exception {
+ MailetContainer.Builder mailetContainer = TemporaryJamesServer.DEFAULT_MAILET_CONTAINER_CONFIGURATION
+ .putProcessor(ProcessorConfiguration.transport()
+ .addMailet(MailetConfiguration.builder()
+ .matcher(IsOverQuota.class)
+ .mailet(Bounce.class)
+ .addProperty("sender", BOUNCE_SENDER)
+ .addProperty("message", OVER_QUOTA_MESSAGE)
+ .addProperty("passThrough", "false"))
+ .addMailetsFrom(CommonProcessors.transport())
+ .build());
+
+ jamesServer = TemporaryJamesServer.builder()
+ .withBase(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
+ .withMailetContainer(mailetContainer)
+ .build(temporaryFolder);
+
+ DataProbe dataProbe = jamesServer.getProbe(DataProbeImpl.class);
+ dataProbe.addDomain(DEFAULT_DOMAIN);
+ dataProbe.addUser(FROM, PASSWORD);
+ dataProbe.addUser(RECIPIENT, PASSWORD);
+ dataProbe.addUser(BOUNCE_SENDER, PASSWORD);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ jamesServer.shutdown();
+ }
+
+ @Test
+ public void aBounceMessageShouldBeSentToTheSenderWhenRecipientAsReachedHisQuota() throws Exception {
+ QuotaProbe quotaProbes = jamesServer.getProbe(QuotaProbesImpl.class);
+ quotaProbes.setMaxStorage(RECIPIENT_QUOTA_ROOT, new SerializableQuotaValue<>(SMALL_SIZE));
+
+ messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+ .sendMessage(FROM, RECIPIENT)
+ .awaitSent(awaitAtMostOneMinute);
+
+ IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+ .login(FROM, PASSWORD)
+ .select(IMAPMessageReader.INBOX)
+ .awaitMessage(awaitAtMostOneMinute);
+
+ String bounceMessage = messageReader.readFirstMessage();
+ assertThat(bounceMessage).contains(OVER_QUOTA_MESSAGE);
+ }
+
+ @Test
+ public void aBounceMessageShouldBeSentToTheRecipientWhenRecipientQuotaIsNotExceeded() throws Exception {
+ QuotaProbe quotaProbes = jamesServer.getProbe(QuotaProbesImpl.class);
+ quotaProbes.setMaxStorage(RECIPIENT_QUOTA_ROOT, new SerializableQuotaValue<>(LARGE_SIZE));
+
+ messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+ .sendMessage(FROM, RECIPIENT)
+ .awaitSent(awaitAtMostOneMinute);
+
+ imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+ .login(RECIPIENT, PASSWORD)
+ .select(IMAPMessageReader.INBOX)
+ .awaitMessage(awaitAtMostOneMinute);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[3/6] james-project git commit: JAMES-2347 Bind users quota routes
Posted by bt...@apache.org.
JAMES-2347 Bind users quota routes
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ee22e0f0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ee22e0f0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ee22e0f0
Branch: refs/heads/master
Commit: ee22e0f08ff48353a0c13cad119fdd47f9c675a4
Parents: 0769dba
Author: benwa <bt...@linagora.com>
Authored: Tue Mar 13 10:15:33 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Mar 14 09:10:10 2018 +0700
----------------------------------------------------------------------
.../java/org/apache/james/modules/server/MailboxRoutesModule.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/ee22e0f0/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
index d6431dc..00cea90 100644
--- a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
+++ b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
@@ -23,6 +23,7 @@ import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.jackson.QuotaModule;
import org.apache.james.webadmin.routes.GlobalQuotaRoutes;
import org.apache.james.webadmin.routes.UserMailboxesRoutes;
+import org.apache.james.webadmin.routes.UserQuotaRoutes;
import org.apache.james.webadmin.utils.JsonTransformerModule;
import com.google.inject.AbstractModule;
@@ -35,6 +36,8 @@ public class MailboxRoutesModule extends AbstractModule {
Multibinder<Routes> routesMultibinder = Multibinder.newSetBinder(binder(), Routes.class);
routesMultibinder.addBinding().to(UserMailboxesRoutes.class);
routesMultibinder.addBinding().to(GlobalQuotaRoutes.class);
+ routesMultibinder.addBinding().to(UserQuotaRoutes.class);
+
Multibinder<JsonTransformerModule> jsonTransformerModuleMultibinder = Multibinder.newSetBinder(binder(), JsonTransformerModule.class);
jsonTransformerModuleMultibinder.addBinding().to(QuotaModule.class);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/6] james-project git commit: JAMES-2347 Solve some intelliJ
warnings in UserQuotaRoutesTest
Posted by bt...@apache.org.
JAMES-2347 Solve some intelliJ warnings in UserQuotaRoutesTest
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e235572c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e235572c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e235572c
Branch: refs/heads/master
Commit: e235572c3b77f5da3ea81b1eb7d503a9bea8c2ac
Parents: 142438a
Author: benwa <bt...@linagora.com>
Authored: Tue Mar 13 10:12:09 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Mar 14 09:06:02 2018 +0700
----------------------------------------------------------------------
.../webadmin/routes/UserQuotaRoutesTest.java | 43 ++++++++++----------
1 file changed, 22 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/e235572c/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
index fa3dd6e..4a9b82d 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
@@ -35,7 +35,6 @@ import org.apache.james.mailbox.quota.QuotaSize;
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
import org.apache.james.metrics.api.NoopMetricFactory;
-import org.apache.james.user.api.UsersRepositoryException;
import org.apache.james.user.memory.MemoryUsersRepository;
import org.apache.james.webadmin.WebAdminServer;
import org.apache.james.webadmin.WebAdminUtils;
@@ -65,7 +64,6 @@ public class UserQuotaRoutesTest {
private static final String SIZE = "size";
private WebAdminServer webAdminServer;
private InMemoryPerUserMaxQuotaManager maxQuotaManager;
- private MemoryUsersRepository usersRepository;
private DefaultUserQuotaRootResolver userQuotaRootResolver;
@Before
@@ -74,7 +72,7 @@ public class UserQuotaRoutesTest {
MemoryDomainList memoryDomainList = new MemoryDomainList(new InMemoryDNSService());
memoryDomainList.setAutoDetect(false);
memoryDomainList.addDomain(PERDU_COM);
- usersRepository = MemoryUsersRepository.withVirtualHosting();
+ MemoryUsersRepository usersRepository = MemoryUsersRepository.withVirtualHosting();
usersRepository.setDomainList(memoryDomainList);
usersRepository.addUser(BOB.asString(), PASSWORD);
MailboxSessionMapperFactory factory = null;
@@ -107,7 +105,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void getCountShouldReturnNoContentByDefault() throws UsersRepositoryException {
+ public void getCountShouldReturnNoContentByDefault() {
given()
.get(QUOTA_USERS + "/" + BOB.asString() + "/" + COUNT)
.then()
@@ -115,7 +113,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void getCountShouldReturnStoredValue() throws Exception {
+ public void getCountShouldReturnStoredValue() {
int value = 42;
maxQuotaManager.setMaxMessage(userQuotaRootResolver.forUser(BOB), QuotaCount.count(value));
@@ -143,7 +141,7 @@ public class UserQuotaRoutesTest {
@Test
- public void putCountShouldRejectInvalid() throws Exception {
+ public void putCountShouldRejectInvalid() {
Map<String, Object> errors = given()
.body("invalid")
.put(QUOTA_USERS + "/" + BOB.asString() + "/" + COUNT)
@@ -175,7 +173,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void putCountShouldRejectNegativeOtherThanMinusOne() throws Exception {
+ public void putCountShouldRejectNegativeOtherThanMinusOne() {
Map<String, Object> errors = given()
.body("-2")
.put(QUOTA_USERS + "/" + BOB.asString() + "/" + COUNT)
@@ -246,7 +244,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void getSizeShouldReturnNoContentByDefault() throws UsersRepositoryException {
+ public void getSizeShouldReturnNoContentByDefault() {
when()
.get(QUOTA_USERS + "/" + BOB.asString() + "/" + SIZE)
.then()
@@ -254,7 +252,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void getSizeShouldReturnStoredValue() throws Exception {
+ public void getSizeShouldReturnStoredValue() {
long value = 42;
maxQuotaManager.setMaxStorage(userQuotaRootResolver.forUser(BOB), QuotaSize.size(value));
@@ -272,7 +270,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void putSizeShouldRejectInvalid() throws Exception {
+ public void putSizeShouldRejectInvalid() {
Map<String, Object> errors = given()
.body("invalid")
.put(QUOTA_USERS + "/" + BOB.asString() + "/" + SIZE)
@@ -292,7 +290,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void putSizeShouldReturnNotFoundWhenUserDoesntExist() throws Exception {
+ public void putSizeShouldReturnNotFoundWhenUserDoesntExist() {
given()
.body("123")
.when()
@@ -310,11 +308,12 @@ public class UserQuotaRoutesTest {
.then()
.statusCode(HttpStatus.NO_CONTENT_204);
- assertThat(maxQuotaManager.getMaxStorage(userQuotaRootResolver.forUser(BOB))).contains(QuotaSize.unlimited());
+ assertThat(maxQuotaManager.getMaxStorage(userQuotaRootResolver.forUser(BOB)))
+ .contains(QuotaSize.unlimited());
}
@Test
- public void putSizeShouldRejectNegativeOtherThanMinusOne() throws Exception {
+ public void putSizeShouldRejectNegativeOtherThanMinusOne() {
Map<String, Object> errors = given()
.body("-2")
.put(QUOTA_USERS + "/" + BOB.asString() + "/" + SIZE)
@@ -345,7 +344,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void deleteSizeShouldReturnNotFoundWhenUserDoesntExist() throws Exception {
+ public void deleteSizeShouldReturnNotFoundWhenUserDoesntExist() {
when()
.delete(QUOTA_USERS + "/" + JOE.asString() + "/" + SIZE)
.then()
@@ -365,7 +364,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void getQuotaShouldReturnNotFoundWhenUserDoesntExist() throws Exception {
+ public void getQuotaShouldReturnNotFoundWhenUserDoesntExist() {
when()
.get(QUOTA_USERS + "/" + JOE.asString())
.then()
@@ -443,7 +442,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void getQuotaShouldReturnBothEmptyWhenDefaultValues() throws Exception {
+ public void getQuotaShouldReturnBothEmptyWhenDefaultValues() {
JsonPath jsonPath =
given()
.get(QUOTA_USERS + "/" + BOB.asString())
@@ -458,7 +457,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void getQuotaShouldReturnSizeWhenNoCount() throws Exception {
+ public void getQuotaShouldReturnSizeWhenNoCount() {
int maxStorage = 42;
maxQuotaManager.setMaxStorage(userQuotaRootResolver.forUser(BOB), QuotaSize.size(maxStorage));
@@ -476,7 +475,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void getQuotaShouldReturnBothWhenNoSize() throws Exception {
+ public void getQuotaShouldReturnBothWhenNoSize() {
int maxMessage = 42;
maxQuotaManager.setMaxMessage(userQuotaRootResolver.forUser(BOB), QuotaCount.count(maxMessage));
@@ -495,7 +494,7 @@ public class UserQuotaRoutesTest {
}
@Test
- public void putQuotaShouldReturnNotFoundWhenUserDoesntExist() throws Exception {
+ public void putQuotaShouldReturnNotFoundWhenUserDoesntExist() {
when()
.put(QUOTA_USERS + "/" + JOE.asString())
.then()
@@ -510,8 +509,10 @@ public class UserQuotaRoutesTest {
.then()
.statusCode(HttpStatus.NO_CONTENT_204);
- assertThat(maxQuotaManager.getMaxMessage(userQuotaRootResolver.forUser(BOB))).contains(QuotaCount.count(52));
- assertThat(maxQuotaManager.getMaxStorage(userQuotaRootResolver.forUser(BOB))).contains(QuotaSize.size(42));
+ assertThat(maxQuotaManager.getMaxMessage(userQuotaRootResolver.forUser(BOB)))
+ .contains(QuotaCount.count(52));
+ assertThat(maxQuotaManager.getMaxStorage(userQuotaRootResolver.forUser(BOB)))
+ .contains(QuotaSize.size(42));
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[6/6] james-project git commit: JAMES-2347 Users can be escaped in
UsersQuotaRoutes
Posted by bt...@apache.org.
JAMES-2347 Users can be escaped in UsersQuotaRoutes
RestAssured testing library tend to escape '@'.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/0769dba5
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/0769dba5
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/0769dba5
Branch: refs/heads/master
Commit: 0769dba5ac1d1b5daa4233129f1a3d4eac95ab82
Parents: e235572
Author: benwa <bt...@linagora.com>
Authored: Tue Mar 13 10:15:05 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Mar 14 09:10:10 2018 +0700
----------------------------------------------------------------------
.../james/webadmin/routes/UserQuotaRoutes.java | 9 +++-
.../webadmin/routes/UserQuotaRoutesTest.java | 54 ++++++++++++++++++++
2 files changed, 61 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/0769dba5/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
index a5fff50..d9e2953 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
@@ -19,6 +19,9 @@
package org.apache.james.webadmin.routes;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
@@ -248,8 +251,10 @@ public class UserQuotaRoutes implements Routes {
}, jsonTransformer);
}
- private User checkUserExist(Request request) throws UsersRepositoryException {
- String user = request.params(USER);
+ private User checkUserExist(Request request) throws UsersRepositoryException, UnsupportedEncodingException {
+ String user = URLDecoder.decode(request.params(USER),
+ StandardCharsets.UTF_8.displayName());
+
if (!usersRepository.contains(user)) {
throw ErrorResponder.builder()
.statusCode(HttpStatus.NOT_FOUND_404)
http://git-wip-us.apache.org/repos/asf/james-project/blob/0769dba5/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
index 4a9b82d..0d84759 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
@@ -58,6 +58,7 @@ public class UserQuotaRoutesTest {
private static final String QUOTA_USERS = "/quota/users";
private static final String PERDU_COM = "perdu.com";
private static final User BOB = User.fromUsername("bob@" + PERDU_COM);
+ private static final User ESCAPED_BOB = User.fromUsername("bob%40" + PERDU_COM);
private static final User JOE = User.fromUsername("joe@" + PERDU_COM);
private static final String PASSWORD = "secret";
private static final String COUNT = "count";
@@ -139,6 +140,25 @@ public class UserQuotaRoutesTest {
.statusCode(HttpStatus.NOT_FOUND_404);
}
+ @Test
+ public void putCountShouldAcceptEscapedUsers() {
+ given()
+ .body("35")
+ .when()
+ .put(QUOTA_USERS + "/" + ESCAPED_BOB.asString() + "/" + COUNT)
+ .then()
+ .statusCode(HttpStatus.NO_CONTENT_204);
+ }
+
+ @Test
+ public void putCountSizeAcceptEscapedUsers() {
+ given()
+ .body("36")
+ .when()
+ .put(QUOTA_USERS + "/" + ESCAPED_BOB.asString() + "/" + SIZE)
+ .then()
+ .statusCode(HttpStatus.NO_CONTENT_204);
+ }
@Test
public void putCountShouldRejectInvalid() {
@@ -442,6 +462,26 @@ public class UserQuotaRoutesTest {
}
@Test
+ public void getQuotaShouldReturnBothWhenValueSpecifiedAndEscaped() {
+ int maxStorage = 42;
+ int maxMessage = 52;
+ maxQuotaManager.setMaxStorage(userQuotaRootResolver.forUser(BOB), QuotaSize.size(maxStorage));
+ maxQuotaManager.setMaxMessage(userQuotaRootResolver.forUser(BOB), QuotaCount.count(maxMessage));
+
+ JsonPath jsonPath =
+ given()
+ .get(QUOTA_USERS + "/" + ESCAPED_BOB.asString())
+ .then()
+ .statusCode(HttpStatus.OK_200)
+ .contentType(ContentType.JSON)
+ .extract()
+ .jsonPath();
+
+ assertThat(jsonPath.getLong("user." + SIZE)).isEqualTo(maxStorage);
+ assertThat(jsonPath.getLong("user." + COUNT)).isEqualTo(maxMessage);
+ }
+
+ @Test
public void getQuotaShouldReturnBothEmptyWhenDefaultValues() {
JsonPath jsonPath =
given()
@@ -516,6 +556,20 @@ public class UserQuotaRoutesTest {
}
@Test
+ public void putQuotaShouldUpdateBothQuotaWhenEscaped() throws Exception {
+ given()
+ .body("{\"count\":52,\"size\":42}")
+ .put(QUOTA_USERS + "/" + ESCAPED_BOB.asString())
+ .then()
+ .statusCode(HttpStatus.NO_CONTENT_204);
+
+ assertThat(maxQuotaManager.getMaxMessage(userQuotaRootResolver.forUser(BOB)))
+ .contains(QuotaCount.count(52));
+ assertThat(maxQuotaManager.getMaxStorage(userQuotaRootResolver.forUser(BOB)))
+ .contains(QuotaSize.size(42));
+ }
+
+ @Test
public void putQuotaShouldBeAbleToRemoveBothQuota() throws Exception {
given()
.body("{\"count\":null,\"count\":null}")
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[5/6] james-project git commit: JAMES-2347 Add integration tests for
Count quotas
Posted by bt...@apache.org.
JAMES-2347 Add integration tests for Count quotas
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/43d73249
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/43d73249
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/43d73249
Branch: refs/heads/master
Commit: 43d7324975fddf30b0c4bfe16fa126cfeb569d59
Parents: dc43430
Author: benwa <bt...@linagora.com>
Authored: Tue Mar 13 10:20:15 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Mar 14 09:10:10 2018 +0700
----------------------------------------------------------------------
.../mailets/IsOverQuotaMatcherTest.java | 46 +++++++++++++++++---
1 file changed, 41 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/43d73249/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
index 213df73..493fff9 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
@@ -29,6 +29,7 @@ import static org.apache.james.mailets.configuration.Constants.awaitAtMostOneMin
import static org.assertj.core.api.Assertions.assertThat;
import org.apache.james.MemoryJamesServerMain;
+import org.apache.james.mailbox.quota.QuotaCount;
import org.apache.james.mailbox.quota.QuotaSize;
import org.apache.james.mailets.TemporaryJamesServer;
import org.apache.james.mailets.configuration.CommonProcessors;
@@ -57,9 +58,10 @@ public class IsOverQuotaMatcherTest {
private static final String BOUNCE_SENDER = "bounce.sender@" + DEFAULT_DOMAIN;
private static final String OVER_QUOTA_MESSAGE = "The recipient is over quota";
- private static final String RECIPIENT_QUOTA_ROOT = "#private&" + RECIPIENT;
private static final QuotaSize SMALL_SIZE = QuotaSize.size(1);
private static final QuotaSize LARGE_SIZE = QuotaSize.size(10000);
+ private static final QuotaCount SMALL_COUNT = QuotaCount.count(0);
+ private static final QuotaCount LARGE_COUNT = QuotaCount.count(100);
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@@ -81,8 +83,7 @@ public class IsOverQuotaMatcherTest {
.addProperty("sender", BOUNCE_SENDER)
.addProperty("message", OVER_QUOTA_MESSAGE)
.addProperty("passThrough", "false"))
- .addMailetsFrom(CommonProcessors.transport())
- .build());
+ .addMailetsFrom(CommonProcessors.transport()));
jamesServer = TemporaryJamesServer.builder()
.withBase(MemoryJamesServerMain.IN_MEMORY_SERVER_AGGREGATE_MODULE)
@@ -107,7 +108,7 @@ public class IsOverQuotaMatcherTest {
}
@Test
- public void aBounceMessageShouldBeSentToTheSenderWhenRecipientAsReachedHisQuota() throws Exception {
+ public void aBounceMessageShouldBeSentToTheSenderWhenRecipientAsReachedHisSizeQuota() throws Exception {
webAdminApi.given()
.body(SMALL_SIZE.asLong())
.put("/quota/users/" + RECIPIENT + "/size");
@@ -126,7 +127,7 @@ public class IsOverQuotaMatcherTest {
}
@Test
- public void aBounceMessageShouldBeSentToTheRecipientWhenRecipientQuotaIsNotExceeded() throws Exception {
+ public void aBounceMessageShouldBeSentToTheRecipientWhenRecipientSizeQuotaIsNotExceeded() throws Exception {
webAdminApi.given()
.body(LARGE_SIZE.asLong())
.put("/quota/users/" + RECIPIENT + "/size");
@@ -140,4 +141,39 @@ public class IsOverQuotaMatcherTest {
.select(IMAPMessageReader.INBOX)
.awaitMessage(awaitAtMostOneMinute);
}
+
+ @Test
+ public void aBounceMessageShouldBeSentToTheSenderWhenRecipientAsReachedHisCountQuota() throws Exception {
+ webAdminApi.given()
+ .body(SMALL_COUNT.asLong())
+ .put("/quota/users/" + RECIPIENT + "/count");
+
+ messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+ .sendMessage(FROM, RECIPIENT)
+ .awaitSent(awaitAtMostOneMinute);
+
+ IMAPMessageReader messageReader = imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+ .login(FROM, PASSWORD)
+ .select(IMAPMessageReader.INBOX)
+ .awaitMessage(awaitAtMostOneMinute);
+
+ String bounceMessage = messageReader.readFirstMessage();
+ assertThat(bounceMessage).contains(OVER_QUOTA_MESSAGE);
+ }
+
+ @Test
+ public void aBounceMessageShouldBeSentToTheRecipientWhenRecipientCountQuotaIsNotExceeded() throws Exception {
+ webAdminApi.given()
+ .body(LARGE_COUNT.asLong())
+ .put("/quota/users/" + RECIPIENT + "/count");
+
+ messageSender.connect(LOCALHOST_IP, SMTP_PORT)
+ .sendMessage(FROM, RECIPIENT)
+ .awaitSent(awaitAtMostOneMinute);
+
+ imapMessageReader.connect(LOCALHOST_IP, IMAP_PORT)
+ .login(RECIPIENT, PASSWORD)
+ .select(IMAPMessageReader.INBOX)
+ .awaitMessage(awaitAtMostOneMinute);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[4/6] james-project git commit: JAMES-2347 Use WebAdmin to set quotas
in integration tests
Posted by bt...@apache.org.
JAMES-2347 Use WebAdmin to set quotas in integration tests
This strengthen the integration test to match actual scenario and not rely on internal tools.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dc434304
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dc434304
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dc434304
Branch: refs/heads/master
Commit: dc434304d73dde4a7f7c8a34018a1d3edb520dd9
Parents: ee22e0f
Author: benwa <bt...@linagora.com>
Authored: Tue Mar 13 10:17:38 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Wed Mar 14 09:10:10 2018 +0700
----------------------------------------------------------------------
.../mailets/IsOverQuotaMatcherTest.java | 26 ++++++++++++++------
1 file changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/dc434304/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
----------------------------------------------------------------------
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
index 7e514f9..213df73 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
@@ -19,6 +19,7 @@
package org.apache.james.transport.mailets;
+import static com.jayway.restassured.RestAssured.given;
import static org.apache.james.mailets.configuration.Constants.DEFAULT_DOMAIN;
import static org.apache.james.mailets.configuration.Constants.IMAP_PORT;
import static org.apache.james.mailets.configuration.Constants.LOCALHOST_IP;
@@ -29,25 +30,26 @@ import static org.assertj.core.api.Assertions.assertThat;
import org.apache.james.MemoryJamesServerMain;
import org.apache.james.mailbox.quota.QuotaSize;
-import org.apache.james.mailbox.store.mail.model.SerializableQuotaValue;
-import org.apache.james.mailbox.store.probe.QuotaProbe;
import org.apache.james.mailets.TemporaryJamesServer;
import org.apache.james.mailets.configuration.CommonProcessors;
import org.apache.james.mailets.configuration.MailetConfiguration;
import org.apache.james.mailets.configuration.MailetContainer;
import org.apache.james.mailets.configuration.ProcessorConfiguration;
-import org.apache.james.modules.QuotaProbesImpl;
import org.apache.james.probe.DataProbe;
import org.apache.james.transport.matchers.IsOverQuota;
import org.apache.james.utils.DataProbeImpl;
import org.apache.james.utils.IMAPMessageReader;
import org.apache.james.utils.SMTPMessageSender;
+import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.webadmin.WebAdminUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import com.jayway.restassured.specification.RequestSpecification;
+
public class IsOverQuotaMatcherTest {
private static final String FROM = "fromuser@" + DEFAULT_DOMAIN;
@@ -67,6 +69,7 @@ public class IsOverQuotaMatcherTest {
public SMTPMessageSender messageSender = new SMTPMessageSender(DEFAULT_DOMAIN);
private TemporaryJamesServer jamesServer;
+ private RequestSpecification webAdminApi;
@Before
public void setup() throws Exception {
@@ -86,6 +89,11 @@ public class IsOverQuotaMatcherTest {
.withMailetContainer(mailetContainer)
.build(temporaryFolder);
+ WebAdminGuiceProbe webAdminGuiceProbe = jamesServer.getProbe(WebAdminGuiceProbe.class);
+ webAdminGuiceProbe.await();
+ webAdminApi = given()
+ .spec(WebAdminUtils.buildRequestSpecification(webAdminGuiceProbe.getWebAdminPort()).build());
+
DataProbe dataProbe = jamesServer.getProbe(DataProbeImpl.class);
dataProbe.addDomain(DEFAULT_DOMAIN);
dataProbe.addUser(FROM, PASSWORD);
@@ -94,14 +102,15 @@ public class IsOverQuotaMatcherTest {
}
@After
- public void tearDown() throws Exception {
+ public void tearDown() {
jamesServer.shutdown();
}
@Test
public void aBounceMessageShouldBeSentToTheSenderWhenRecipientAsReachedHisQuota() throws Exception {
- QuotaProbe quotaProbes = jamesServer.getProbe(QuotaProbesImpl.class);
- quotaProbes.setMaxStorage(RECIPIENT_QUOTA_ROOT, new SerializableQuotaValue<>(SMALL_SIZE));
+ webAdminApi.given()
+ .body(SMALL_SIZE.asLong())
+ .put("/quota/users/" + RECIPIENT + "/size");
messageSender.connect(LOCALHOST_IP, SMTP_PORT)
.sendMessage(FROM, RECIPIENT)
@@ -118,8 +127,9 @@ public class IsOverQuotaMatcherTest {
@Test
public void aBounceMessageShouldBeSentToTheRecipientWhenRecipientQuotaIsNotExceeded() throws Exception {
- QuotaProbe quotaProbes = jamesServer.getProbe(QuotaProbesImpl.class);
- quotaProbes.setMaxStorage(RECIPIENT_QUOTA_ROOT, new SerializableQuotaValue<>(LARGE_SIZE));
+ webAdminApi.given()
+ .body(LARGE_SIZE.asLong())
+ .put("/quota/users/" + RECIPIENT + "/size");
messageSender.connect(LOCALHOST_IP, SMTP_PORT)
.sendMessage(FROM, RECIPIENT)
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org