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 er...@apache.org on 2013/03/11 07:40:29 UTC
svn commit: r1455012 - in /james/mpt/trunk:
core/src/main/java/org/apache/james/mpt/
impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/
Author: eric
Date: Mon Mar 11 06:40:28 2013
New Revision: 1455012
URL: http://svn.apache.org/r1455012
Log:
Merge ProtocolSession (MPT-4)
Removed:
james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/AbstractProtocolTestFramework.java
james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/ProtocolSession.java
Modified:
james/mpt/trunk/core/src/main/java/org/apache/james/mpt/AbstractProtocolTestFramework.java
james/mpt/trunk/core/src/main/java/org/apache/james/mpt/ProtocolSession.java
james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/AbstractSimpleScriptedTestProtocol.java
james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/FileProtocolSessionBuilder.java
Modified: james/mpt/trunk/core/src/main/java/org/apache/james/mpt/AbstractProtocolTestFramework.java
URL: http://svn.apache.org/viewvc/james/mpt/trunk/core/src/main/java/org/apache/james/mpt/AbstractProtocolTestFramework.java?rev=1455012&r1=1455011&r2=1455012&view=diff
==============================================================================
--- james/mpt/trunk/core/src/main/java/org/apache/james/mpt/AbstractProtocolTestFramework.java (original)
+++ james/mpt/trunk/core/src/main/java/org/apache/james/mpt/AbstractProtocolTestFramework.java Mon Mar 11 06:40:28 2013
@@ -22,20 +22,29 @@ package org.apache.james.mpt;
import junit.framework.TestCase;
/**
- * Abstract Protocol Test is the root of all of the scripted test
- * cases. It provides basic functionality for running a protocol session as a
- * JUnit test, and failing if exceptions are thrown. To create a test which
- * reads the entire protocol session from a single protocol definition file, use
- * the {@link AbstractSimpleScriptedTestProtocol}.
+ * Abstract Protocol Test is the root of all of the scripted test cases. It
+ * provides basic functionality for running a protocol session as a JUnit test,
+ * and failing if exceptions are thrown. To create a test which reads the entire
+ * protocol session from a single protocol definition file, use the
+ * {@link AbstractSimpleScriptedTestProtocol}.
*
* @author Darrell DeBoer
* @author Andrew C. Oliver
*/
public abstract class AbstractProtocolTestFramework extends TestCase {
+ /** The Protocol session which is run before the testElements */
+ protected ProtocolSession preElements = new ProtocolSession();
+
+ /** The Protocol session which contains the tests elements */
+ protected ProtocolSession testElements = new ProtocolSession();
+
+ /** The Protocol session which is run after the testElements. */
+ protected ProtocolSession postElements = new ProtocolSession();
+
protected final Runner runner;
private final HostSystem hostSystem;
-
+
private final String userName;
private final String password;
@@ -51,27 +60,56 @@ public abstract class AbstractProtocolTe
setUpEnvironment();
}
- protected void continueAfterFailure() {
- runner.continueAfterFailure();
- }
-
/**
- * <p>Runs the pre,test and post protocol sessions against a local copy of the
+ * <p>
+ * Runs the pre,test and post protocol sessions against a local copy of the
* Server. This is useful for rapid development and debugging.
* </p>
* Instead of sending requests to a socket connected to a running instance
- * of James, this method uses the {@link HostSystem} to simplify
- * testing. One mock instance is required per protocol session/connection.
+ * of James, this method uses the {@link HostSystem} to simplify testing.
+ * One mock instance is required per protocol session/connection.
*/
protected void runSessions() throws Exception {
- runner.runSessions(hostSystem);
+ class SessionContinuation implements Continuation {
+
+ public ProtocolSession session;
+
+ public void doContinue() {
+ if (session != null) {
+ session.doContinue();
+ }
+ }
+
+ }
+ SessionContinuation continuation = new SessionContinuation();
+
+ Session[] sessions = new Session[testElements.getSessionCount()];
+
+ for (int i = 0; i < sessions.length; i++) {
+ sessions[i] = hostSystem.newSession(continuation);
+ sessions[i].start();
+ }
+ try {
+ continuation.session = preElements;
+ preElements.runSessions(sessions);
+ continuation.session = testElements;
+ testElements.runSessions(sessions);
+ continuation.session = postElements;
+ postElements.runSessions(sessions);
+ }
+ finally {
+ for (int i = 0; i < sessions.length; i++) {
+ sessions[i].stop();
+ }
+ }
}
/**
* Initialises the host on first call.
*/
- private void setUpEnvironment() throws Exception {
+ public void setUpEnvironment() throws Exception {
hostSystem.reset();
hostSystem.addUser(userName, password);
}
+
}
Modified: james/mpt/trunk/core/src/main/java/org/apache/james/mpt/ProtocolSession.java
URL: http://svn.apache.org/viewvc/james/mpt/trunk/core/src/main/java/org/apache/james/mpt/ProtocolSession.java?rev=1455012&r1=1455011&r2=1455012&view=diff
==============================================================================
--- james/mpt/trunk/core/src/main/java/org/apache/james/mpt/ProtocolSession.java (original)
+++ james/mpt/trunk/core/src/main/java/org/apache/james/mpt/ProtocolSession.java Mon Mar 11 06:40:28 2013
@@ -25,7 +25,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;
-
/**
* A protocol session which can be run against a reader and writer, which checks
* the server response against the expected values. TODO make ProtocolSession
@@ -33,8 +32,6 @@ import java.util.regex.Pattern;
* sessions.
*
* @author Darrell DeBoer <da...@apache.org>
- *
- * @version $Revision$
*/
public class ProtocolSession implements ProtocolInteractor {
private boolean continued = false;
@@ -45,7 +42,7 @@ public class ProtocolSession implements
protected List<ProtocolElement> testElements = new ArrayList<ProtocolElement>();
- private Iterator elementsIterator;
+ private Iterator<ProtocolElement> elementsIterator;
private Session[] sessions;
@@ -77,7 +74,10 @@ public class ProtocolSession implements
* in the array corresponds to the number of the session. If an exception
* occurs, no more test elements are executed.
*
- * @param sessions not null
+ * @param out
+ * The client requests are written to here.
+ * @param in
+ * The server responses are read from here.
*/
public void runSessions(Session[] sessions) throws Exception {
this.sessions = sessions;
@@ -109,38 +109,40 @@ public class ProtocolSession implements
if (!elementsIterator.hasNext()) {
nextTest = null;
}
- } else {
+ }
+ else {
throw new RuntimeException("Unexpected continuation");
}
- } catch (Exception e) {
+ }
+ catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
- * @see org.apache.james.mpt.ProtocolInteractor#CL(java.lang.String)
+ * adds a new Client request line to the test elements
*/
public void CL(String clientLine) {
testElements.add(new ClientRequest(clientLine));
}
/**
- * @see org.apache.james.mpt.ProtocolInteractor#SL(java.lang.String, java.lang.String)
+ * adds a new Server Response line to the test elements, with the specified
+ * location.
*/
public void SL(String serverLine, String location) {
testElements.add(new ServerResponse(serverLine, location));
}
/**
- * @see org.apache.james.mpt.ProtocolInteractor#SUB(java.util.List, java.lang.String)
+ * adds a new Server Unordered Block to the test elements.
*/
public void SUB(List<String> serverLines, String location) {
- testElements
- .add(new ServerUnorderedBlockResponse(serverLines, location));
+ testElements.add(new ServerUnorderedBlockResponse(serverLines, location));
}
/**
- * @see org.apache.james.mpt.ProtocolInteractor#CL(int, java.lang.String)
+ * adds a new Client request line to the test elements
*/
public void CL(int sessionNumber, String clientLine) {
this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);
@@ -148,7 +150,7 @@ public class ProtocolSession implements
}
/**
- * @see org.apache.james.mpt.ProtocolInteractor#CONT(int)
+ * Adds a continuation. To allow one thread to be used for testing.
*/
public void CONT(int sessionNumber) throws Exception {
this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);
@@ -156,29 +158,26 @@ public class ProtocolSession implements
}
/**
- * @see org.apache.james.mpt.ProtocolInteractor#SL(int, java.lang.String, java.lang.String, java.lang.String)
+ * adds a new Server Response line to the test elements, with the specified
+ * location.
*/
- public void SL(int sessionNumber, String serverLine, String location,
- String lastClientMessage) {
+ public void SL(int sessionNumber, String serverLine, String location, String lastClientMessage) {
this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);
- testElements.add(new ServerResponse(sessionNumber, serverLine,
- location, lastClientMessage));
+ testElements.add(new ServerResponse(sessionNumber, serverLine, location, lastClientMessage));
}
/**
- * @see org.apache.james.mpt.ProtocolInteractor#SUB(int, java.util.List, java.lang.String, java.lang.String)
+ * adds a new Server Unordered Block to the test elements.
*/
- public void SUB(int sessionNumber, List<String> serverLines, String location,
- String lastClientMessage) {
+ public void SUB(int sessionNumber, List<String> serverLines, String location, String lastClientMessage) {
this.maxSessionNumber = Math.max(this.maxSessionNumber, sessionNumber);
- testElements.add(new ServerUnorderedBlockResponse(sessionNumber,
- serverLines, location, lastClientMessage));
+ testElements.add(new ServerUnorderedBlockResponse(sessionNumber, serverLines, location, lastClientMessage));
}
/**
* A client request, which write the specified message to a Writer.
*/
- private class ClientRequest implements ProtocolElement {
+ private static class ClientRequest implements ProtocolElement {
private int sessionNumber;
private String message;
@@ -202,20 +201,20 @@ public class ProtocolSession implements
}
/**
- * Writes the request message to the PrintWriters. If the sessionNumber ==
- * -1, the request is written to *all* supplied writers, otherwise, only
- * the writer for this session is writted to.
+ * Writes the request message to the PrintWriters. If the sessionNumber
+ * == -1, the request is written to *all* supplied writers, otherwise,
+ * only the writer for this session is writted to.
*
* @throws Exception
*/
- public void testProtocol(Session[] sessions,
- boolean continueAfterFailure) throws Exception {
+ public void testProtocol(Session[] sessions, boolean continueAfterFailure) throws Exception {
if (sessionNumber < 0) {
for (int i = 0; i < sessions.length; i++) {
Session session = sessions[i];
writeMessage(session);
}
- } else {
+ }
+ else {
Session session = sessions[sessionNumber];
writeMessage(session);
}
@@ -228,27 +227,6 @@ public class ProtocolSession implements
public boolean isClient() {
return true;
}
-
- /**
- * Constructs a <code>String</code> with all attributes
- * in name = value format.
- *
- * @return a <code>String</code> representation
- * of this object.
- */
- public String toString()
- {
- final String TAB = " ";
-
- String retValue = "ClientRequest ( "
- + "sessionNumber = " + this.sessionNumber + TAB
- + "message = " + this.message + TAB
- + " )";
-
- return retValue;
- }
-
-
}
/**
@@ -289,8 +267,7 @@ public class ProtocolSession implements
* @param location
* A descriptive value to use in error messages.
*/
- public ServerResponse(int sessionNumber, String expectedPattern,
- String location, String lastClientMessage) {
+ public ServerResponse(int sessionNumber, String expectedPattern, String location, String lastClientMessage) {
this.sessionNumber = sessionNumber;
this.expectedLine = expectedPattern;
this.location = location;
@@ -311,29 +288,28 @@ public class ProtocolSession implements
* If the actual server response didn't match the regular
* expression expected.
*/
- public void testProtocol(Session[] sessions,
- boolean continueAfterFailure) throws Exception {
+ public void testProtocol(Session[] sessions, boolean continueAfterFailure) throws Exception {
if (sessionNumber < 0) {
for (int i = 0; i < sessions.length; i++) {
Session session = sessions[i];
checkResponse(session, continueAfterFailure);
}
- } else {
+ }
+ else {
Session session = sessions[sessionNumber];
checkResponse(session, continueAfterFailure);
}
}
- protected void checkResponse(Session session,
- boolean continueAfterFailure) throws Exception {
+ protected void checkResponse(Session session, boolean continueAfterFailure) throws Exception {
String testLine = readLine(session);
if (!match(expectedLine, testLine)) {
- String errMsg = "\nLocation: " + location + "\nLastClientMsg: "
- + lastClientMessage + "\nExpected: '" + expectedLine
- + "'\nActual : '" + testLine + "'";
+ String errMsg = "\nLocation: " + location + "\nLastClientMsg: " + lastClientMessage + "\nExpected: '"
+ + expectedLine + "'\nActual : '" + testLine + "'";
if (continueAfterFailure) {
System.out.println(errMsg);
- } else {
+ }
+ else {
throw new InvalidServerResponseException(errMsg);
}
}
@@ -363,9 +339,9 @@ public class ProtocolSession implements
protected String readLine(Session session) throws Exception {
try {
return session.readLine();
- } catch (IOException e) {
- String errMsg = "\nLocation: " + location + "\nExpected: "
- + expectedLine + "\nReason: Server Timeout.";
+ }
+ catch (IOException e) {
+ String errMsg = "\nLocation: " + location + "\nExpected: " + expectedLine + "\nReason: Server Timeout.";
throw new InvalidServerResponseException(errMsg);
}
}
@@ -373,29 +349,6 @@ public class ProtocolSession implements
public boolean isClient() {
return false;
}
-
- /**
- * Constructs a <code>String</code> with all attributes
- * in name = value format.
- *
- * @return a <code>String</code> representation
- * of this object.
- */
- public String toString()
- {
- final String TAB = " ";
-
- String result = "ServerResponse ( "
- + "lastClientMessage = " + this.lastClientMessage + TAB
- + "sessionNumber = " + this.sessionNumber + TAB
- + "expectedLine = " + this.expectedLine + TAB
- + "location = " + this.location + TAB
- + " )";
-
- return result;
- }
-
-
}
/**
@@ -432,10 +385,9 @@ public class ProtocolSession implements
* @param location
* A descriptive location string for error messages.
*/
- public ServerUnorderedBlockResponse(int sessionNumber,
- List<String> expectedLines, String location, String lastClientMessage) {
- super(sessionNumber, "<Unordered Block>", location,
- lastClientMessage);
+ public ServerUnorderedBlockResponse(int sessionNumber, List<String> expectedLines, String location,
+ String lastClientMessage) {
+ super(sessionNumber, "<Unordered Block>", location, lastClientMessage);
this.expectedLines = expectedLines;
}
@@ -450,8 +402,7 @@ public class ProtocolSession implements
* If a line is encountered which doesn't match one of the
* expected lines.
*/
- protected void checkResponse(Session session,
- boolean continueAfterFailure) throws Exception {
+ protected void checkResponse(Session session, boolean continueAfterFailure) throws Exception {
List<String> testLines = new ArrayList<String>(expectedLines);
while (testLines.size() > 0) {
String actualLine = readLine(session);
@@ -467,10 +418,9 @@ public class ProtocolSession implements
}
if (!foundMatch) {
- StringBuffer errMsg = new StringBuffer().append(
- "\nLocation: ").append(location).append(
- "\nExpected one of: ");
- Iterator iter = expectedLines.iterator();
+ StringBuffer errMsg = new StringBuffer().append("\nLocation: ").append(location)
+ .append("\nExpected one of: ");
+ Iterator<String> iter = expectedLines.iterator();
while (iter.hasNext()) {
errMsg.append("\n ");
errMsg.append(iter.next());
@@ -478,33 +428,13 @@ public class ProtocolSession implements
errMsg.append("\nActual: ").append(actualLine);
if (continueAfterFailure) {
System.out.println(errMsg.toString());
- } else {
- throw new InvalidServerResponseException(errMsg
- .toString());
+ }
+ else {
+ throw new InvalidServerResponseException(errMsg.toString());
}
}
}
}
-
- /**
- * Constructs a <code>String</code> with all attributes
- * in name = value format.
- *
- * @return a <code>String</code> representation
- * of this object.
- */
- public String toString()
- {
- final String TAB = " ";
-
- String result = "ServerUnorderedBlockResponse ( "
- + "expectedLines = " + this.expectedLines + TAB
- + " )";
-
- return result;
- }
-
-
}
private class ContinuationElement implements ProtocolElement {
@@ -515,8 +445,7 @@ public class ProtocolSession implements
this.sessionNumber = sessionNumber < 0 ? 0 : sessionNumber;
}
- public void testProtocol(Session[] sessions,
- boolean continueAfterFailure) throws Exception {
+ public void testProtocol(Session[] sessions, boolean continueAfterFailure) throws Exception {
Session session = sessions[sessionNumber];
continuationExpected = true;
continued = false;
@@ -525,7 +454,8 @@ public class ProtocolSession implements
final String message = "Expected continuation";
if (continueAfterFailure) {
System.out.print(message);
- } else {
+ }
+ else {
throw new InvalidServerResponseException(message);
}
}
@@ -540,26 +470,6 @@ public class ProtocolSession implements
public boolean isClient() {
return false;
}
-
- /**
- * Constructs a <code>String</code> with all attributes
- * in name = value format.
- *
- * @return a <code>String</code> representation
- * of this object.
- */
- public String toString()
- {
- final String TAB = " ";
-
- String result = "ContinuationElement ( "
- + "sessionNumber = " + this.sessionNumber + TAB
- + " )";
-
- return result;
- }
-
-
}
/**
@@ -572,40 +482,42 @@ public class ProtocolSession implements
/**
* Executes the ProtocolElement against the supplied session.
*
- * @param continueAfterFailure true when the execution should continue,
- * false otherwise
+ * @param continueAfterFailure
+ * TODO
* @throws Exception
*/
- void testProtocol(Session[] sessions,
- boolean continueAfterFailure) throws Exception;
+ void testProtocol(Session[] sessions, boolean continueAfterFailure) throws Exception;
boolean isClient();
}
/**
- * Constructs a <code>String</code> with all attributes
- * in name = value format.
- *
- * @return a <code>String</code> representation
- * of this object.
+ * An exception which is thrown when the actual response from a server is
+ * different from that expected.
*/
- public String toString()
- {
+ @SuppressWarnings("serial")
+ public static class InvalidServerResponseException extends Exception {
+ public InvalidServerResponseException(String message) {
+ super(message);
+ }
+ }
+
+ /**
+ * Constructs a <code>String</code> with all attributes in name = value
+ * format.
+ *
+ * @return a <code>String</code> representation of this object.
+ */
+ public String toString() {
final String TAB = " ";
-
- String result = "ProtocolSession ( "
- + "continued = " + this.continued + TAB
- + "continuationExpected = " + this.continuationExpected + TAB
- + "maxSessionNumber = " + this.maxSessionNumber + TAB
- + "testElements = " + this.testElements + TAB
- + "elementsIterator = " + this.elementsIterator + TAB
- + "sessions = " + this.sessions + TAB
- + "nextTest = " + this.nextTest + TAB
- + "continueAfterFailure = " + this.continueAfterFailure + TAB
- + " )";
-
+
+ String result = "ProtocolSession ( " + "continued = " + this.continued + TAB + "continuationExpected = "
+ + this.continuationExpected + TAB + "maxSessionNumber = " + this.maxSessionNumber + TAB
+ + "testElements = " + this.testElements + TAB + "elementsIterator = " + this.elementsIterator + TAB
+ + "sessions = " + this.sessions + TAB + "nextTest = " + this.nextTest + TAB + "continueAfterFailure = "
+ + this.continueAfterFailure + TAB + " )";
+
return result;
}
-
-
+
}
Modified: james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/AbstractSimpleScriptedTestProtocol.java
URL: http://svn.apache.org/viewvc/james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/AbstractSimpleScriptedTestProtocol.java?rev=1455012&r1=1455011&r2=1455012&view=diff
==============================================================================
--- james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/AbstractSimpleScriptedTestProtocol.java (original)
+++ james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/AbstractSimpleScriptedTestProtocol.java Mon Mar 11 06:40:28 2013
@@ -23,10 +23,11 @@ import java.io.InputStream;
import java.util.Locale;
import org.apache.commons.io.IOUtils;
+import org.apache.james.mpt.AbstractProtocolTestFramework;
import org.apache.james.mpt.HostSystem;
+import org.apache.james.mpt.ProtocolSession;
import org.junit.After;
-
/**
* A Protocol test which reads the test protocol session from a file. The file
* read is taken as "<test-name>.test", where <test-name> is the value passed
@@ -34,8 +35,7 @@ import org.junit.After;
* and {@link #postElements} for extra elements not defined in the protocol
* session file.
*/
-public abstract class AbstractSimpleScriptedTestProtocol extends
- AbstractProtocolTestFramework {
+public abstract class AbstractSimpleScriptedTestProtocol extends AbstractProtocolTestFramework {
private FileProtocolSessionBuilder builder = new FileProtocolSessionBuilder();
private static final Locale BASE_DEFAULT_LOCALE = Locale.getDefault();
@@ -46,12 +46,15 @@ public abstract class AbstractSimpleScri
* Sets up a SimpleFileProtocolTest which reads the protocol session from a
* file of name "<fileName>.test". This file should be available in the
* classloader in the same location as this test class.
- * @param scriptDirectory name of the directory containing the scripts to be run
+ *
+ * @param scriptDirectory
+ * name of the directory containing the scripts to be run
* @param fileName
* The name of the file to read protocol elements from.
- * @throws Exception
+ * @throws Exception
*/
- public AbstractSimpleScriptedTestProtocol(HostSystem hostSystem, String userName, String password, String scriptDirectory) throws Exception {
+ public AbstractSimpleScriptedTestProtocol(HostSystem hostSystem, String userName, String password,
+ String scriptDirectory) throws Exception {
super(hostSystem, userName, password);
this.scriptDirectory = scriptDirectory;
}
@@ -96,7 +99,8 @@ public abstract class AbstractSimpleScri
try {
builder.addProtocolLinesFromStream(is, session, fileName);
- } finally {
+ }
+ finally {
IOUtils.closeQuietly(is);
}
}
Modified: james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/FileProtocolSessionBuilder.java
URL: http://svn.apache.org/viewvc/james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/FileProtocolSessionBuilder.java?rev=1455012&r1=1455011&r2=1455012&view=diff
==============================================================================
--- james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/FileProtocolSessionBuilder.java (original)
+++ james/mpt/trunk/impl/imap-mailbox/src/test/java/org/apache/james/mpt/imapmailbox/base/FileProtocolSessionBuilder.java Mon Mar 11 06:40:28 2013
@@ -26,7 +26,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.IOUtils;
-
+import org.apache.james.mpt.ProtocolSession;
/**
* A builder which generates a ProtocolSession from a test file.
@@ -58,8 +58,7 @@ public class FileProtocolSessionBuilder
* The name of the protocol session file.
* @return The ProtocolSession
*/
- public ProtocolSession buildProtocolSession(String fileName)
- throws Exception {
+ public ProtocolSession buildProtocolSession(String fileName) throws Exception {
ProtocolSession session = new ProtocolSession();
addTestFile(fileName, session);
return session;
@@ -74,8 +73,7 @@ public class FileProtocolSessionBuilder
* @param session
* The ProtocolSession to add the elements to.
*/
- public void addTestFile(String fileName, ProtocolSession session)
- throws Exception {
+ public void addTestFile(String fileName, ProtocolSession session) throws Exception {
// Need to find local resource.
InputStream is = this.getClass().getResourceAsStream(fileName);
if (is == null) {
@@ -84,7 +82,8 @@ public class FileProtocolSessionBuilder
try {
addProtocolLinesFromStream(is, session, fileName);
- } finally {
+ }
+ finally {
IOUtils.closeQuietly(is);
}
}
@@ -100,8 +99,7 @@ public class FileProtocolSessionBuilder
* @param fileName
* The name of the source file, for error messages.
*/
- public void addProtocolLinesFromStream(InputStream is,
- ProtocolSession session, String fileName) throws Exception {
+ public void addProtocolLinesFromStream(InputStream is, ProtocolSession session, String fileName) throws Exception {
int sessionNumber = -1;
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
try {
@@ -112,31 +110,33 @@ public class FileProtocolSessionBuilder
String location = fileName + ":" + lineNumber;
if (SERVER_CONTINUATION_TAG.equals(next)) {
session.CONT(sessionNumber);
- } else if (next.startsWith(CLIENT_TAG)) {
+ }
+ else if (next.startsWith(CLIENT_TAG)) {
String clientMsg = "";
if (next.length() > 3) {
clientMsg = next.substring(3);
}
session.CL(sessionNumber, clientMsg);
lastClientMsg = clientMsg;
- } else if (next.startsWith(SERVER_TAG)) {
+ }
+ else if (next.startsWith(SERVER_TAG)) {
String serverMsg = "";
if (next.length() > 3) {
serverMsg = next.substring(3);
}
session.SL(sessionNumber, serverMsg, location, lastClientMsg);
- } else if (next.startsWith(OPEN_UNORDERED_BLOCK_TAG)) {
+ }
+ else if (next.startsWith(OPEN_UNORDERED_BLOCK_TAG)) {
List<String> unorderedLines = new ArrayList<String>(5);
next = reader.readLine();
-
+
if (next == null)
throw new Exception("Readline doesn't contain any data, but must not be 'null' (linenumber="
+ lineNumber);
while (!next.startsWith(CLOSE_UNORDERED_BLOCK_TAG)) {
if (!next.startsWith(SERVER_TAG)) {
- throw new Exception(
- "Only 'S: ' lines are permitted inside a 'SUB {' block.");
+ throw new Exception("Only 'S: ' lines are permitted inside a 'SUB {' block.");
}
String serverMsg = next.substring(3);
unorderedLines.add(serverMsg);
@@ -144,23 +144,25 @@ public class FileProtocolSessionBuilder
lineNumber++;
if (next == null)
- throw new Exception("Readline doesn't contain any data, but must not be 'null' (linenumber="
- + lineNumber);
+ throw new Exception(
+ "Readline doesn't contain any data, but must not be 'null' (linenumber="
+ + lineNumber);
}
-
- session.SUB(sessionNumber, unorderedLines, location,
- lastClientMsg);
- } else if (next.startsWith(COMMENT_TAG)
- || next.trim().length() == 0) {
+
+ session.SUB(sessionNumber, unorderedLines, location, lastClientMsg);
+ }
+ else if (next.startsWith(COMMENT_TAG) || next.trim().length() == 0) {
// ignore these lines.
- } else if (next.startsWith(SESSION_TAG)) {
+ }
+ else if (next.startsWith(SESSION_TAG)) {
String number = next.substring(SESSION_TAG.length()).trim();
if (number.length() == 0) {
throw new Exception("No session number specified");
}
sessionNumber = Integer.parseInt(number);
- } else {
+ }
+ else {
String prefix = next;
if (next.length() > 3) {
prefix = next.substring(0, 3);
@@ -169,7 +171,8 @@ public class FileProtocolSessionBuilder
}
lineNumber++;
}
- } finally {
+ }
+ finally {
IOUtils.closeQuietly(reader);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org