summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrismair <chrismair@531de8e6-9941-0410-b38b-9a92acbe0330>2011-06-05 12:15:56 +0000
committerchrismair <chrismair@531de8e6-9941-0410-b38b-9a92acbe0330>2011-06-05 12:15:56 +0000
commit63789083e958081738bc2208fa5abdc5a4ef2084 (patch)
tree64e963fb4e75e3255be9610ac83d5938059e3606
parent6ca86794ae02c4a066c16de5f16c6675c999f781 (diff)
downloadmockftpserver-63789083e958081738bc2208fa5abdc5a4ef2084.tar.gz
Add a new readData(int numBytes) to Session
git-svn-id: svn://svn.code.sf.net/p/mockftpserver/code@254 531de8e6-9941-0410-b38b-9a92acbe0330
-rw-r--r--MockFtpServer/CHANGELOG.txt3
-rw-r--r--MockFtpServer/src/main/java/org/mockftpserver/core/session/DefaultSession.java11
-rw-r--r--MockFtpServer/src/main/java/org/mockftpserver/core/session/Session.java7
-rw-r--r--MockFtpServer/src/test/groovy/org/mockftpserver/core/session/StubSession.groovy8
-rw-r--r--MockFtpServer/src/test/java/org/mockftpserver/core/session/DefaultSessionTest.java27
5 files changed, 53 insertions, 3 deletions
diff --git a/MockFtpServer/CHANGELOG.txt b/MockFtpServer/CHANGELOG.txt
index 3f8fe77..56de958 100644
--- a/MockFtpServer/CHANGELOG.txt
+++ b/MockFtpServer/CHANGELOG.txt
@@ -1,9 +1,10 @@
MockFtpServer Change Log
-------------------------------------------------------------------------------
-Changes in version 2.3 (?? Mar 2011)
+Changes in version 2.3 (?? Jun 2011)
------------------------------------------
- BUG #3103132: shutting down takes too long.
+- FEATURE #3304849: Add a new readData(int numBytes) to Session
Changes in version 2.2 (23 Mar 2010)
diff --git a/MockFtpServer/src/main/java/org/mockftpserver/core/session/DefaultSession.java b/MockFtpServer/src/main/java/org/mockftpserver/core/session/DefaultSession.java
index ce50d04..31d8cfe 100644
--- a/MockFtpServer/src/main/java/org/mockftpserver/core/session/DefaultSession.java
+++ b/MockFtpServer/src/main/java/org/mockftpserver/core/session/DefaultSession.java
@@ -249,16 +249,23 @@ public class DefaultSession implements Session {
* @see org.mockftpserver.core.session.Session#readData()
*/
public byte[] readData() {
+ return readData(Integer.MAX_VALUE);
+ }
+ /**
+ * @see org.mockftpserver.core.session.Session#readData()
+ */
+ public byte[] readData(int numBytes) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
-
+ int numBytesRead = 0;
try {
- while (true) {
+ while (numBytesRead < numBytes) {
int b = dataInputStream.read();
if (b == -1) {
break;
}
bytes.write(b);
+ numBytesRead++;
}
return bytes.toByteArray();
}
diff --git a/MockFtpServer/src/main/java/org/mockftpserver/core/session/Session.java b/MockFtpServer/src/main/java/org/mockftpserver/core/session/Session.java
index d17c265..9143f77 100644
--- a/MockFtpServer/src/main/java/org/mockftpserver/core/session/Session.java
+++ b/MockFtpServer/src/main/java/org/mockftpserver/core/session/Session.java
@@ -72,6 +72,13 @@ public interface Session extends Runnable {
public byte[] readData();
/**
+ * Read and return (up to) numBytes of data from the client across the data connection
+ *
+ * @return the data that was read; the byte[] will be up to numBytes bytes long
+ */
+ public byte[] readData(int numBytes);
+
+ /**
* Return the InetAddress representing the client host for this session
* @return the client host
*/
diff --git a/MockFtpServer/src/test/groovy/org/mockftpserver/core/session/StubSession.groovy b/MockFtpServer/src/test/groovy/org/mockftpserver/core/session/StubSession.groovy
index db55797..139fcf9 100644
--- a/MockFtpServer/src/test/groovy/org/mockftpserver/core/session/StubSession.groovy
+++ b/MockFtpServer/src/test/groovy/org/mockftpserver/core/session/StubSession.groovy
@@ -95,6 +95,14 @@ class StubSession implements Session {
}
/**
+ * @see org.mockftpserver.core.session.Session#readData()
+ */
+ public byte[] readData(int numBytes) {
+ assert dataConnectionOpen, "The data connection must be OPEN"
+ return dataToRead
+ }
+
+ /**
* @see org.mockftpserver.core.session.Session#removeAttribute(java.lang.String)
*/
public void removeAttribute(String name) {
diff --git a/MockFtpServer/src/test/java/org/mockftpserver/core/session/DefaultSessionTest.java b/MockFtpServer/src/test/java/org/mockftpserver/core/session/DefaultSessionTest.java
index c58ecf8..cac7e8d 100644
--- a/MockFtpServer/src/test/java/org/mockftpserver/core/session/DefaultSessionTest.java
+++ b/MockFtpServer/src/test/java/org/mockftpserver/core/session/DefaultSessionTest.java
@@ -235,6 +235,33 @@ public final class DefaultSessionTest extends AbstractTestCase {
}
/**
+ * Test the readData(int) method
+ */
+ public void testReadData_NumBytes() {
+ final int NUM_BYTES = 5;
+ final String EXPECTED_DATA = DATA.substring(0, NUM_BYTES);
+ StubSocket stubSocket = createTestSocket(DATA);
+ session.socketFactory = new StubSocketFactory(stubSocket);
+ session.setClientDataHost(clientHost);
+
+ session.openDataConnection();
+ byte[] data = session.readData(NUM_BYTES);
+ LOG.info("data=[" + new String(data) + "]");
+ assertEquals("data", EXPECTED_DATA.getBytes(), data);
+ }
+
+ public void testReadData_NumBytes_AskForMoreBytesThanThereAre() {
+ StubSocket stubSocket = createTestSocket(DATA);
+ session.socketFactory = new StubSocketFactory(stubSocket);
+ session.setClientDataHost(clientHost);
+
+ session.openDataConnection();
+ byte[] data = session.readData(10000);
+ LOG.info("data=[" + new String(data) + "]");
+ assertEquals("data", DATA.getBytes(), data);
+ }
+
+ /**
* Test the closeDataConnection() method
*/
public void testCloseDataConnection() {