org.emonocot.job.common.GetResourceClientTest.java Source code

Java tutorial

Introduction

Here is the source code for org.emonocot.job.common.GetResourceClientTest.java

Source

/*
 * This is eMonocot, a global online biodiversity information resource.
 *
 * Copyright  20112015 The Board of Trustees of the Royal Botanic Gardens, Kew and The University of Oxford
 *
 * eMonocot is free software: you can redistribute it and/or modify it under the terms of the
 * GNU Affero General Public License as published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * eMonocot is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * The complete text of the GNU Affero General Public License is in the source repository as the file
 * COPYING.  It is also available from <http://www.gnu.org/licenses/>.
 */
package org.emonocot.job.common;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.entity.FileEntity;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicStatusLine;
import org.apache.http.params.BasicHttpParams;
import org.easymock.EasyMock;
import org.emonocot.harvest.common.GetResourceClient;
import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.core.ExitStatus;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.xml.sax.SAXException;

/**
 *
 * @author ben
 *
 */
public class GetResourceClientTest {

    /**
     *
     */
    private GetResourceClient getResourceClient = new GetResourceClient();
    /**
     *
     */
    private HttpClient httpClient = EasyMock.createMock(HttpClient.class);
    /**
     *
     */
    private BasicHttpResponse httpResponse = new BasicHttpResponse(
            new BasicStatusLine(HttpVersion.HTTP_1_0, HttpStatus.SC_OK, "OK"));
    /**
     *
     */
    private Resource content = new ClassPathResource("/org/emonocot/job/common/dwc.zip");

    // Only a mock URL.
    private final String testzip = "http://build.e-monocot.org/test/test.zip";

    /**
     *
     * @throws IOException
     *             if the test file cannot be found
     */
    @Before
    public final void setUp() throws IOException {
        getResourceClient.setHttpClient(httpClient);
        httpResponse.setEntity(new FileEntity(content.getFile(), "application/zip"));
    }

    /**
     *
     * @throws IOException
     *             if a temporary file cannot be created or if there is a http
     *             protocol error.
     * @throws SAXException
     *             if the content retrieved is not valid xml.
     */
    @Test
    public final void testGetResourceSuccessfully() throws IOException, SAXException {
        File tempFile = File.createTempFile("test", "zip");
        tempFile.deleteOnExit();

        EasyMock.expect(httpClient.getParams()).andReturn(new BasicHttpParams());
        EasyMock.expect(httpClient.execute(EasyMock.isA(HttpGet.class))).andReturn(httpResponse);
        EasyMock.replay(httpClient);

        ExitStatus exitStatus = getResourceClient.getResource(testzip, Long.toString(new Date().getTime()),
                tempFile.getAbsolutePath());

        EasyMock.verify(httpClient);

        assertNotNull("ExitStatus should not be null", exitStatus);
        assertEquals("ExitStatus should be COMPLETED", exitStatus, ExitStatus.COMPLETED);
    }

    /**
     *
     * @throws IOException
     *             if a temporary file cannot be created or if there is a http
     *             protocol error.
     */
    @Test
    public final void testGetResourceNotModified() throws IOException {
        File tempFile = File.createTempFile("test", "zip");
        tempFile.deleteOnExit();
        httpResponse.setStatusLine(
                new BasicStatusLine(HttpVersion.HTTP_1_0, HttpStatus.SC_NOT_MODIFIED, "Not Modified"));

        EasyMock.expect(httpClient.getParams()).andReturn(new BasicHttpParams());
        EasyMock.expect(httpClient.execute(EasyMock.isA(HttpGet.class))).andReturn(httpResponse);
        EasyMock.replay(httpClient);

        ExitStatus exitStatus = getResourceClient.getResource(testzip, Long.toString(new Date().getTime()),
                tempFile.getAbsolutePath());

        EasyMock.verify(httpClient);

        assertNotNull("ExitStatus should not be null", exitStatus);
        assertEquals("ExitStatus should be NOT_MODIFIED", exitStatus.getExitCode(), "NOT_MODIFIED");
    }

    /**
     *
      @throws IOException
     *             if a temporary file cannot be created or if there is a http
     *             protocol error.
     */
    @Test
    public final void testGetDocumentAnyOtherStatus() throws IOException {
        File tempFile = File.createTempFile("test", "zip");
        tempFile.deleteOnExit();
        httpResponse
                .setStatusLine(new BasicStatusLine(HttpVersion.HTTP_1_0, HttpStatus.SC_BAD_REQUEST, "Bad Request"));

        EasyMock.expect(httpClient.getParams()).andReturn(new BasicHttpParams());
        EasyMock.expect(httpClient.execute(EasyMock.isA(HttpGet.class))).andReturn(httpResponse).anyTimes();
        EasyMock.replay(httpClient);

        ExitStatus exitStatus = getResourceClient.getResource(testzip, Long.toString(new Date().getTime()),
                tempFile.getAbsolutePath());

        EasyMock.verify(httpClient);

        assertNotNull("ExitStatus should not be null", exitStatus);
        assertEquals("ExitStatus should be FAILED", exitStatus, ExitStatus.FAILED);
    }
}