Package com.lmax.ant.paralleljunit.util.process

Source Code of com.lmax.ant.paralleljunit.util.process.ManagedProcessFactory

/**
* Copyright 2012-2013 LMAX Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.lmax.ant.paralleljunit.util.process;

import java.util.Collection;
import java.util.concurrent.ExecutorService;

import com.lmax.ant.paralleljunit.ParallelJUnitTaskConfig;
import com.lmax.ant.paralleljunit.remote.controller.RemoteTestRunnerProcessFactory;
import com.lmax.ant.paralleljunit.util.io.EOFAwareInputStream;
import com.lmax.ant.paralleljunit.util.io.EOFAwareInputStreamFactory;
import com.lmax.ant.paralleljunit.util.io.ExecuteStreamHandlerFactory;

import org.apache.tools.ant.taskdefs.ExecuteStreamHandler;
import org.apache.tools.ant.taskdefs.ExecuteWatchdog;


import static java.util.Arrays.asList;

public class ManagedProcessFactory
{
    private final RemoteTestRunnerProcessFactory remoteTestRunnerProcessFactory;
    private final ProcessDestroyer destroyer;
    private final ExecuteStreamHandlerFactory executeStreamHandlerFactory;
    private final ExecuteWatchdogFactory watchdogFactory;
    private final EOFAwareInputStreamFactory eofAwareInputStreamFactory;
    private final ExecutorService executorService;

    public ManagedProcessFactory(final RemoteTestRunnerProcessFactory remoteTestRunnerProcessFactory, final ProcessDestroyer destroyer, final ExecuteStreamHandlerFactory executeStreamHandlerFactory,
                                 final ExecuteWatchdogFactory watchdogFactory, final EOFAwareInputStreamFactory eofAwareInputStreamFactory, final ExecutorService executorService)
    {
        this.remoteTestRunnerProcessFactory = remoteTestRunnerProcessFactory;
        this.destroyer = destroyer;
        this.executeStreamHandlerFactory = executeStreamHandlerFactory;
        this.watchdogFactory = watchdogFactory;
        this.eofAwareInputStreamFactory = eofAwareInputStreamFactory;
        this.executorService = executorService;
    }

    public ManagedProcess create(final int workerId, final ParallelJUnitTaskConfig config, final int serverPort)
    {
        final Process process = remoteTestRunnerProcessFactory.createForkedProcess(workerId, config, serverPort);

        destroyer.add(process);

        final EOFAwareInputStream processOutputStream = eofAwareInputStreamFactory.create(process.getInputStream());
        final EOFAwareInputStream processErrorStream = eofAwareInputStreamFactory.create(process.getErrorStream());
        final Collection<EOFAwareInputStream> processStreams = asList(processOutputStream, processErrorStream);

        final ExecuteStreamHandler streamHandler = executeStreamHandlerFactory.create(processOutputStream, processErrorStream, process.getOutputStream());

        final ExecuteWatchdog watchdog = watchdogFactory.create(config);
        watchdog.start(process);

        return new ManagedProcess(process, destroyer, streamHandler, watchdog, processStreams, executorService);
    }
}
TOP

Related Classes of com.lmax.ant.paralleljunit.util.process.ManagedProcessFactory

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.