org.carrot2.util.httpclient.HttpClientFactoryTest.java Source code

Java tutorial

Introduction

Here is the source code for org.carrot2.util.httpclient.HttpClientFactoryTest.java

Source

/*
 * Carrot2 project.
 *
 * Copyright (C) 2002-2015, Dawid Weiss, Stanisaw Osiski.
 * All rights reserved.
 *
 * Refer to the full license file "carrot2.LICENSE"
 * in the root folder of the repository checkout or at:
 * http://www.carrot2.org/carrot2.LICENSE
 */

package org.carrot2.util.httpclient;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.util.ArrayList;

import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.DefaultHttpClient;
import org.carrot2.util.CloseableUtils;
import org.carrot2.util.tests.CarrotTestCase;
import org.junit.*;

import com.google.common.collect.Lists;

/**
 * 
 */
public class HttpClientFactoryTest extends CarrotTestCase {
    private static Thread pseudoServer;

    private static ServerSocket serverSocket;

    private static ArrayList<Socket> sockets = Lists.newArrayList();

    @BeforeClass
    public static void setup() throws Exception {
        serverSocket = new ServerSocket(/* any */0);

        pseudoServer = new Thread() {
            public void run() {
                try {
                    Socket socket;
                    while ((socket = serverSocket.accept()) != null) {
                        sockets.add(socket);
                    }
                } catch (SocketException e) {
                    // Ignore, socket closed.
                } catch (IOException e) {
                    throw new RuntimeException();
                }
            }
        };
    }

    @AfterClass
    public static void cleanup() throws Exception {
        serverSocket.close();
        pseudoServer.interrupt();

        while (!sockets.isEmpty()) {
            CloseableUtils.close(sockets.remove(sockets.size() - 1));
        }
    }

    /**
     * Verify that the connection timeout is working.
     */
    @Test
    public void testTimeOut() throws Exception {
        DefaultHttpClient client = HttpClientFactory.getTimeoutingClient(500);
        HttpGet request = new HttpGet("http://localhost:" + serverSocket.getLocalPort());

        long start = System.currentTimeMillis();
        try {
            client.execute(request);
            Assert.fail();
        } catch (ConnectTimeoutException e) {
            // Expected. This is thrown if TCP connection fails into a 
            // firewall deadhole, for example.
        } catch (SocketTimeoutException e) {
            // Expected. This is thrown if no data appears on input within
            // the given timeout range.
        } finally {
            client.getConnectionManager().shutdown();
        }
        long end = System.currentTimeMillis();

        assertThat(end - start).as("Timeout").isGreaterThanOrEqualTo(500);
    }
}