public void testDelayedGetInputStream() throws Exception { StubConnectObserver stub = setupConnection(); InetSocketAddress addr = new InetSocketAddress("127.0.0.1", PORT_1); AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket(); socket.setSoTimeout(1000); socket.connect(addr); stub.waitForResponse(5000); Socket accepted = stub.getSocket(); assertNotNull(accepted); byte[] rnd = new byte[100]; new Random().nextBytes(rnd); accepted.getOutputStream().write(rnd); // this'll go immediately into the buffer ICROAdapter icro = new ICROAdapter(); ByteBuffer read = icro.getReadBuffer(); assertEquals(0, read.position()); socket.setReadObserver(icro); Thread.sleep(500); // let NIODispatcher to its thang. assertEquals(100, read.position()); // data was transferred to the reader. for (int i = 0; i < 100; i++) assertEquals(rnd[i], read.get(i)); InputStream stream = socket.getInputStream(); byte[] readData = new byte[100]; assertEquals(100, stream.read(readData)); assertEquals(rnd, readData); assertEquals(0, read.position()); // moved to the InputStream new Random().nextBytes(rnd); accepted.getOutputStream().write(rnd); // write some more, make sure it goes to stream Thread.sleep(500); assertEquals(0, read.position()); assertEquals(100, stream.read(readData)); assertEquals(rnd, readData); socket.close(); }
public void testSoTimeoutUsedForNonBlockingRead() throws Exception { StubConnectObserver stub = setupConnection(); InetSocketAddress addr = new InetSocketAddress("127.0.0.1", PORT_1); AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket(); socket.setSoTimeout(1000); socket.connect(addr); stub.waitForResponse(1000); Socket accepted = stub.getSocket(); assertNotNull(accepted); accepted.getOutputStream().write(new byte[100]); // this'll go immediately into the buffer socket.getInputStream().read(new byte[100]); Thread.sleep(2000); assertTrue(!socket.isClosed()); // didn't close 'cause we're using stream reading accepted.getOutputStream().write(new byte[1]); // give it some data just to make sure it has socket.setReadObserver(new ReadTester()); Thread.sleep(2000); assertTrue(socket.isClosed()); // closed because we switched to NB reading w/ timeout set }