This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit c132e927870f55e76aa8d73d1e25f642a2787ab2
Author: Benoit Tellier <[email protected]>
AuthorDate: Wed Jul 7 16:33:29 2021 +0700

    JAMES-3610 SMTP: unit for maxmessagesize option
---
 .../mailets/configuration/SmtpConfiguration.java    | 21 ++++++++++-----------
 .../configuration/SmtpConfigurationTest.java        |  2 +-
 .../apache/james/smtp/SmtpSizeLimitationTest.java   | 15 +++++++++++++--
 .../apache/james/smtpserver/netty/SMTPServer.java   |  4 +++-
 4 files changed, 27 insertions(+), 15 deletions(-)

diff --git 
a/server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
 
b/server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
index c0f90e9..4f0c5ac 100644
--- 
a/server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
+++ 
b/server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
@@ -50,10 +50,10 @@ public class SmtpConfiguration implements SerializableAsXml 
{
     }
 
     public static class Builder {
-        private static final int DEFAULT_DISABLED = 0;
+        private static final String DEFAULT_DISABLED = "0";
 
         private Optional<Boolean> authRequired;
-        private Optional<Integer> maxMessageSizeInKb;
+        private Optional<String> maxMessageSize;
         private Optional<Boolean> verifyIndentity;
         private Optional<Boolean> bracketEnforcement;
         private Optional<String> authorizedAddresses;
@@ -63,7 +63,7 @@ public class SmtpConfiguration implements SerializableAsXml {
             authorizedAddresses = Optional.empty();
             authRequired = Optional.empty();
             verifyIndentity = Optional.empty();
-            maxMessageSizeInKb = Optional.empty();
+            maxMessageSize = Optional.empty();
             bracketEnforcement = Optional.empty();
             addittionalHooks = ImmutableList.builder();
         }
@@ -74,9 +74,8 @@ public class SmtpConfiguration implements SerializableAsXml {
             return this;
         }
 
-        public Builder withMaxMessageSizeInKb(int sizeInKb) {
-            Preconditions.checkArgument(sizeInKb > 0);
-            this.maxMessageSizeInKb = Optional.of(sizeInKb);
+        public Builder withMaxMessageSize(String size) {
+            this.maxMessageSize = Optional.of(size);
             return this;
         }
 
@@ -115,7 +114,7 @@ public class SmtpConfiguration implements SerializableAsXml 
{
                 authRequired.orElse(!AUTH_REQUIRED),
                 bracketEnforcement.orElse(true),
                 verifyIndentity.orElse(false),
-                maxMessageSizeInKb.orElse(DEFAULT_DISABLED),
+                maxMessageSize.orElse(DEFAULT_DISABLED),
                 addittionalHooks.build());
         }
     }
@@ -128,16 +127,16 @@ public class SmtpConfiguration implements 
SerializableAsXml {
     private final boolean authRequired;
     private final boolean bracketEnforcement;
     private final boolean verifyIndentity;
-    private final int maxMessageSizeInKb;
+    private final String maxMessageSize;
     private final ImmutableList<HookConfigurationEntry> addittionalHooks;
 
     private SmtpConfiguration(Optional<String> authorizedAddresses, boolean 
authRequired, boolean bracketEnforcement,
-                              boolean verifyIndentity, int maxMessageSizeInKb, 
ImmutableList<HookConfigurationEntry> addittionalHooks) {
+                              boolean verifyIndentity, String maxMessageSize, 
ImmutableList<HookConfigurationEntry> addittionalHooks) {
         this.authorizedAddresses = authorizedAddresses;
         this.authRequired = authRequired;
         this.bracketEnforcement = bracketEnforcement;
         this.verifyIndentity = verifyIndentity;
-        this.maxMessageSizeInKb = maxMessageSizeInKb;
+        this.maxMessageSize = maxMessageSize;
         this.addittionalHooks = addittionalHooks;
     }
 
@@ -148,7 +147,7 @@ public class SmtpConfiguration implements SerializableAsXml 
{
         authorizedAddresses.ifPresent(value -> 
scopes.put("authorizedAddresses", value));
         scopes.put("authRequired", authRequired);
         scopes.put("verifyIdentity", verifyIndentity);
-        scopes.put("maxmessagesize", maxMessageSizeInKb);
+        scopes.put("maxmessagesize", maxMessageSize);
         scopes.put("bracketEnforcement", bracketEnforcement);
         scopes.put("hooks", addittionalHooks);
 
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
index 8097003..cae18d9 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
@@ -48,7 +48,7 @@ public class SmtpConfigurationTest {
     @Test
     public void maxMessageSizeCanBeCustomized() throws IOException {
         assertThat(SmtpConfiguration.builder()
-                .withMaxMessageSizeInKb(36)
+                .withMaxMessageSize("36")
                 .build()
                 .serializeAsXml(),
             hasXPath("/smtpservers/smtpserver/maxmessagesize/text()",
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
index 339ff92..416d140 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
@@ -71,7 +71,7 @@ class SmtpSizeLimitationTest {
     void messageShouldNotBeAcceptedWhenOverSized(@TempDir File 
temporaryFolder) throws Exception {
         createJamesServer(temporaryFolder, SmtpConfiguration.builder()
             .doNotVerifyIdentity()
-            .withMaxMessageSizeInKb(10));
+            .withMaxMessageSize("10"));
 
         assertThatThrownBy(() ->
             messageSender.connect(LOCALHOST_IP, 
jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
@@ -97,10 +97,21 @@ class SmtpSizeLimitationTest {
     void messageShouldBeAcceptedWhenNotOverSized(@TempDir File 
temporaryFolder) throws Exception {
         createJamesServer(temporaryFolder, SmtpConfiguration.builder()
             .doNotVerifyIdentity()
-            .withMaxMessageSizeInKb(10));
+            .withMaxMessageSize("10"));
 
         messageSender.connect(LOCALHOST_IP, 
jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
             .authenticate(USER, PASSWORD)
             .sendMessageWithHeaders(USER, USER,"Short message");
     }
+
+    @Test
+    void unitShouldBeAccepted(@TempDir File temporaryFolder) throws Exception {
+        createJamesServer(temporaryFolder, SmtpConfiguration.builder()
+            .doNotVerifyIdentity()
+            .withMaxMessageSize("10M"));
+
+        messageSender.connect(LOCALHOST_IP, 
jamesServer.getProbe(SmtpGuiceProbe.class).getSmtpPort())
+            .authenticate(USER, PASSWORD)
+            .sendMessageWithHeaders(USER, USER, Strings.repeat("Long 
message\r\n", 1024));
+    }
 }
diff --git 
a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
 
b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
index 0dfa355..bda1459 100644
--- 
a/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
+++ 
b/server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
@@ -39,6 +39,7 @@ import org.apache.james.protocols.smtp.SMTPProtocol;
 import org.apache.james.smtpserver.CoreCmdHandlerLoader;
 import org.apache.james.smtpserver.ExtendedSMTPSession;
 import org.apache.james.smtpserver.jmx.JMXHandlersLoader;
+import org.apache.james.util.Size;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -169,7 +170,8 @@ public class SMTPServer extends AbstractProtocolAsyncServer 
implements SMTPServe
 
             // get the message size limit from the conf file and multiply
             // by 1024, to put it in bytes
-            maxMessageSize = configuration.getLong("maxmessagesize", 
maxMessageSize) * 1024;
+            maxMessageSize = 
Size.parse(configuration.getString("maxmessagesize", "0"), Size.Unit.K)
+                .asBytes();
             if (maxMessageSize > 0) {
                 LOGGER.info("The maximum allowed message size is {} bytes.", 
maxMessageSize);
             } else {

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to