Package com.github.kristofa.test.http.file

Source Code of com.github.kristofa.test.http.file.HttpRequestResponseFileLoggerFactoryTest

package com.github.kristofa.test.http.file;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;

import com.github.kristofa.test.http.HttpRequestImpl;
import com.github.kristofa.test.http.HttpRequestResponseLogger;
import com.github.kristofa.test.http.HttpResponseImpl;
import com.github.kristofa.test.http.Method;

public class HttpRequestResponseFileLoggerFactoryTest {

    private final static String DIRECTORY = "target/";
    private final static String FILE_NAME = "testFile";

    @Before
    public void setup() throws IOException {
        deleteFiles(1);
        deleteFiles(2);
    }

    @Test
    public void testGetHttpRequestResponseLogger() {
        final HttpRequestResponseFileLoggerFactory factory = new HttpRequestResponseFileLoggerFactory(DIRECTORY, FILE_NAME);
        final HttpRequestResponseLogger httpRequestResponseLogger = factory.getHttpRequestResponseLogger();
        assertNotNull(httpRequestResponseLogger);
        assertTrue(httpRequestResponseLogger instanceof HttpRequestResponseFileLogger);
        final HttpRequestResponseFileLogger fileLogger = (HttpRequestResponseFileLogger)httpRequestResponseLogger;
        assertEquals(DIRECTORY, fileLogger.getDirectory());
        assertEquals(FILE_NAME, fileLogger.getFileName());
        assertEquals("Seqnr starts at 1.", 1, fileLogger.getSeqNr());

        final HttpRequestResponseLogger httpRequestResponseLogger2 = factory.getHttpRequestResponseLogger();
        assertFalse("We expect a new instance with each request.", httpRequestResponseLogger2 == httpRequestResponseLogger);
        final HttpRequestResponseFileLogger fileLogger2 = (HttpRequestResponseFileLogger)httpRequestResponseLogger2;
        assertEquals(DIRECTORY, fileLogger2.getDirectory());
        assertEquals(FILE_NAME, fileLogger2.getFileName());
        assertEquals("We expect seqnr to increment by 1.", 2, fileLogger2.getSeqNr());

        assertSame("We expect that underlying request file writer is singleton.", fileLogger.getRequestFileWriter(),
            fileLogger2.getRequestFileWriter());
        assertSame("We expect that underlying response file writer is singleton.", fileLogger.getResponseFileWriter(),
            fileLogger2.getResponseFileWriter());
    }

    @Test
    public void testDeleteExistingFiles() throws IOException {
        final List<File> files = new ArrayList<File>();
        files.addAll(createFiles(1));
        files.addAll(createFiles(2));

        final HttpRequestResponseFileLoggerFactory factory =
            new HttpRequestResponseFileLoggerFactory(DIRECTORY, FILE_NAME, true);
        assertNotNull(factory.getHttpRequestResponseLogger());

        for (final File file : files) {
            assertFalse("We expected all files to be deleted. Was not deleted: " + file, file.exists());
        }
    }

    @Test
    public void testDontDeleteExistingFiles() throws IOException {
        final List<File> files = new ArrayList<File>();
        files.addAll(createFiles(1));
        files.addAll(createFiles(2));

        final HttpRequestResponseFileLoggerFactory factory =
            new HttpRequestResponseFileLoggerFactory(DIRECTORY, FILE_NAME, false);
        assertNotNull(factory.getHttpRequestResponseLogger());

        for (final File file : files) {
            assertTrue("We expected all files to be still existing. Does not exist:" + file, file.exists());
        }
    }

    @Test
    public void testLogSingleRequestAfterDeleteExistingFiles() throws IOException {
        final List<File> files = new ArrayList<File>();
        files.addAll(createFiles(1));
        files.addAll(createFiles(2));

        final HttpRequestResponseFileLoggerFactory factory =
            new HttpRequestResponseFileLoggerFactory(DIRECTORY, FILE_NAME, true);
        final HttpRequestResponseLogger logger = factory.getHttpRequestResponseLogger();
        final HttpRequestImpl request = new HttpRequestImpl();
        request.method(Method.POST).path("/").content(new String("content").getBytes());
        logger.log(request);
        final HttpResponseImpl response = new HttpResponseImpl(200, "application/json", "{}".getBytes());
        logger.log(response);

        for (final File file : getFiles(1)) {
            assertTrue("Those files should exist, should be recreated." + file, file.exists());
        }
        for (final File file : getFiles(2)) {
            assertFalse("Those files should have been deleted." + file, file.exists());
        }
    }

    private List<File> createFiles(final int seqNr) throws IOException {
        final List<File> fileList = getFiles(seqNr);
        for (final File file : fileList) {
            file.createNewFile();
        }
        return fileList;
    }

    private List<File> deleteFiles(final int seqNr) throws IOException {
        final List<File> fileList = getFiles(seqNr);
        for (final File file : fileList) {
            if (file.exists() && !file.delete()) {
                throw new IllegalStateException("Unable to delete file " + file);
            }
        }
        return fileList;
    }

    private List<File> getFiles(final int seqNr) {
        final List<File> fileList = new ArrayList<File>();
        final String requestFileName = FileNameBuilder.REQUEST_FILE_NAME.getFileName(FILE_NAME, seqNr);
        fileList.add(new File(DIRECTORY, requestFileName));
        final String requestEntityFileName = FileNameBuilder.REQUEST_ENTITY_FILE_NAME.getFileName(FILE_NAME, seqNr);
        fileList.add(new File(DIRECTORY, requestEntityFileName));
        final String responseFileName = FileNameBuilder.RESPONSE_FILE_NAME.getFileName(FILE_NAME, seqNr);
        fileList.add(new File(DIRECTORY, responseFileName));
        final String responseEntityFileName = FileNameBuilder.RESPONSE_ENTITY_FILE_NAME.getFileName(FILE_NAME, seqNr);
        fileList.add(new File(DIRECTORY, responseEntityFileName));
        return fileList;
    }

}
TOP

Related Classes of com.github.kristofa.test.http.file.HttpRequestResponseFileLoggerFactoryTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.