/*
* Copyright (C) 2009 eXo Platform SAS.
*
* 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.exoplatform.container.monitor.jvm;
import junit.framework.TestCase;
import org.exoplatform.container.configuration.ConfigurationException;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Created by The eXo Platform SAS Author : Alex Reshetnyak
* alex.reshetnyak@exoplatform.com.ua reshetnyak.alex@exoplatform.com.ua Nov 7,
* 2007
*/
public class TestJ2EEServerInfo extends TestCase
{
private static URL configurationURL = null;
private File confFile;
private String confPath;
private String confDir;
public void setUp()
{
try
{
confFile = new File("exo-configuration.xml");
if (confFile.createNewFile())
{
confPath = confFile.getAbsolutePath();
confDir = confPath.replace(System.getProperty("file.separator") + "exo-configuration.xml", "");
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void testConfigDirName()
{
testConfigDirName(null,"jonas.base");
testConfigDirName(null,"jboss.home.dir");
testConfigDirName(null,"jboss.home.dir", "jboss.server.config.url");
testConfigDirName(null,"jetty.home");
testConfigDirName(null,"was.install.root");
testConfigDirName(null,"wls.home");
testConfigDirName(null,"catalina.home");
testConfigDirName(null,"maven.exoplatform.dir");
testConfigDirName(null);
testConfigDirName("foo","jonas.base");
testConfigDirName("foo","jboss.home.dir");
testConfigDirName("foo","jboss.home.dir", "jboss.server.config.url");
testConfigDirName("foo","jetty.home");
testConfigDirName("foo","was.install.root");
testConfigDirName("foo","wls.home");
testConfigDirName("foo","catalina.home");
testConfigDirName("foo","maven.exoplatform.dir");
testConfigDirName("foo");
}
private void testConfigDirName(String confDirName, String... asVMParams)
{
if (confDirName != null)
{
System.setProperty(J2EEServerInfo.EXO_CONF_DIR_NAME_PARAM, confDirName);
}
if (asVMParams != null)
{
for (String asVMParam : asVMParams)
{
System.setProperty(asVMParam, confDir);
}
}
try
{
assertTrue((new J2EEServerInfo().getExoConfigurationDirectory()).contains(confDirName == null ? "exo-conf" : confDirName));
}
finally
{
if (confDirName != null)
{
System.getProperties().remove(J2EEServerInfo.EXO_CONF_DIR_NAME_PARAM);
}
if (asVMParams != null)
{
for (String asVMParam : asVMParams)
{
System.getProperties().remove(asVMParam);
}
}
}
}
public void testServerDirs() throws Exception
{
try
{
testServerDir("catalina.home");
testServerDir("jonas.base");
testServerDir("jboss.home.dir");
testServerDir("jetty.home");
testServerDir("was.install.root");
testServerDir("wls.home");
testServerDir("maven.exoplatform.dir");
}
catch (IOException e)
{
e.printStackTrace();
}
}
private void testServerDir(String systemProperty) throws Exception
{
System.setProperty(systemProperty, confDir);
initConfigurationURL(null);
if (!System.getProperty("file.separator").equals("/"))
{
String sTemp = confPath.replace(System.getProperty("file.separator"), "/");
assertEquals(configurationURL.getFile(), sTemp);
}
else
assertEquals(configurationURL.getFile(), confPath);
System.clearProperty(systemProperty);
}
public void tearDown()
{
confFile.delete();
}
private static void initConfigurationURL(ClassLoader configClassLoader) throws MalformedURLException,
ConfigurationException
{
// (1) set by setConfigurationURL or setConfigurationPath
// or
if (configurationURL == null)
{
// (2) exo-configuration.xml in AS (standalone) home directory
configurationURL = new URL("file:" + (new J2EEServerInfo()).getServerHome() + "/exo-configuration.xml");
// (3) conf/exo-configuration.xml in war/ear(?)
if (!fileExists(configurationURL) && configClassLoader != null)
{
configurationURL = configClassLoader.getResource("conf/exo-configuration.xml");
}
}
}
private static boolean fileExists(URL url)
{
try
{
url.openStream().close();
return true;
}
catch (Exception e)
{
return false;
}
}
}