Package org.mule.transport.file

Source Code of org.mule.transport.file.FileMoveToFunctionalTestCase

/*
* Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.transport.file;

import org.mule.api.MuleException;
import org.mule.tck.junit4.FunctionalTestCase;
import org.mule.tck.probe.PollingProber;
import org.mule.tck.probe.Probe;
import org.mule.util.FileUtils;

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

import org.apache.commons.io.filefilter.TrueFileFilter;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

public class FileMoveToFunctionalTestCase extends FunctionalTestCase {

    private static final String INPUT_DIRECTORY_PROPERTY = "FileMoveToFunctionalTestCase-inputDirectory";

    private static final String MOVE_TO_DIRECTORY_PROPERTY = "FileMoveToFunctionalTestCase-moveToDirectory";

    private static final int PROBER_POLLING_INTERVAL = 100;

    private static final int PROBER_TIMEOUT = 25000;

    private static final int ITERATIONS = 10;

    private static final int NUMBER_OF_FILES = 50;

    private static final int FILE_SIZE = 1024;

    @Rule
    public TemporaryFolder inputTemporaryFolder = new TemporaryFolder();

    @Rule
    public TemporaryFolder moveToTemporaryFolder = new TemporaryFolder();

    @Override
    protected String getConfigFile() {
        return "file-functional-move-to.xml";
    }

    @Override
    protected void doSetUpBeforeMuleContextCreation() throws Exception
    {
        System.setProperty(INPUT_DIRECTORY_PROPERTY, inputTemporaryFolder.getRoot().getAbsolutePath());
        System.setProperty(MOVE_TO_DIRECTORY_PROPERTY, moveToTemporaryFolder.getRoot().getAbsolutePath());
    }

    @Override
    public void doTearDown() throws MuleException
    {
        System.clearProperty(INPUT_DIRECTORY_PROPERTY);
        System.clearProperty(MOVE_TO_DIRECTORY_PROPERTY);
    }

    @Test
    public void testMoveToWithStreaming() throws IOException, InterruptedException
    {
        configureConnector(true);
        copyFiles();
    }

    @Test
    public void testMoveToWithoutStreaming() throws IOException, InterruptedException
    {
        configureConnector(false);
        copyFiles();
    }

    private void configureConnector(boolean isStreaming)
    {
        FileConnector connector = (FileConnector) muleContext.getRegistry().lookupConnector("FileConnector");
        connector.setStreaming(isStreaming);
    }

    private void copyFiles() throws InterruptedException, IOException {
        for (int i=1; i <= ITERATIONS; i++)
        {
            List<File> files = createFiles(inputTemporaryFolder, NUMBER_OF_FILES, FILE_SIZE);
            waitForFiles(moveToTemporaryFolder.getRoot(), i * NUMBER_OF_FILES);
        }
    }

    private List<File> createFiles(TemporaryFolder folder, int amount, int size) throws IOException
    {
        List<File> files = new ArrayList<File>(size);

        for (int i=0; i < amount; i++)
        {
            File tempInputFile = createFile(folder, String.valueOf(i), size);
            files.add(tempInputFile);
        }

        return files;
    }

    private File createFile(TemporaryFolder folder, String name, int size) throws IOException
    {
        File tempInputFile = folder.newFile("input_file_" + name);
        tempInputFile.deleteOnExit();
        byte[] content = new byte[size];
        Arrays.fill(content, (byte)0);
        FileUtils.writeByteArrayToFile(tempInputFile, content);
        return tempInputFile;
    }

    private void waitForFiles(final File folder, final int expectedAmount) throws InterruptedException
    {
        PollingProber prober = new PollingProber(PROBER_TIMEOUT, PROBER_POLLING_INTERVAL);

        prober.check(new Probe() {
            int lastAmount = 0;

            @Override
            public boolean isSatisfied() {
                lastAmount = FileUtils.listFiles(folder, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE).size();
                return lastAmount >= expectedAmount;
            }

            @Override
            public String describeFailure() {
                return String.valueOf(expectedAmount) + " files were expected, but only " + String.valueOf(lastAmount) + " were present.";
            }
        });
    }

}
TOP

Related Classes of org.mule.transport.file.FileMoveToFunctionalTestCase

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.