| package org.simpleframework.transport; |
| |
| import java.net.InetSocketAddress; |
| import java.net.SocketAddress; |
| import java.nio.ByteBuffer; |
| import java.nio.channels.SocketChannel; |
| |
| import junit.framework.TestCase; |
| |
| import org.simpleframework.transport.trace.MockTrace; |
| import org.simpleframework.transport.trace.Trace; |
| |
| public class SocketBufferTest extends TestCase { |
| |
| |
| public void testBulkWrite() throws Exception { |
| ServerBuffer reader = new ServerBuffer(); |
| SocketAddress address = new InetSocketAddress("localhost", reader.getPort()); |
| SocketChannel channel = SocketChannel.open(); |
| channel.configureBlocking(false); // underlying socket must be non-blocking |
| channel.connect(address); |
| |
| while(!channel.finishConnect()) { // wait to finish connection |
| Thread.sleep(10); |
| }; |
| Trace trace = new MockTrace(); |
| SocketWrapper wrapper = new SocketWrapper(channel, trace); |
| SocketBuffer builder = new SocketBuffer(wrapper, 100, 4096); |
| |
| for(int i = 0; i < 10000; i++){ |
| ByteBuffer buf = ByteBuffer.wrap(("message-"+i+"\n").getBytes()); |
| |
| if(i > 18) { |
| System.err.println("FAIL......."+i); |
| } |
| if(!builder.write(buf)){ |
| while(!builder.flush()) { |
| System.err.println("FLUSHING!!!"); |
| Thread.sleep(1); |
| } |
| } |
| } |
| while(!builder.flush()) { |
| System.err.println("FLUSHING!!!"); |
| } |
| builder.close(); |
| reader.awaitClose(); |
| |
| String data = reader.getBuffer().toString(); |
| String[] list = data.split("\\n"); |
| |
| for(int i = 0; i < 10000; i++){ |
| String msg = list[i]; |
| if(!msg.equals("message-"+i)) { |
| System.err.println(list[i]); |
| } |
| assertEquals("At index " + i + " value="+list[i] +" expect message-"+i, list[i], "message-"+i); |
| } |
| } |
| |
| public void testSimpleWrite() throws Exception { |
| ServerBuffer reader = new ServerBuffer(); |
| SocketAddress address = new InetSocketAddress("localhost", reader.getPort()); |
| SocketChannel channel = SocketChannel.open(); |
| channel.configureBlocking(false); // underlying socket must be non-blocking |
| channel.connect(address); |
| |
| while(!channel.finishConnect()) { // wait to finish connection |
| Thread.sleep(10); |
| }; |
| Trace trace = new MockTrace(); |
| SocketWrapper wrapper = new SocketWrapper(channel, trace); |
| SocketBuffer builder = new SocketBuffer(wrapper, 100, 4096); |
| |
| builder.write(ByteBuffer.wrap("hello there ".getBytes())); |
| builder.write(ByteBuffer.wrap("this ".getBytes())); |
| builder.write(ByteBuffer.wrap("is ".getBytes())); |
| builder.write(ByteBuffer.wrap("a ".getBytes())); |
| builder.write(ByteBuffer.wrap("test".getBytes())); |
| builder.flush(); |
| builder.close(); |
| reader.awaitClose(); |
| |
| assertEquals(reader.getBuffer().toString(), "hello there this is a test"); |
| } |
| } |