/******************************************************************************* * Copyright (c) 2004, 2014 Tasktop Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Tasktop Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.commons.repositories.http.tests; import static org.junit.Assert.assertEquals; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.impl.client.ContentEncodingHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.HttpProtocolParams; import org.eclipse.core.runtime.AssertionFailedException; import org.eclipse.mylyn.commons.core.CoreUtil; import org.eclipse.mylyn.commons.repositories.core.RepositoryLocation; import org.eclipse.mylyn.commons.repositories.core.auth.UserCredentials; import org.eclipse.mylyn.commons.repositories.http.core.HttpUtil; import org.eclipse.mylyn.commons.sdk.util.MockServer; import org.eclipse.mylyn.commons.sdk.util.MockServer.Message; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * @author Steffen Pingel */ public class HttpUtilTest { private static final int /*NetUtil.*/MAX_HTTP_HOST_CONNECTIONS_DEFAULT = 100; private static final int /*NetUtil.*/MAX_HTTP_TOTAL_CONNECTIONS_DEFAULT = 1000; private MockServer server; private DefaultHttpClient client; private ThreadSafeClientConnManager connectionManager; public HttpUtilTest() { } @Before public void setUp() throws Exception { server = new MockServer(); server.startAndWait(); connectionManager = new ThreadSafeClientConnManager(); client = new DefaultHttpClient() { @Override protected ClientConnectionManager createClientConnectionManager() { return connectionManager; } }; } @After public void tearDown() throws Exception { server.stop(); } @Test public void testGetRequestPoolConnections() throws Exception { server.addResponse(MockServer.SERVICE_UNVAILABLE); HttpRequestBase request = new HttpGet(server.getUrl()); HttpUtil.configureClient(client, null); assertEquals(0, connectionManager.getConnectionsInPool()); HttpResponse response = HttpUtil.execute(client, null, request, null); assertEquals(HttpStatus.SC_SERVICE_UNAVAILABLE, response.getStatusLine().getStatusCode()); assertEquals(1, connectionManager.getConnectionsInPool()); } @Test(expected = AssertionFailedException.class) public void testConfigureAuthenticationNullUrl() { HttpUtil.configureAuthentication(client, new RepositoryLocation((String) null), new UserCredentials("", "")); } @Test(expected = AssertionFailedException.class) public void testConfigureAuthenticationNullClient() { HttpUtil.configureAuthentication(null, new RepositoryLocation("url"), new UserCredentials("", "")); } @Test(expected = AssertionFailedException.class) public void testConfigureAuthenticationNullCredentials() { HttpUtil.configureAuthentication(client, new RepositoryLocation("url"), null); } @Test public void testConfigureAuthentication() { HttpUtil.configureAuthentication(client, new RepositoryLocation("url"), new UserCredentials("", "")); } @Test public void testConfigureProxy() { HttpUtil.configureProxy(client, new RepositoryLocation("url")); } @Test(expected = AssertionFailedException.class) public void testConfigureProxyNullClient() { HttpUtil.configureProxy(null, new RepositoryLocation("url")); } @Test(expected = AssertionFailedException.class) public void testConfigureProxyNullLocation() { HttpUtil.configureProxy(client, null); } @Test public void testGetEmptyGzipResponse() throws Exception { client = new ContentEncodingHttpClient() { @Override protected ClientConnectionManager createClientConnectionManager() { return connectionManager; } }; Message message = new Message("HTTP/1.1 200 OK"); message.headers.add("Content-Length: 0"); message.headers.add("Content-Encoding: gzip"); message.headers.add("Connection: close"); server.addResponse(message); HttpRequestBase request = new HttpGet(server.getUrl()); HttpUtil.configureClient(client, null); HttpResponse response = HttpUtil.execute(client, null, request, null); assertEquals(1, connectionManager.getConnectionsInPool()); HttpUtil.release(request, response, null); assertEquals(0, connectionManager.getConnectionsInPool()); } @Test public void testConfigureClient() { HttpUtil.configureClient(client, "Agent 007"); assertEquals("Agent 007", HttpProtocolParams.getUserAgent(client.getParams())); HttpUtil.configureClient(client, "Special Agent Fox Mulder"); assertEquals("Special Agent Fox Mulder", HttpProtocolParams.getUserAgent(client.getParams())); HttpUtil.configureClient(client, null); assertEquals("Special Agent Fox Mulder", HttpProtocolParams.getUserAgent(client.getParams())); } @Test public void testConfigureConnectionManager() { ThreadSafeClientConnManager connManager = HttpUtil.getConnectionManager(); assertEquals(CoreUtil.TEST_MODE ? 2 : MAX_HTTP_HOST_CONNECTIONS_DEFAULT, connManager.getDefaultMaxPerRoute()); assertEquals(CoreUtil.TEST_MODE ? 20 : MAX_HTTP_TOTAL_CONNECTIONS_DEFAULT, connManager.getMaxTotal()); } }