public void testBlockingConnectTimesOut() throws Exception {
   AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket();
   try {
     socket.connect(new InetSocketAddress("127.0.0.1", 9999), 1000);
     fail("shouldn't have connected");
   } catch (SocketTimeoutException iox) {
     assertEquals("operation timed out (1000)", iox.getMessage());
   }
 }
 public void testBlockingConnectFailing() throws Exception {
   AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket();
   try {
     socket.connect(new InetSocketAddress("127.0.0.1", 9999));
     fail("shouldn't have connected");
   } catch (ConnectException iox) {
     assertFalse(socket.isConnected());
   }
 }
 public void testBlockingConnect() throws Exception {
   setupConnection();
   AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket();
   socket.connect(new InetSocketAddress("127.0.0.1", PORT_1));
   assertTrue(socket.isConnected());
   socket.close();
   Thread.sleep(500);
   assertFalse(socket.isConnected());
 }
 public void testNonBlockingConnectTimesOut() throws Exception {
   AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket();
   StubConnectObserver observer = new StubConnectObserver();
   socket.connect(new InetSocketAddress("127.0.0.1", PORT_1), 1000, observer);
   observer.waitForResponse(1500);
   assertTrue(observer.isShutdown());
   assertNull(observer.getSocket());
   assertNull(observer.getIoException()); // NIOSocket swallows the IOX.
   assertFalse(socket.isConnected());
 }
  public void testNonBlockingConnectFailing() throws Exception {
    AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket();
    StubConnectObserver observer = new StubConnectObserver();

    // UDPConnectionProcessor has a default connect timeout of 20 seconds,
    // so we set our timeout at 40 seconds to ensure it doesn't fail because
    // of the timeout.
    socket.connect(new InetSocketAddress("127.0.0.1", PORT_1), 40000, observer);
    observer.waitForResponse(30000);

    assertTrue(observer.isShutdown());
    assertNull(observer.getSocket());
    assertNull(observer.getIoException()); // NIOSocket swallows the IOX.
    assertFalse(socket.isConnected());
  }
 public void testNonBlockingConnect() throws Exception {
   setupConnection();
   AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket();
   StubConnectObserver observer = new StubConnectObserver();
   socket.connect(new InetSocketAddress("127.0.0.1", PORT_1), 5000, observer);
   observer.waitForResponse(5500);
   assertTrue(socket.isConnected());
   assertSame(socket, observer.getSocket());
   assertFalse(observer.isShutdown());
   assertNull(observer.getIoException());
   socket.close();
   Thread.sleep(500);
   assertFalse(observer.isShutdown()); // doesn't get both connect & shutdown
   assertFalse(socket.isConnected());
 }
  public void testSetReadObserverGoesThroughChains() throws Exception {
    AbstractNBSocket socket = udpSelectorProvider.openSocketChannel().socket();

    RCROAdapter entry = new RCROAdapter();
    socket.setReadObserver(entry);
    Thread.sleep(1000);
    assertInstanceof(UDPSocketChannel.class, entry.getReadChannel());

    RCRAdapter chain1 = new RCRAdapter();
    entry.setReadChannel(chain1);
    socket.setReadObserver(entry);
    Thread.sleep(1000);
    assertInstanceof(UDPSocketChannel.class, chain1.getReadChannel());
    assertSame(chain1, entry.getReadChannel());

    RCRAdapter chain2 = new RCRAdapter();
    chain1.setReadChannel(chain2);
    socket.setReadObserver(entry);
    Thread.sleep(1000);
    assertInstanceof(UDPSocketChannel.class, chain2.getReadChannel());
    assertSame(chain2, chain1.getReadChannel());
    assertSame(chain1, entry.getReadChannel());
  }
  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
  }
  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();
  }
 private StubConnectObserver setupConnection() throws Exception {
   AbstractNBSocket conn = udpSelectorProvider.openAcceptorSocketChannel().socket();
   StubConnectObserver stub = new StubConnectObserver();
   conn.connect(new InetSocketAddress("127.0.0.1", PORT_2), 5000, stub);
   return stub;
 }