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]
