io.seqware.pipeline.whitestar.WhiteStarTest.java Source code

Java tutorial

Introduction

Here is the source code for io.seqware.pipeline.whitestar.WhiteStarTest.java

Source

/*
 * Copyright (C) 2014 SeqWare
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package io.seqware.pipeline.whitestar;

import io.seqware.cli.Main;
import io.seqware.pipeline.Utility;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import net.sourceforge.seqware.common.util.Log;
import net.sourceforge.seqware.pipeline.plugins.ITUtility;
import net.sourceforge.seqware.pipeline.runner.PluginRunner;
import org.apache.commons.exec.environment.EnvironmentUtils;
import org.apache.commons.io.FileUtils;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 * Run a helloworld using whitestar.
 *
 * @author dyuen
 */
public class WhiteStarTest {

    @BeforeClass
    public static void setupWhiteStarTest() {

    }

    @AfterClass
    public static void teardownWhiteStarTest() {

    }

    @Test
    public void testWhiteStarStandardWorkflow() throws Exception {
        Path createTempFile = createSettingsFile("whitestar", "inmemory");
        createAndRunWorkflow(createTempFile, false);

    }

    @Test
    public void testWhiteStarParallelWorkflow() throws Exception {
        Path createTempFile = createSettingsFile("whitestar-parallel", "inmemory");
        createAndRunWorkflow(createTempFile, false);
    }

    protected static void createAndRunWorkflow(Path settingsFile, boolean metadata) throws Exception, IOException {
        // create a helloworld
        Path tempDir = Files.createTempDirectory("tempTestingDirectory");
        PluginRunner it = new PluginRunner();
        String SEQWARE_VERSION = it.getClass().getPackage().getImplementationVersion();
        Assert.assertTrue("unable to detect seqware version", SEQWARE_VERSION != null);
        Log.info("SeqWare version detected as: " + SEQWARE_VERSION);
        String archetype = "java-workflow";
        String workflow = "seqware-archetype-" + archetype;
        String workflowName = workflow.replace("-", "");
        // generate and install archetypes to local maven repo
        String command = "mvn archetype:generate -DarchetypeCatalog=local -Dpackage=com.seqware.github -DgroupId=com.github.seqware -DarchetypeArtifactId="
                + workflow + " -Dversion=1.0-SNAPSHOT -DarchetypeGroupId=com.github.seqware -DartifactId="
                + workflow + " -Dworkflow-name=" + workflowName + " -B -Dgoals=install";
        String genOutput = ITUtility.runArbitraryCommand(command, 0, tempDir.toFile());
        Log.info(genOutput);
        // install the workflows to the database and record their information
        File workflowDir = new File(tempDir.toFile(), workflow);
        File targetDir = new File(workflowDir, "target");
        final String workflow_name = "Workflow_Bundle_" + workflowName + "_1.0-SNAPSHOT_SeqWare_" + SEQWARE_VERSION;
        File bundleDir = new File(targetDir, workflow_name);

        Map environment = EnvironmentUtils.getProcEnvironment();
        environment.put("SEQWARE_SETTINGS", settingsFile.toAbsolutePath().toString());

        // save system environment variables
        Map<String, String> env = System.getenv();
        try {
            // override for launching
            Utility.set(environment);
            List<String> cmd = new ArrayList<>();
            cmd.add("bundle");
            cmd.add("launch");
            cmd.add("--dir");
            cmd.add(bundleDir.getAbsolutePath());
            if (!metadata) {
                cmd.add("--no-metadata");
            }
            Main.main(cmd.toArray(new String[cmd.size()]));
        } finally {
            Utility.set(env);
        }

    }

    protected static Path createSettingsFile(String engine, String metadataMethod) throws IOException {
        // override seqware settings file
        List<String> whiteStarProperties = new ArrayList<>();
        whiteStarProperties.add("SW_METADATA_METHOD=" + metadataMethod);
        whiteStarProperties.add("SW_REST_USER=admin@admin.com");
        whiteStarProperties.add("SW_REST_PASS=admin");
        whiteStarProperties.add("SW_ADMIN_REST_URL=fubar");
        whiteStarProperties.add("SW_DEFAULT_WORKFLOW_ENGINE=" + engine);
        whiteStarProperties.add("OOZIE_WORK_DIR=/tmp");
        // use this if running locally via mvn tomcat7:run
        // whiteStarProperties.add("SW_REST_URL=http://localhost:8889/seqware-webservice");
        // use this in our regression testing framework
        whiteStarProperties.add("SW_REST_URL=http://master:8080/SeqWareWebService");
        Path createTempFile = Files.createTempFile("whitestar", "properties");
        FileUtils.writeLines(createTempFile.toFile(), whiteStarProperties);
        return createTempFile;
    }

}