io.gatling.http.client.proxy.HttpsProxyTest.java Source code

Java tutorial

Introduction

Here is the source code for io.gatling.http.client.proxy.HttpsProxyTest.java

Source

/*
 * Copyright 2011-2018 GatlingCorp (https://gatling.io)
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package io.gatling.http.client.proxy;

import io.gatling.http.client.HttpClientConfig;
import io.gatling.http.client.Request;
import io.gatling.http.client.RequestBuilder;
import io.gatling.http.client.test.TestServer;
import io.gatling.http.client.test.HttpTest;
import io.gatling.http.client.test.listener.TestListener;
import io.gatling.http.client.ahc.uri.Uri;
import io.netty.handler.codec.http.DefaultHttpHeaders;
import io.netty.handler.codec.http.HttpHeaders;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpResponseStatus;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import org.eclipse.jetty.proxy.ConnectHandler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import static java.util.concurrent.TimeUnit.SECONDS;
import static org.junit.jupiter.api.Assertions.assertEquals;

class HttpsProxyTest extends HttpTest {

    private static HttpsProxy proxy;
    private static TestServer target;

    private static class HttpsProxy implements AutoCloseable {

        private final Server jetty;

        public HttpsProxy() {
            jetty = new Server();
            ServerConnector connector = new ServerConnector(jetty);
            connector.setPort(8888);
            jetty.addConnector(connector);
            jetty.setHandler(new ConnectHandler());
        }

        public int getPort() {
            return ((ServerConnector) jetty.getConnectors()[0]).getPort();
        }

        public void start() throws Exception {
            jetty.start();
        }

        @Override
        public void close() throws Exception {
            jetty.stop();
        }
    }

    @BeforeAll
    static void start() throws Throwable {
        target = new TestServer();
        target.start();
        proxy = new HttpsProxy();
        proxy.start();
    }

    @AfterAll
    static void stop() throws Throwable {
        target.close();
        proxy.close();
    }

    @Test
    void testRequestProxy() throws Throwable {
        HttpClientConfig config = new HttpClientConfig();
        config.setTrustManagerFactory(InsecureTrustManagerFactory.INSTANCE);

        withClient(config).run(client -> withServer(target).run(server -> {

            server.enqueueEcho();

            HttpHeaders h = new DefaultHttpHeaders();
            for (int i = 1; i < 5; i++) {
                h.add("Test" + i, "Test" + i);
            }

            Request request = new RequestBuilder(HttpMethod.GET, Uri.create(server.getHttpsUrl())).setHeaders(h)
                    .setProxyServer(new HttpProxyServer("localhost", 0, proxy.getPort(), null)).build();

            client.test(request, 0, new TestListener() {
                @Override
                public void onComplete0() {
                    assertEquals(HttpResponseStatus.OK, status);
                }
            }).get(TIMEOUT_SECONDS, SECONDS);
        }));
    }
}