Hi everybody, I'm struggling to write a stable test for blocking write/read operation of Socket and SocketChannel.
Could you anybody help me out? On 6/23/06, Andrew Zhang <[EMAIL PROTECTED]> wrote:
Hi Alexander, Thanks for your kind reminder. Certainly I'll use sth. like Support_PortManager.getNextPort() to avoid such port conflict issue. Here I just want to describe the problem. The test still fails on my machine sometimes. Could anyone tell me how to write a stable test on this issue? Or is it a bug of RI? Or is it possible to write a theoretically stable test? Thanks a lot in advance! public void test_SocketChannel_BlockWriteRead() throws IOException { final int CAPACITY_NORMAL = 200; InetSocketAddress localAddr1 = new InetSocketAddress("127.0.0.1 ",1234); ServerSocket server = new ServerSocket(1234); SocketChannel channel = SocketChannel.open(); channel.connect(localAddr1); Socket client = server.accept (); client.setTcpNoDelay(true); client.setSendBufferSize(1); OutputStream out = client.getOutputStream(); byte[] sendBuf = new byte[CAPACITY_NORMAL * 2]; for (int i = 0; i < CAPACITY_NORMAL * 2; i++) { sendBuf[i] = (byte) i; } // send CAPACITY_NORMAL * 2 bytes data out.write(sendBuf); out.flush(); // no matter out.close() or client.shutdownOutput () is used // the test still fails sometimes. // out.close(); client.shutdownOutput(); ByteBuffer buf1 = ByteBuffer.allocate(CAPACITY_NORMAL); ByteBuffer buf2 = ByteBuffer.allocate(CAPACITY_NORMAL); ByteBuffer[] buf ={buf1, buf2}; // should receive CAPACITY_NORMAL * 2 bytes data long count = 0; do{ long ret = channel.read(buf); if(ret == -1){ break; } count += ret; }while(count < CAPACITY_NORMAL*2); assertEquals(CAPACITY_NORMAL * 2, count); } On 6/23/06, Alexander Kleymenov <[EMAIL PROTECTED]> wrote: > > Hello Andrew, > > I ran the test on RI (1.4.2_04-b05 and 1.5.0-b64) and could not > reproduce the failure. Is it still an issue? > > Can I suggest a little improvement for your test? Try do not use > hardcoded port numbers in the test. > Let the ServerSocket choose the available port by specifying 0 as > parameter. > I.e. write the test as: > > ServerSocket server = new ServerSocket(0); > InetSocketAddress localAddr1 = new InetSocketAddress("127.0.0.1", > server.getLocalPort()); > > Such a way prevents the test from "Address in use" exception. > > Thank You, > Alexander > > --------------------------------------------------------------------- > Terms of use : http://incubator.apache.org/harmony/mailing.html > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- Andrew Zhang China Software Development Lab, IBM
-- Andrew Zhang China Software Development Lab, IBM