Search in sources :

Example 6 with HttpClient

use of com.predic8.membrane.core.transport.http.HttpClient in project service-proxy by membrane.

the class HttpKeepAliveTest method testMaxParameter.

@Test
public void testMaxParameter() throws Exception {
    HttpClient client = new HttpClient();
    sp1.getInterceptors().add(0, new AbstractInterceptor() {

        @Override
        public Outcome handleResponse(Exchange exc) throws Exception {
            exc.getResponse().getHeader().add(Header.KEEP_ALIVE, "max=2");
            return Outcome.CONTINUE;
        }
    });
    assertEquals(200, issueRequest(client));
    assertEquals(200, issueRequest(client));
    assertEquals(1, set.size());
    assertEquals(200, issueRequest(client));
    assertEquals(2, set.size());
    assertEquals(200, issueRequest(client));
    assertEquals(2, set.size());
    assertEquals(200, issueRequest(client));
    assertEquals(3, set.size());
}
Also used : Exchange(com.predic8.membrane.core.exchange.Exchange) Outcome(com.predic8.membrane.core.interceptor.Outcome) AbstractInterceptor(com.predic8.membrane.core.interceptor.AbstractInterceptor) URISyntaxException(java.net.URISyntaxException) IOException(java.io.IOException) Test(org.junit.Test)

Example 7 with HttpClient

use of com.predic8.membrane.core.transport.http.HttpClient in project service-proxy by membrane.

the class HttpKeepAliveTest method testTimeoutCustom.

@Test
public void testTimeoutCustom() throws Exception {
    HttpClient client = createHttpClient(1000);
    sp1.getInterceptors().add(0, new AbstractInterceptor() {

        @Override
        public Outcome handleResponse(Exchange exc) throws Exception {
            exc.getResponse().getHeader().add(Header.KEEP_ALIVE, "timeout=1,max=2");
            return Outcome.CONTINUE;
        }
    });
    assertEquals(200, issueRequest(client));
    assertEquals(1, set.size());
    Thread.sleep(1500);
    assertEquals(200, issueRequest(client));
    assertEquals(2, set.size());
    assertEquals(200, issueRequest(client));
    assertEquals(2, set.size());
    assertEquals(200, issueRequest(client));
    assertEquals(3, set.size());
}
Also used : Exchange(com.predic8.membrane.core.exchange.Exchange) Outcome(com.predic8.membrane.core.interceptor.Outcome) AbstractInterceptor(com.predic8.membrane.core.interceptor.AbstractInterceptor) URISyntaxException(java.net.URISyntaxException) IOException(java.io.IOException) Test(org.junit.Test)

Example 8 with HttpClient

use of com.predic8.membrane.core.transport.http.HttpClient in project service-proxy by membrane.

the class ProxySSLTest method test.

@Test
public void test() throws Exception {
    // Step 1: create the backend
    Router backend = new Router();
    backend.setHotDeploy(false);
    ServiceProxy sp = new ServiceProxy(new ServiceProxyKey(backendPort), null, 0);
    if (backendUsesSSL) {
        SSLParser ssl = new SSLParser();
        ssl.setKeyStore(new KeyStore());
        ssl.getKeyStore().setLocation("classpath:/ssl-rsa.keystore");
        ssl.getKeyStore().setKeyPassword("secret");
        sp.setSslInboundParser(ssl);
    }
    sp.getInterceptors().add(new CountInterceptor());
    backend.getRuleManager().addProxy(sp, RuleManager.RuleDefinitionSource.MANUAL);
    backend.start();
    // Step 2: put a proxy in front of it
    AtomicInteger proxyCounter = new AtomicInteger();
    Router proxyRouter = new Router();
    proxyRouter.setHotDeploy(false);
    ProxyRule proxy = new ProxyRule(new ProxyRuleKey(proxyPort));
    proxy.getInterceptors().add(new AbstractInterceptor() {

        @Override
        public Outcome handleRequest(Exchange exc) throws Exception {
            proxyCounter.incrementAndGet();
            return super.handleRequest(exc);
        }
    });
    if (proxyUsesSSL) {
        SSLParser ssl = new SSLParser();
        ssl.setKeyStore(new KeyStore());
        ssl.getKeyStore().setLocation("classpath:/ssl-rsa2.keystore");
        ssl.getKeyStore().setKeyPassword("secret");
        proxy.setSslInboundParser(ssl);
    }
    proxyRouter.getRuleManager().addProxy(proxy, RuleManager.RuleDefinitionSource.MANUAL);
    proxyRouter.start();
    // Step 3: configure the client to access the backend through the proxy
    HttpClientConfiguration httpClientConfiguration = new HttpClientConfiguration();
    ProxyConfiguration proxyConfiguration = new ProxyConfiguration();
    proxyConfiguration.setHost("localhost");
    proxyConfiguration.setPort(proxyPort);
    if (proxyUsesSSL) {
        SSLParser ssl = new SSLParser();
        ssl.setTrustStore(new TrustStore());
        ssl.getTrustStore().setLocation("classpath:/ssl-rsa-pub2.keystore");
        ssl.getTrustStore().setPassword("secret");
        // workarond the fact that the certificate was not issued for 'localhost'
        ssl.setEndpointIdentificationAlgorithm("");
        proxyConfiguration.setSslParser(ssl);
    }
    httpClientConfiguration.setProxy(proxyConfiguration);
    HttpClient hc = new HttpClient(httpClientConfiguration);
    // Step 4: Test client
    Exchange exc = new Request.Builder().get("http" + (backendUsesSSL ? "s" : "") + "://localhost:" + backendPort + "/foo").buildExchange();
    if (backendUsesSSL) {
        SSLParser ssl = new SSLParser();
        ssl.setTrustStore(new TrustStore());
        ssl.getTrustStore().setLocation("classpath:/ssl-rsa-pub.keystore");
        ssl.getTrustStore().setPassword("secret");
        // workarond the fact that the certificate was not issued for 'localhost'
        ssl.setEndpointIdentificationAlgorithm("");
        exc.setProperty(Exchange.SSL_CONTEXT, new StaticSSLContext(ssl, new ResolverMap(), null));
    }
    hc.call(exc);
    Assert.assertEquals(200, exc.getResponse().getStatusCode());
    Assert.assertEquals("Did the request go through the proxy?", 1, proxyCounter.get());
    proxyRouter.shutdown();
    backend.shutdown();
}
Also used : CountInterceptor(com.predic8.membrane.core.interceptor.CountInterceptor) AbstractInterceptor(com.predic8.membrane.core.interceptor.AbstractInterceptor) StaticSSLContext(com.predic8.membrane.core.transport.ssl.StaticSSLContext) Router(com.predic8.membrane.core.Router) ResolverMap(com.predic8.membrane.core.resolver.ResolverMap) TrustStore(com.predic8.membrane.core.config.security.TrustStore) KeyStore(com.predic8.membrane.core.config.security.KeyStore) SSLParser(com.predic8.membrane.core.config.security.SSLParser) Exchange(com.predic8.membrane.core.exchange.Exchange) ProxyConfiguration(com.predic8.membrane.core.transport.http.client.ProxyConfiguration) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Outcome(com.predic8.membrane.core.interceptor.Outcome) HttpClient(com.predic8.membrane.core.transport.http.HttpClient) HttpClientConfiguration(com.predic8.membrane.core.transport.http.client.HttpClientConfiguration) Test(org.junit.Test)

Example 9 with HttpClient

use of com.predic8.membrane.core.transport.http.HttpClient in project service-proxy by membrane.

the class OAuth2ResourceTest method testUseRefreshTokenOnTokenExpiration.

// this test also implicitly tests concurrency on oauth2resource
@Test
public void testUseRefreshTokenOnTokenExpiration() throws Exception {
    HttpRouter mockAuthServer = new HttpRouter();
    mockAuthServer.getRuleManager().addProxyAndOpenPortIfNew(getMockAuthServiceProxy());
    mockAuthServer.init();
    HttpRouter oauth2Resource = new HttpRouter();
    oauth2Resource.getRuleManager().addProxyAndOpenPortIfNew(getConfiguredOAuth2Resource());
    oauth2Resource.init();
    HttpClient httpClient = new HttpClient();
    Exchange excCallResource = new Request.Builder().get(getClientAddress()).buildExchange();
    excCallResource = httpClient.call(excCallResource);
    String cookie = excCallResource.getResponse().getHeader().getFirstValue("Set-Cookie");
    Exchange excFollowRedirectToAuth = new Request.Builder().header("Cookie", cookie).get(excCallResource.getResponse().getHeader().getFirstValue("Location")).buildExchange();
    excFollowRedirectToAuth = httpClient.call(excFollowRedirectToAuth);
    Exchange excFollowRedirectToClient = new Request.Builder().header("Cookie", cookie).get(excFollowRedirectToAuth.getResponse().getHeader().getFirstValue("Location")).buildExchange();
    excFollowRedirectToClient = httpClient.call(excFollowRedirectToClient);
    Set<String> accessTokens = new HashSet<>();
    int limit = 1000;
    List<Thread> threadList = new ArrayList<>();
    CountDownLatch cdl = new CountDownLatch(limit);
    for (int i = 0; i < limit; i++) {
        threadList.add(new Thread(() -> {
            try {
                cdl.countDown();
                cdl.await();
                Exchange excCallResource2 = new Request.Builder().get(getClientAddress()).header("Cookie", cookie).buildExchange();
                excCallResource2 = httpClient.call(excCallResource2);
                synchronized (accessTokens) {
                    accessTokens.add(excCallResource2.getResponse().getBodyAsStringDecoded());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }));
    }
    threadList.forEach(thread -> thread.start());
    threadList.forEach(thread -> {
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    });
    assertTrue(accessTokens.size() == limit);
}
Also used : Request(com.predic8.membrane.core.http.Request) CountDownLatch(java.util.concurrent.CountDownLatch) IOException(java.io.IOException) Exchange(com.predic8.membrane.core.exchange.Exchange) HttpClient(com.predic8.membrane.core.transport.http.HttpClient) HttpRouter(com.predic8.membrane.core.HttpRouter) Test(org.junit.Test)

Example 10 with HttpClient

use of com.predic8.membrane.core.transport.http.HttpClient in project service-proxy by membrane.

the class HttpKeepAliveTest method createHttpClient.

private HttpClient createHttpClient(int defaultKeepAliveTimeout) {
    HttpClientConfiguration configuration = new HttpClientConfiguration();
    ConnectionConfiguration connection = new ConnectionConfiguration();
    connection.setKeepAliveTimeout(defaultKeepAliveTimeout);
    configuration.setConnection(connection);
    HttpClient client = new HttpClient(configuration);
    return client;
}
Also used : ConnectionConfiguration(com.predic8.membrane.core.transport.http.client.ConnectionConfiguration) HttpClientConfiguration(com.predic8.membrane.core.transport.http.client.HttpClientConfiguration)

Aggregations

Test (org.junit.Test)15 Exchange (com.predic8.membrane.core.exchange.Exchange)13 HttpClient (com.predic8.membrane.core.transport.http.HttpClient)9 AbstractInterceptor (com.predic8.membrane.core.interceptor.AbstractInterceptor)6 Outcome (com.predic8.membrane.core.interceptor.Outcome)6 Response (com.predic8.membrane.core.http.Response)5 IOException (java.io.IOException)5 URISyntaxException (java.net.URISyntaxException)5 HttpClient (org.apache.commons.httpclient.HttpClient)5 Http11Test (com.predic8.membrane.integration.Http11Test)4 Request (com.predic8.membrane.core.http.Request)3 HttpClientConfiguration (com.predic8.membrane.core.transport.http.client.HttpClientConfiguration)2 URIFactory (com.predic8.membrane.core.util.URIFactory)2 PostMethod (org.apache.commons.httpclient.methods.PostMethod)2 HttpRouter (com.predic8.membrane.core.HttpRouter)1 Router (com.predic8.membrane.core.Router)1 KeyStore (com.predic8.membrane.core.config.security.KeyStore)1 SSLParser (com.predic8.membrane.core.config.security.SSLParser)1 TrustStore (com.predic8.membrane.core.config.security.TrustStore)1 CountInterceptor (com.predic8.membrane.core.interceptor.CountInterceptor)1