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 3543fd3d5092fe0d6776194266d6785135d708ad
Author: Benoit Tellier <[email protected]>
AuthorDate: Thu May 13 12:26:22 2021 +0700

    JAMES-3574 LMTP DATA should submit a reply by recipient
    
    https://datatracker.ietf.org/doc/html/rfc2033#section-4.2
    
    ```
       [...] the server returns one reply
       for each previously successful RCPT command in the mail transaction,
       in the order that the RCPT commands were issued.  Even if there were
       multiple successful RCPT commands giving the same forward-path, there
       must be one reply for each successful RCPT command.
    ```
    
    Default implementation is compliant with this requirement.
---
 .../apache/james/lmtpserver/LmtpServerTest.java    | 29 ++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git 
a/server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java
 
b/server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java
index e624f15..41bb558 100644
--- 
a/server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java
+++ 
b/server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java
@@ -130,6 +130,7 @@ class LmtpServerTest {
         domainList.addDomain(Domain.of("examplebis.local"));
         usersRepository = MemoryUsersRepository.withVirtualHosting(domainList);
         usersRepository.addUser(Username.of("[email protected]"), "pwd");
+        usersRepository.addUser(Username.of("[email protected]"), "pwd");
 
         fileSystem = new FileSystemImpl(Configuration.builder()
             .workingDirectory("../")
@@ -340,6 +341,34 @@ class LmtpServerTest {
         }
 
         @Test
+        void dataShouldHaveAReturnCodePerRecipient() throws Exception {
+            SocketChannel server = SocketChannel.open();
+            server.connect(new InetSocketAddress(LOCALHOST_IP, 
getLmtpPort(lmtpServerFactory)));
+            readBytes(server);
+
+            server.write(ByteBuffer.wrap(("LHLO <" + DOMAIN + 
">\r\n").getBytes(StandardCharsets.UTF_8)));
+            readBytes(server);
+            server.write(ByteBuffer.wrap(("MAIL FROM: <bob@" + DOMAIN + 
">\r\n").getBytes(StandardCharsets.UTF_8)));
+            readBytes(server);
+            server.write(ByteBuffer.wrap(("RCPT TO: 
<[email protected]>\r\n").getBytes(StandardCharsets.UTF_8)));
+            readBytes(server);
+            server.write(ByteBuffer.wrap(("RCPT TO: 
<[email protected]>\r\n").getBytes(StandardCharsets.UTF_8)));
+            readBytes(server);
+            
server.write(ByteBuffer.wrap(("DATA\r\n").getBytes(StandardCharsets.UTF_8)));
+            readBytes(server); // needed to synchronize
+            
server.write(ByteBuffer.wrap(("header:value\r\n\r\nbody").getBytes(StandardCharsets.UTF_8)));
+            
server.write(ByteBuffer.wrap(("\r\n").getBytes(StandardCharsets.UTF_8)));
+            
server.write(ByteBuffer.wrap((".").getBytes(StandardCharsets.UTF_8)));
+            
server.write(ByteBuffer.wrap(("\r\n").getBytes(StandardCharsets.UTF_8)));
+             byte[] dataResponse = readBytes(server);
+            
server.write(ByteBuffer.wrap(("QUIT\r\n").getBytes(StandardCharsets.UTF_8)));
+
+            assertThat(new String(dataResponse, StandardCharsets.UTF_8))
+                .contains("250 2.6.0 Message received\r\n" +
+                    "250 2.6.0 Message received");
+        }
+
+        @Test
         void ehloShouldBeRejected() throws Exception {
             SocketChannel server = SocketChannel.open();
             server.connect(new InetSocketAddress(LOCALHOST_IP, 
getLmtpPort(lmtpServerFactory)));

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

Reply via email to