/* * JBoss, Home of Professional Open Source. * Copyright 2010, Red Hat, Inc., and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.wildfly.core.embedded; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Properties; import org.jboss.as.server.ServerEnvironment; import org.junit.Assert; import org.junit.Before; import org.junit.Test; /** * * @author <a href="kabir.khan@jboss.com">Kabir Khan</a> * @version $Revision: 1.1 $ */ public class EmbeddedServerFactorySetupUnitTestCase { final Path standardJBossHome; final Path alternativeServer; final Path alternativeDataDir; final Path alternativeConfigDir; Path embeddedRoot; public EmbeddedServerFactorySetupUnitTestCase() { try { standardJBossHome = createStandardAsHome(); alternativeServer = createServer(createRootDir(), "standalone2", 2); alternativeDataDir = createDataOrConfigDir(createRootDir(), "otherData", 3); alternativeConfigDir = createDataOrConfigDir(createRootDir(), "otherConfig", 4); } catch (IOException e) { throw new RuntimeException(e); } } @Before public void createEmbeddedRoot() throws IOException { embeddedRoot = Paths.get("target/embedded-root").toAbsolutePath(); if(Files.exists(embeddedRoot)){ deleteDirectory(embeddedRoot.toFile()); } Files.createDirectories(embeddedRoot); Assert.assertTrue(Files.exists(embeddedRoot)); } @Test public void testNoSpecialConfig() throws Exception { Properties props = new Properties(); EmbeddedStandaloneServerFactory.setupCleanDirectories(standardJBossHome, props); Assert.assertEquals(0, props.size()); } @Test public void testEmbeddedRootNoOverrides() throws Exception { Properties props = new Properties(); props.setProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT, embeddedRoot.toAbsolutePath().toString()); EmbeddedStandaloneServerFactory.setupCleanDirectories(standardJBossHome, props); Assert.assertEquals(4, props.size()); Assert.assertEquals(embeddedRoot.toAbsolutePath().toString(), props.getProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT)); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_BASE_DIR, -1); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_DATA_DIR, 1); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_CONFIG_DIR, 1); } @Test public void testEmbeddedRootServerOverride() throws Exception { Properties props = new Properties(); props.setProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT, embeddedRoot.toAbsolutePath().toString()); props.setProperty(ServerEnvironment.SERVER_BASE_DIR, alternativeServer.toAbsolutePath().toString()); EmbeddedStandaloneServerFactory.setupCleanDirectories(standardJBossHome, props); Assert.assertEquals(4, props.size()); Assert.assertEquals(embeddedRoot.toAbsolutePath().toString(), props.getProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT)); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_BASE_DIR, -1); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_DATA_DIR, 2); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_CONFIG_DIR, 2); } @Test public void testDataAndConfigOverride() throws Exception { Properties props = new Properties(); props.setProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT, embeddedRoot.toAbsolutePath().toString()); props.setProperty(ServerEnvironment.SERVER_DATA_DIR, alternativeDataDir.toAbsolutePath().toString()); props.setProperty(ServerEnvironment.SERVER_CONFIG_DIR, alternativeConfigDir.toAbsolutePath().toString()); EmbeddedStandaloneServerFactory.setupCleanDirectories(standardJBossHome, props); Assert.assertEquals(4, props.size()); Assert.assertEquals(embeddedRoot.toAbsolutePath().toString(), props.getProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT)); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_BASE_DIR, -1); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_DATA_DIR, 3); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_CONFIG_DIR, 4); } @Test public void testServerOverrideAndDataAndConfigOverride() throws Exception { Properties props = new Properties(); props.setProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT, embeddedRoot.toAbsolutePath().toString()); props.setProperty(ServerEnvironment.SERVER_BASE_DIR, alternativeServer.toAbsolutePath().toString()); props.setProperty(ServerEnvironment.SERVER_DATA_DIR, alternativeDataDir.toAbsolutePath().toString()); props.setProperty(ServerEnvironment.SERVER_CONFIG_DIR, alternativeConfigDir.toAbsolutePath().toString()); EmbeddedStandaloneServerFactory.setupCleanDirectories(standardJBossHome, props); Assert.assertEquals(4, props.size()); Assert.assertEquals(embeddedRoot.toAbsolutePath().toString(), props.getProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT)); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_BASE_DIR, -1); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_DATA_DIR, 3); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_CONFIG_DIR, 4); } @Test public void testServerOverrideAndConfigOverride() throws Exception { Properties props = new Properties(); props.setProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT, embeddedRoot.toAbsolutePath().toString()); props.setProperty(ServerEnvironment.SERVER_BASE_DIR, alternativeServer.toAbsolutePath().toString()); props.setProperty(ServerEnvironment.SERVER_CONFIG_DIR, alternativeConfigDir.toAbsolutePath().toString()); EmbeddedStandaloneServerFactory.setupCleanDirectories(standardJBossHome, props); Assert.assertEquals(4, props.size()); Assert.assertEquals(embeddedRoot.toAbsolutePath().toString(), props.getProperty(EmbeddedStandaloneServerFactory.JBOSS_EMBEDDED_ROOT)); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_BASE_DIR, -1); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_DATA_DIR, 2); assertPropertyAndEmbeddedRootFile(props, ServerEnvironment.SERVER_CONFIG_DIR, 4); } private void assertPropertyAndEmbeddedRootFile(Properties props, String property, int id) { String dirName = props.getProperty(property); Assert.assertNotNull(dirName); File dir = new File(dirName); Assert.assertTrue(dir.exists()); Assert.assertTrue(dir.isDirectory()); File expected = id >= 0 ? new File(dir, String.valueOf(id)) : dir; Assert.assertTrue(expected.exists()); File parent = dir.getParentFile(); while (parent != null) { if (parent.equals(embeddedRoot.toFile())) { return; } parent = parent.getParentFile(); } Assert.fail(dir + " is not a child of " + embeddedRoot); } private Path createRootDir() throws IOException { Path root = Paths.get("target/server-home"); if (Files.notExists(root)){ Files.createDirectory(root); } return root; } private Path createStandardAsHome() throws IOException { Path home = createRootDir().resolve("jboss-home"); if (Files.notExists(home)) { Files.createDirectory(home); } createServer(home, "standalone", 1); return home; } private Path createServer(Path home, String serverName, int id) throws IOException { Path server = home.resolve(serverName); if (Files.notExists(server)) { Files.createDirectory(server); } createDataOrConfigDir(server, "data", id); createDataOrConfigDir(server, "configuration", id); return server; } private Path createDataOrConfigDir(Path server, String name, int id) { Path dir = server.resolve(name); Path file = dir.resolve(String.valueOf(id));// new File(dir, String.valueOf(id)); if (Files.notExists(file)) { try { Files.createDirectories(dir); Files.createFile(file); } catch (IOException e) { throw new RuntimeException(e); } } Assert.assertTrue(Files.exists(file)); return dir; } private void deleteDirectory(File dir) { for (String name : dir.list()) { File current = new File(dir, name); if (current.isDirectory()) { deleteDirectory(current); } else { Assert.assertTrue(current.delete()); } } } }