コード例 #1
0
  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();
  }
コード例 #2
0
  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
  }