diff options
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.java | 75 |
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 |