summaryrefslogtreecommitdiffstats
path: root/simple/simple-transport/src/test/java/org/simpleframework/transport/ServerBuffer.java
diff options
context:
space:
mode:
Diffstat (limited to 'simple/simple-transport/src/test/java/org/simpleframework/transport/ServerBuffer.java')
-rw-r--r--simple/simple-transport/src/test/java/org/simpleframework/transport/ServerBuffer.java75
1 files changed, 75 insertions, 0 deletions
diff --git a/simple/simple-transport/src/test/java/org/simpleframework/transport/ServerBuffer.java b/simple/simple-transport/src/test/java/org/simpleframework/transport/ServerBuffer.java
new file mode 100644
index 0000000..34cdc0c
--- /dev/null
+++ b/simple/simple-transport/src/test/java/org/simpleframework/transport/ServerBuffer.java
@@ -0,0 +1,75 @@
+package org.simpleframework.transport;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.ServerSocket;
+import java.util.concurrent.CountDownLatch;
+
+public class ServerBuffer extends Thread {
+
+ private ByteArrayOutputStream buffer;
+ private ServerSocket server;
+ private CountDownLatch latch;
+
+ public ServerBuffer() throws Exception {
+ this.buffer = new ByteArrayOutputStream();
+ this.latch = new CountDownLatch(1);
+ this.server = getSocket();
+ this.start();
+ }
+
+ public ByteArrayOutputStream getBuffer(){
+ return buffer;
+ }
+
+ public void awaitClose() throws Exception {
+ latch.await();
+ }
+
+ public int getPort() {
+ return server.getLocalPort();
+ }
+
+ private ServerSocket getSocket() throws Exception {
+ // Scan the ephemeral port range
+ for(int i = 2000; i < 10000; i++) { // keep trying to grab the socket
+ try {
+ ServerSocket socket = new ServerSocket(i);
+ System.out.println("port=["+socket.getLocalPort()+"]");
+ return socket;
+ } catch(Exception e) {
+ Thread.sleep(200);
+ }
+ }
+ // Scan a second time for good measure, maybe something got freed up
+ for(int i = 2000; i < 10000; i++) { // keep trying to grab the socket
+ try {
+ ServerSocket socket = new ServerSocket(i);
+ System.out.println("port=["+socket.getLocalPort()+"]");
+ return socket;
+ } catch(Exception e) {
+ Thread.sleep(200);
+ }
+ }
+ throw new IOException("Could not create a client socket");
+ }
+
+ public void run() {
+ try {
+ java.net.Socket socket = server.accept();
+ InputStream in = socket.getInputStream();
+ int count = 0;
+
+ while((count = in.read()) != -1) {
+ buffer.write(count);
+ System.err.write(count);
+ System.err.flush();
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ } finally {
+ latch.countDown();
+ }
+ }
+} \ No newline at end of file