package com.github.jmchilton.blend4j.galaxy; import com.github.jmchilton.blend4j.Config; import com.github.jmchilton.galaxybootstrap.BootStrapper; import com.github.jmchilton.galaxybootstrap.BootStrapper.GalaxyDaemon; import com.github.jmchilton.galaxybootstrap.DownloadProperties; import com.github.jmchilton.galaxybootstrap.GalaxyData; import com.github.jmchilton.galaxybootstrap.GalaxyProperties; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.URISyntaxException; import java.nio.channels.FileChannel; import java.util.Properties; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; public class TestGalaxyInstance { private static Properties properties = Config.loadBlendProperties(); private static GalaxyDaemon galaxyDaemon = null; private static String testApiKey = null; private static String testUrl = null; @BeforeSuite public static void bootStrapGalaxy() throws URISyntaxException, IOException { if(getTestApiKey() == null) { DownloadProperties downloadProperties = DownloadProperties.forGalaxyCentral(); if(Boolean.getBoolean(System.getProperty("galaxy.bootstrap.github", "false"))){ downloadProperties = DownloadProperties.wgetGithubCentral(); } final BootStrapper bootStrapper = new BootStrapper(downloadProperties); bootStrapper.setupGalaxy(); final GalaxyProperties galaxyProperties = new GalaxyProperties() .assignFreePort() .prepopulateSqliteDatabase() .configureNestedShedTools(); final GalaxyData galaxyData = new GalaxyData(); final GalaxyData.User adminUser = new GalaxyData.User("admin@localhost"); final GalaxyData.User normalUser = new GalaxyData.User("user@localhost"); galaxyData.getUsers().add(adminUser); galaxyData.getUsers().add(normalUser); galaxyProperties.setAdminUser("admin@localhost"); galaxyProperties.setAppProperty("allow_library_path_paste", "true"); galaxyProperties.setAppProperty("library_import_dir", "."); galaxyProperties.setAppProperty("tool_dependency_dir", "tool_dependencies"); final int port = galaxyProperties.getPort(); buildTestTools(galaxyProperties, bootStrapper.getPath()); testApiKey = adminUser.getApiKey(); testUrl = String.format("http://localhost:%d/", port); galaxyDaemon = bootStrapper.run(galaxyProperties, galaxyData); galaxyDaemon.waitForUp(); } } private static void copyFile(File source, File dest) throws IOException { FileChannel sourceChannel = null; FileChannel destChannel = null; try { sourceChannel = new FileInputStream(source).getChannel(); destChannel = new FileOutputStream(dest).getChannel(); destChannel.transferFrom(sourceChannel, 0, sourceChannel.size()); }finally{ sourceChannel.close(); destChannel.close(); } } /** * Copies over necessary files for extra tools in Galaxy for testing. * @param galaxyProperties The GalaxyProperties object. * @param galaxyRootPath The root path of the Galaxy directory. * @throws URISyntaxException * @throws IOException */ private static void buildTestTools(GalaxyProperties galaxyProperties, String galaxyRootPath) throws URISyntaxException, IOException { File collectionExampleToolSource = new File(TestGalaxyInstance.class.getResource( "collection_list.xml").toURI()); File testToolConfigSource = new File(TestGalaxyInstance.class.getResource( "tool_conf_test.xml").toURI()); File galaxyRootFile = new File(galaxyRootPath); // copy over necessary files for testing custom tools File collectionExampleToolDirectory = new File(galaxyRootPath, "tools/collection"); collectionExampleToolDirectory.mkdirs(); File collectionExampleToolDestination = new File(collectionExampleToolDirectory,"collection_list.xml"); copyFile(collectionExampleToolSource, collectionExampleToolDestination); File testToolConfigDestination = new File(galaxyRootFile, "tool_conf_test.xml"); copyFile(testToolConfigSource, testToolConfigDestination); // set configuration file in Galaxy for custom tools galaxyProperties.setAppProperty("tool_config_file", "tool_conf.xml,shed_tool_conf.xml,tool_conf_test.xml"); } @AfterSuite public static void cleanUpGalaxy() { if(galaxyDaemon != null) { galaxyDaemon.stop(); galaxyDaemon.waitForDown(); //galaxyDaemon.getBootStrapper().deleteGalaxyRoot(); } } static GalaxyInstance get() { final String galaxyInstanceUrl = getTestInstanceUrl(); final String galaxyApiKey = getTestApiKey(); return GalaxyInstanceFactory.get(galaxyInstanceUrl, galaxyApiKey); } static String getTestApiKey() { return getProperty("test.galaxy.key", testApiKey); } static String getTestInstanceUrl() { return getProperty("test.galaxy.instance", testUrl); } static String getProperty(final String key, final String defaultValue) { String value = defaultValue; if(System.getProperties().getProperty(key) != null) { value = System.getProperties().getProperty(key); } else if(properties.containsKey(key)) { value = properties.getProperty(key); } return value; } }