Search in sources :

Example 61 with ClientRequest

use of io.undertow.client.ClientRequest in project undertow by undertow-io.

the class AjpClientTestCase method testSendPing.

@Test
public void testSendPing() throws Exception {
    // 
    final UndertowClient client = createClient();
    final List<ClientResponse> responses = new CopyOnWriteArrayList<>();
    final FutureResult<Boolean> result = new FutureResult<>();
    final CountDownLatch latch = new CountDownLatch(3);
    final ClientConnection connection = client.connect(ADDRESS, worker, DefaultServer.getBufferPool(), OptionMap.EMPTY).get();
    assertTrue(connection.isPingSupported());
    try {
        connection.getIoThread().execute(() -> {
            final ClientRequest request = new ClientRequest().setMethod(Methods.GET).setPath(MESSAGE);
            request.getRequestHeaders().put(Headers.HOST, DefaultServer.getHostAddress());
            connection.sendRequest(request, createClientCallback(responses, latch));
            connection.sendPing(new ClientConnection.PingListener() {

                @Override
                public void acknowledged() {
                    result.setResult(true);
                    latch.countDown();
                }

                @Override
                public void failed(IOException e) {
                    result.setException(e);
                    latch.countDown();
                }
            }, 5, TimeUnit.SECONDS);
            connection.sendRequest(request, createClientCallback(responses, latch));
        });
        assertTrue(latch.await(10, TimeUnit.SECONDS));
        Assert.assertEquals(2, responses.size());
        assertTrue(result.getIoFuture().get());
        for (final ClientResponse response : responses) {
            Assert.assertEquals(message, response.getAttachment(RESPONSE_BODY));
        }
        // now try a failed ping
        try {
            undertow.stop();
            final FutureResult<Boolean> failResult = new FutureResult<>();
            connection.getIoThread().execute(() -> connection.sendPing(new ClientConnection.PingListener() {

                @Override
                public void acknowledged() {
                    failResult.setResult(true);
                }

                @Override
                public void failed(IOException e) {
                    failResult.setException(e);
                }
            }, 4, TimeUnit.SECONDS));
            try {
                failResult.getIoFuture().get();
                Assert.fail("ping should have failed");
            } catch (IOException e) {
            // ignored
            }
        } finally {
            // add an extra sleep time to make sure we are not getting a BindException
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            // ignore
            }
            undertow.start();
        }
    } finally {
        IoUtils.safeClose(connection);
    }
}
Also used : ClientResponse(io.undertow.client.ClientResponse) UndertowClient(io.undertow.client.UndertowClient) IOException(java.io.IOException) CountDownLatch(java.util.concurrent.CountDownLatch) FutureResult(org.xnio.FutureResult) ClientConnection(io.undertow.client.ClientConnection) ClientRequest(io.undertow.client.ClientRequest) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Test(org.junit.Test)

Example 62 with ClientRequest

use of io.undertow.client.ClientRequest in project undertow by undertow-io.

the class AjpClientTestCase method testConnectionClose.

@Test
public void testConnectionClose() throws Exception {
    // 
    final UndertowClient client = createClient();
    final CountDownLatch latch = new CountDownLatch(1);
    final ClientConnection connection = client.connect(ADDRESS, worker, DefaultServer.getBufferPool(), OptionMap.EMPTY).get();
    try {
        ClientRequest request = new ClientRequest().setPath(MESSAGE).setMethod(Methods.GET);
        request.getRequestHeaders().put(Headers.HOST, DefaultServer.getHostAddress());
        final List<ClientResponse> responses = new CopyOnWriteArrayList<>();
        request.getRequestHeaders().add(Headers.CONNECTION, Headers.CLOSE.toString());
        connection.sendRequest(request, createClientCallback(responses, latch));
        latch.await();
        final ClientResponse response = responses.iterator().next();
        Assert.assertEquals(message, response.getAttachment(RESPONSE_BODY));
        Assert.assertFalse(connection.isOpen());
    } finally {
        IoUtils.safeClose(connection);
    }
}
Also used : ClientResponse(io.undertow.client.ClientResponse) UndertowClient(io.undertow.client.UndertowClient) ClientConnection(io.undertow.client.ClientConnection) CountDownLatch(java.util.concurrent.CountDownLatch) ClientRequest(io.undertow.client.ClientRequest) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Test(org.junit.Test)

Example 63 with ClientRequest

use of io.undertow.client.ClientRequest in project undertow by undertow-io.

the class HttpClientTestCase method testConnectionClose.

@Test
public void testConnectionClose() throws Exception {
    // 
    final UndertowClient client = createClient();
    final CountDownLatch latch = new CountDownLatch(1);
    final ClientConnection connection = client.connect(ADDRESS, worker, DefaultServer.getBufferPool(), OptionMap.EMPTY).get();
    try {
        ClientRequest request = new ClientRequest().setPath(MESSAGE).setMethod(Methods.GET);
        request.getRequestHeaders().put(Headers.HOST, DefaultServer.getHostAddress());
        final List<ClientResponse> responses = new CopyOnWriteArrayList<>();
        request.getRequestHeaders().add(Headers.CONNECTION, Headers.CLOSE.toString());
        connection.sendRequest(request, createClientCallback(responses, latch));
        latch.await();
        final ClientResponse response = responses.iterator().next();
        Assert.assertEquals(message, response.getAttachment(RESPONSE_BODY));
        Assert.assertEquals(false, connection.isOpen());
    } finally {
        IoUtils.safeClose(connection);
    }
}
Also used : ClientResponse(io.undertow.client.ClientResponse) UndertowClient(io.undertow.client.UndertowClient) ClientConnection(io.undertow.client.ClientConnection) CountDownLatch(java.util.concurrent.CountDownLatch) ClientRequest(io.undertow.client.ClientRequest) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Test(org.junit.Test)

Example 64 with ClientRequest

use of io.undertow.client.ClientRequest in project undertow by undertow-io.

the class HttpClientTestCase method testSsl.

@Test
public void testSsl() throws Exception {
    // 
    final UndertowClient client = createClient();
    final List<ClientResponse> responses = new CopyOnWriteArrayList<>();
    final CountDownLatch latch = new CountDownLatch(10);
    DefaultServer.startSSLServer();
    SSLContext context = DefaultServer.getClientSSLContext();
    XnioSsl ssl = new UndertowXnioSsl(DefaultServer.getWorker().getXnio(), OptionMap.EMPTY, DefaultServer.SSL_BUFFER_POOL, context);
    final ClientConnection connection = client.connect(new URI(DefaultServer.getDefaultServerSSLAddress()), worker, ssl, DefaultServer.getBufferPool(), OptionMap.EMPTY).get();
    try {
        connection.getIoThread().execute(new Runnable() {

            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    final ClientRequest request = new ClientRequest().setMethod(Methods.GET).setPath(MESSAGE);
                    request.getRequestHeaders().put(Headers.HOST, DefaultServer.getHostAddress());
                    connection.sendRequest(request, createClientCallback(responses, latch));
                }
            }
        });
        latch.await(10, TimeUnit.SECONDS);
        Assert.assertEquals(10, responses.size());
        for (final ClientResponse response : responses) {
            Assert.assertEquals(message, response.getAttachment(RESPONSE_BODY));
        }
    } finally {
        connection.getIoThread().execute(new Runnable() {

            @Override
            public void run() {
                IoUtils.safeClose(connection);
            }
        });
        DefaultServer.stopSSLServer();
    }
}
Also used : ClientResponse(io.undertow.client.ClientResponse) XnioSsl(org.xnio.ssl.XnioSsl) UndertowXnioSsl(io.undertow.protocols.ssl.UndertowXnioSsl) UndertowClient(io.undertow.client.UndertowClient) SSLContext(javax.net.ssl.SSLContext) CountDownLatch(java.util.concurrent.CountDownLatch) URI(java.net.URI) ClientConnection(io.undertow.client.ClientConnection) UndertowXnioSsl(io.undertow.protocols.ssl.UndertowXnioSsl) ClientRequest(io.undertow.client.ClientRequest) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Test(org.junit.Test)

Example 65 with ClientRequest

use of io.undertow.client.ClientRequest in project undertow by undertow-io.

the class HttpClientTestCase method testPostRequest.

@Test
public void testPostRequest() throws Exception {
    // 
    final UndertowClient client = createClient();
    final String postMessage = "This is a post request";
    final List<String> responses = new CopyOnWriteArrayList<>();
    final CountDownLatch latch = new CountDownLatch(10);
    final ClientConnection connection = client.connect(ADDRESS, worker, DefaultServer.getBufferPool(), OptionMap.EMPTY).get();
    try {
        connection.getIoThread().execute(new Runnable() {

            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    final ClientRequest request = new ClientRequest().setMethod(Methods.POST).setPath(POST);
                    request.getRequestHeaders().put(Headers.HOST, DefaultServer.getHostAddress());
                    request.getRequestHeaders().put(Headers.TRANSFER_ENCODING, "chunked");
                    connection.sendRequest(request, new ClientCallback<ClientExchange>() {

                        @Override
                        public void completed(ClientExchange result) {
                            new StringWriteChannelListener(postMessage).setup(result.getRequestChannel());
                            result.setResponseListener(new ClientCallback<ClientExchange>() {

                                @Override
                                public void completed(ClientExchange result) {
                                    new StringReadChannelListener(DefaultServer.getBufferPool()) {

                                        @Override
                                        protected void stringDone(String string) {
                                            responses.add(string);
                                            latch.countDown();
                                        }

                                        @Override
                                        protected void error(IOException e) {
                                            e.printStackTrace();
                                            latch.countDown();
                                        }
                                    }.setup(result.getResponseChannel());
                                }

                                @Override
                                public void failed(IOException e) {
                                    e.printStackTrace();
                                    latch.countDown();
                                }
                            });
                        }

                        @Override
                        public void failed(IOException e) {
                            e.printStackTrace();
                            latch.countDown();
                        }
                    });
                }
            }
        });
        latch.await(10, TimeUnit.SECONDS);
        Assert.assertEquals(10, responses.size());
        for (final String response : responses) {
            Assert.assertEquals(postMessage, response);
        }
    } finally {
        IoUtils.safeClose(connection);
    }
}
Also used : ClientExchange(io.undertow.client.ClientExchange) ClientCallback(io.undertow.client.ClientCallback) StringReadChannelListener(io.undertow.util.StringReadChannelListener) UndertowClient(io.undertow.client.UndertowClient) IOException(java.io.IOException) CountDownLatch(java.util.concurrent.CountDownLatch) ClientConnection(io.undertow.client.ClientConnection) StringWriteChannelListener(io.undertow.util.StringWriteChannelListener) ClientRequest(io.undertow.client.ClientRequest) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) Test(org.junit.Test)

Aggregations

ClientRequest (io.undertow.client.ClientRequest)117 ClientConnection (io.undertow.client.ClientConnection)112 CountDownLatch (java.util.concurrent.CountDownLatch)109 ClientResponse (io.undertow.client.ClientResponse)105 URI (java.net.URI)99 Test (org.junit.Test)97 AtomicReference (java.util.concurrent.atomic.AtomicReference)94 Http2Client (com.networknt.client.Http2Client)87 ClientException (com.networknt.exception.ClientException)82 ApiException (com.networknt.exception.ApiException)44 IOException (java.io.IOException)42 HttpString (io.undertow.util.HttpString)27 Status (com.networknt.status.Status)17 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)17 UndertowClient (io.undertow.client.UndertowClient)16 SQLException (java.sql.SQLException)12 UndertowXnioSsl (io.undertow.protocols.ssl.UndertowXnioSsl)7 ClientCallback (io.undertow.client.ClientCallback)6 ClientExchange (io.undertow.client.ClientExchange)5 UnsupportedEncodingException (java.io.UnsupportedEncodingException)5