/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, 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.jboss.test.server.profileservice;
import java.io.File;
import java.security.CodeSource;
import org.jboss.Main;
import org.jboss.bootstrap.microcontainer.ServerImpl;
import org.jboss.bootstrap.spi.Server;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.kernel.Kernel;
import org.jboss.kernel.spi.registry.KernelRegistry;
import org.jboss.kernel.spi.registry.KernelRegistryEntry;
import org.jboss.test.BaseTestCase;
/**
* Test of the jboss main loading a bootstrap configuration via the ProfileService
* and additional service via a simple hot deployment service.
*
* @author Scott.Stark@jboss.org
* @version $Revision: 85526 $
*/
public class MainWithSimpleHotDeployTestCase extends BaseTestCase
{
public MainWithSimpleHotDeployTestCase(String name)
{
super(name);
}
// Public --------------------------------------------------------
/* (non-Javadoc)
* @see org.jboss.test.AbstractTestCase#configureLogging()
*/
@Override
protected void configureLogging()
{
//enableTrace("org.jboss.kernel");
}
/**
* Test the startup of the org.jboss.Main entry point using the "default"
* profile and bootstrap deployer-beans.xml search logic.
* @throws Exception
*/
public void testDefaultStartup() throws Exception
{
String deployPrefix = "";
// If jbosstest.deploy.dir is not defined fail
String deployDirEnv = System.getenv("jbosstest.deploy.dir");
String deployDirProp = System.getProperty("jbosstest.deploy.dir");
if( deployDirProp == null && deployDirEnv != null )
{
System.setProperty("jbosstest.deploy.dir", deployDirEnv);
deployDirProp = deployDirEnv;
}
String supportDirEnv = System.getenv("jbosstest.support.dir");
String supportDirProp = System.getProperty("jbosstest.support.dir");
if( supportDirProp == null && supportDirEnv != null )
{
System.setProperty("jbosstest.support.dir", supportDirEnv);
supportDirProp = supportDirEnv;
}
if( supportDirProp == null )
{
// If these have not been set, assume running inside eclipse from the system folder
File resourcesDir = new File("output/eclipse-resources");
File classesDir = new File("output/eclipse-test-classes");
deployDirProp = resourcesDir.toURL().toExternalForm();
supportDirProp = classesDir.toURL().toExternalForm();
System.setProperty("jbosstest.deploy.dir", deployDirProp);
System.setProperty("jbosstest.support.dir", supportDirProp);
deployPrefix = "tests/bootstrap/defaulthotdeploy/";
}
assertNotNull("jbosstest.support.dir != null", supportDirProp);
assertNotNull("jbosstest.deploy.dir != null", deployDirProp);
// Set the deploy prefix
String[] args = {"-c", "defaulthotdeploy", "-Djboss.server.deployerBeansPrefix="+deployPrefix};
Main main = new Main();
main.boot(args);
Server server = main.getServer();
assertTrue("Server", server instanceof ServerImpl);
ServerImpl serverImpl = (ServerImpl) server;
// Validate that the expected deployment beans exist
Kernel kernel = serverImpl.getKernel();
assertInstalled(kernel, "ProfileService");
assertInstalled(kernel, "MainDeployer");
assertInstalled(kernel, "BeanDeployer");
assertInstalled(kernel, "VFSDeploymentScanner");
KernelRegistry registry = kernel.getRegistry();
KernelRegistryEntry entry = registry.getEntry("VFSDeploymentScanner");
/** TODO DeploymentScanner scanner = (DeploymentScanner) entry.getTarget();
synchronized( scanner )
{
while( scanner.getScanCount() <= 0 )
scanner.wait(10000);
}
log.info("Notified of scan: "+scanner.getScanCount());
*/
// Expected hot deployments
assertInstalled(kernel, "VFSClassLoader");
assertInstalled(kernel, "TestBean");
assertInstalled(kernel, "VFSClassLoader-unpacked");
assertInstalled(kernel, "TestBean-unpacked");
entry = registry.getEntry("TestBean");
Object testBean = entry.getTarget();
CodeSource testBeanCS = testBean.getClass().getProtectionDomain().getCodeSource();
log.info("TestBean.CS: "+testBeanCS);
log.info("TestBean.ClassLoader: "+testBean.getClass().getClassLoader());
// Shutdown
main.shutdown();
}
private void assertInstalled(Kernel kernel, String name)
{
KernelRegistry registry = kernel.getRegistry();
KernelRegistryEntry entry = registry.getEntry(name);
assertEquals(name+" Installed", ControllerState.INSTALLED, entry.getState());
}
}