Package org.mule.test.infrastructure.process

Source Code of org.mule.test.infrastructure.process.MuleUtils

/*
* 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.test.infrastructure.process;

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

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteWatchdog;
import org.apache.commons.exec.PumpStreamHandler;
import org.apache.commons.exec.environment.EnvironmentUtils;
import org.apache.commons.io.FileUtils;

public class MuleUtils
{

    private static final long TIMEOUT = 1800000;
    private String muleHome;
    private String populateM2repoCommand;

    public MuleUtils(String muleHome)
    {
        this.muleHome = muleHome;
        this.populateM2repoCommand = muleHome + "/bin/populate_m2_repo";
    }

    public void populateM2Repo(String repo) throws IOException
    {
        File repository = new File(repo);
        if (!repository.exists())
        {
            FileUtils.forceMkdir(repository);
        }
        if (!repository.isDirectory())
        {
            throw new IllegalArgumentException("Repository should be a directory.");
        }
        executeCommand(populateM2repoCommand + " " + repo, "MULE_HOME=" + muleHome);
    }

    public static int executeCommand(String command, String... envVars) throws IOException
    {
        CommandLine cmdLine = CommandLine.parse(command);
        DefaultExecutor executor = new DefaultExecutor();
        Map<String, String> env = addEnvProperties(envVars);
        ExecuteWatchdog watchDog = new ExecuteWatchdog(TIMEOUT);
        executor.setWatchdog(watchDog);
        executor.setStreamHandler(new PumpStreamHandler());
        int result = executor.execute(cmdLine, env);
        if (executor.isFailure(result))
        {
            if (watchDog.killedProcess())
            {
                throw new RuntimeException("Reached timeout while running: " + cmdLine);
            }
            throw new RuntimeException("Process failed with return code [" + result + "]: " + cmdLine);
        }
        return result;
    }

    private static Map<String, String> addEnvProperties(String[] envVars) throws IOException
    {
        @SuppressWarnings("unchecked")
        Map<String, String> env = EnvironmentUtils.getProcEnvironment();
        for (String envVar : envVars)
        {
            EnvironmentUtils.addVariableToEnvironment(env, envVar);
        }
        return env;
    }

}
TOP

Related Classes of org.mule.test.infrastructure.process.MuleUtils

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.