blob: 042106643eeb586725338703a13b575a02eb05a8 [file] [log] [blame]
/*******************************************************************************
* 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());
}
}