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 ad...@apache.org on 2017/02/14 12:05:52 UTC

[07/12] james-project git commit: JAMES-1930 Introduce MPT REINIT command

JAMES-1930 Introduce MPT REINIT command


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bdf89328
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bdf89328
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bdf89328

Branch: refs/heads/master
Commit: bdf89328fcfae95853a20c477422fca70cc3216d
Parents: bf28358
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Feb 9 17:43:55 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Tue Feb 14 11:29:30 2017 +0100

----------------------------------------------------------------------
 .../java/org/apache/james/mpt/api/Session.java  |  7 ++++++
 .../protocol/FileProtocolSessionBuilder.java    |  3 +++
 .../james/mpt/protocol/ProtocolSession.java     | 25 +++++++++++++++++++-
 .../mpt/protocol/ProtocolSessionBuilder.java    |  2 ++
 .../james/mpt/session/ExternalSession.java      |  5 ++++
 .../james/mpt/host/JamesImapHostSystem.java     |  4 ++++
 .../james/mpt/host/ManageSieveSession.java      |  4 ++++
 7 files changed, 49 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java b/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
index 9dd9919..170b365 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
@@ -47,6 +47,13 @@ public interface Session {
     void start() throws Exception;
 
     /**
+     * Reopens the session to reinitialize the server state
+     * 
+     * @throws Exception
+     */
+    void restart() throws Exception;
+
+    /**
      * Closes the session.
      * 
      * @throws Exception

http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
index 5dea7c8..3648a11 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
@@ -138,6 +138,9 @@ public class FileProtocolSessionBuilder extends ProtocolSessionBuilder {
                         throw new Exception("Unrecognized log level for " + next);
                     }
                 }
+                else if (next.startsWith(REINIT)) {
+                    session.REINIT(sessionNumber);
+                }
                 else if (next.startsWith(OPEN_UNORDERED_BLOCK_TAG)) {
                     List<String> unorderedLines = new ArrayList<String>(5);
                     next = reader.readLine();

http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
index 1afd1f4..5045acb 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
@@ -202,6 +202,11 @@ public class ProtocolSession implements ProtocolInteractor {
         testElements.add(new LogElement(level, message));
     }
 
+    public void REINIT(int sessionNumber) {
+        this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);
+        testElements.add(new ReinitElement(sessionNumber));
+    }
+
     /**
      * A client request, which write the specified message to a Writer.
      */
@@ -467,7 +472,7 @@ public class ProtocolSession implements ProtocolInteractor {
         private final int sessionNumber;
 
         public ContinuationElement(int sessionNumber) throws Exception {
-            this.sessionNumber = sessionNumber < 0 ? 0 : sessionNumber;
+            this.sessionNumber = Math.max(0, sessionNumber);
         }
 
         public void testProtocol(Session[] sessions, boolean continueAfterFailure) throws Exception {
@@ -497,6 +502,24 @@ public class ProtocolSession implements ProtocolInteractor {
         }
     }
 
+    private class ReinitElement implements ProtocolElement {
+
+        private final int sessionNumber;
+
+        public ReinitElement(int sessionNumber) {
+            this.sessionNumber = Math.max(0, sessionNumber);
+        }
+
+        public void testProtocol(Session[] sessions, boolean continueAfterFailure) throws Exception {
+            Session session = sessions[sessionNumber];
+            session.restart();
+        }
+
+        public boolean isClient() {
+            return false;
+        }
+    }
+
     /**
      * Allow you to wait a given time at a given point of the test script
      */

http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
index 2f4db62..657c64a 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
@@ -57,6 +57,8 @@ public class ProtocolSessionBuilder {
 
     public static final String SESSION_TAG = "SESSION:";
 
+    public static final String REINIT = "REINIT";
+
     private final Properties variables;
     
     public ProtocolSessionBuilder() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
----------------------------------------------------------------------
diff --git a/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java b/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
index 5eb1b74..9c65851 100644
--- a/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
+++ b/mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
@@ -26,6 +26,7 @@ import java.nio.charset.Charset;
 import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.commons.lang.mutable.MutableInt;
 import org.apache.james.mpt.api.Monitor;
 import org.apache.james.mpt.api.Session;
@@ -151,6 +152,10 @@ public final class ExternalSession implements Session {
         }
     }
 
+    public void restart() throws Exception {
+        throw new NotImplementedException("Restart is not implemented for ExternalSession");
+    }
+
     public void stop() throws Exception {
         monitor.note("closing");
         socket.close();

http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
----------------------------------------------------------------------
diff --git a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
index 1251cff..e2be945 100644
--- a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
+++ b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
@@ -105,6 +105,10 @@ public abstract class JamesImapHostSystem implements ImapHostSystem {
             out.write("* OK IMAP4rev1 Server ready\r\n");
         }
 
+        public void restart() throws Exception {
+            session = new ImapSessionImpl(LoggerFactory.getLogger("sessionLog"));
+        }
+
         public void stop() throws Exception {
             session.deselect();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/bdf89328/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
----------------------------------------------------------------------
diff --git a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
index 05eaa1a..7c1f913 100644
--- a/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
+++ b/mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
@@ -81,6 +81,10 @@ public class ManageSieveSession implements Session {
     }
 
     @Override
+    public void restart() throws Exception {
+    }
+
+    @Override
     public void writeLine(String line) throws Exception {
         isReadLast = false;
         in.nextLine(line);


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org