@Category(IntegrationTest.class)
  @Test
  public void addressResolutionIsAlwaysDone() throws Exception {
    TCPEchoServer echoServer = new TCPEchoServer();
    try {
      echoServer.start();

      SocketAllocator socketAllocator =
          new SocketAllocator(echoServer.getLocalSocketAddress(), 100, UTF_8, new NeverFlush());
      SocketPoolable socketPoolable = socketAllocator.allocate(mock(Slot.class));

      try {
        InetSocketAddress remoteSocketAddress =
            (InetSocketAddress) socketPoolable.getSocket().getRemoteSocketAddress();
        assertThat(remoteSocketAddress).isEqualTo(echoServer.getLocalSocketAddress());
        // FIXME: the following test is not actually good. Not really sure how to validate that DNS
        // resolution is done.
        assertThat(remoteSocketAddress).isNotSameAs(echoServer.getLocalSocketAddress());
      } finally {
        socketPoolable.getSocket().close();
      }
    } finally {
      echoServer.stop();
    }
  }
  @Test
  public void socketAndWritersAreClosed() throws Exception {
    SocketAllocator socketAllocator =
        new SocketAllocator(new InetSocketAddress("localhost", 80), 100, UTF_8, new NeverFlush());

    Socket socket = mock(Socket.class);
    Writer writer = mock(Writer.class);
    SocketPoolable socketPoolable = new SocketPoolable(null, socket, writer, new NeverFlush());
    socketAllocator.deallocate(socketPoolable);

    verify(socket).close();
    verify(writer).close();
  }