package com.sun.enterprise.admin.mbeanapi.config; import com.sun.appserv.management.config.*; import com.sun.enterprise.admin.mbeanapi.common.AMXConnector; import javax.management.remote.JMXConnector; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; /** * Tests the http listener related mbean api classes * @author <a href=mailto:shreedhar.ganapathy@sun.com>Shreedhar Ganapathy</a> * Date: Sep 23, 2004 * @version $Revision: 1.3 $ */ public class HTTPListenerTests { private AMXConnector mAmxConnector; private HTTPServiceConfig mHttpServiceConfig; private static final String STOP_DOMAIN_COMMAND = "asadmin stop-domain"; private static final String START_DOMAIN_COMMAND = "asadmin start-domain"; int totalTests = 6; int passed = 0; int failed = 0; int didNotRun = 0; public HTTPListenerTests(){ setup(); } private void setup() { try { mAmxConnector = new AMXConnector(getHost(), getAMXPort(), getAdminUser(), getAdminPassword(), getUseTLS()); mHttpServiceConfig = ((ConfigConfig)mAmxConnector. getDomainRoot(). getDomainConfig(). getConfigConfigMap(). get(getConfigName())). getHTTPServiceConfig(); } catch (IOException e) { System.err.println(e.getMessage()); } } private void runtest() { createVirtualServer(); createListener(); createSSLElement(); stopDomain(); startDomain(); setup(); removeSSLElement(); removeVirtualServer(); removeListener(); printSummary(passed, failed, didNotRun); } private void sleep(final int i) { try { Thread.sleep(i); } catch (InterruptedException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } private void createVirtualServer() { mHttpServiceConfig.createVirtualServerConfig(getVirtualServerName(), getVSHosts(), //this is not a joke! These optional params are actually required! getVSOptional()) ; final VirtualServerConfig cfg = (VirtualServerConfig) mHttpServiceConfig.getVirtualServerConfigMap().get(getVirtualServerName()); if(cfg == null){ System.err.println("VirtualServer was not created"); printSummary(passed, ++failed, ++didNotRun); System.exit(1); } printProgress(++passed); } private void printProgress(final int i) { System.out.println(i +" out of "+ totalTests + " tests passed"); } private void printSummary(final int passed, final int failed, final int didNotRun) { System.out.println("Summary Results:"+ passed+" tests passed, "+ failed+" tests failed, "+ didNotRun +" tests did not run" ); System.out.println("Total Expected to Run "+totalTests); } private Map getVSOptional() { final Map vsOps = new HashMap(); vsOps.put(VirtualServerConfigKeys.DOC_ROOT_PROPERTY_KEY, "${com.sun.aas.instanceRoot}/docroot"); vsOps.put(VirtualServerConfigKeys.ACCESS_LOG_PROPERTY_KEY, "${com.sun.aas.instanceRoot}/logs/access"); vsOps.put(VirtualServerConfigKeys.HTTP_LISTENERS_KEY, "testListener"); return vsOps; } private String getVSHosts() { return "${com.sun.aas.hostName}"; } private void createListener() { mHttpServiceConfig.createHTTPListenerConfig(getListenerName(), getListenerAddress(), getListenerPort(), getVirtualServerName(), getServerName(), getOptional()); final HTTPListenerConfig cfg = (HTTPListenerConfig) mHttpServiceConfig.getHTTPListenerConfigMap().get(getListenerName()); if(cfg == null) { System.err.println("HttpListener was not created"); printSummary(passed, ++failed, ++didNotRun); System.exit(1); } printProgress(++passed); } private void createSSLElement() { final HTTPListenerConfig cfg = ((HTTPListenerConfig)mHttpServiceConfig. getHTTPListenerConfigMap(). get(getListenerName())); cfg.createSSLConfig("s1as",null); final SSLConfig ssl = cfg.getSSLConfig(); if(ssl ==null){ System.err.println("ssl element did not get created"); printSummary(passed, ++failed, ++didNotRun); System.exit(1); } printProgress(++passed); } private void stopDomain() { System.out.println("Stopping domain...."); try { mAmxConnector.getAppserverConnectionSource().getJMXConnector(false).close(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } final String command = STOP_DOMAIN_COMMAND +" "+ getDomainName(); final String result = runCommand(command); if(result.indexOf(getDomainName()+" stopped")<0){ System.out.println("Domain " + getDomainName() +" did not stop"); } } private void startDomain() { System.out.println("Starting domain...."); final String command = START_DOMAIN_COMMAND + " " +getDomainName(); final String result = runCommand(command); if(result.indexOf(getDomainName()+" started")<0){ System.out.println("Domain " +getDomainName() + " did not start"); } } private void removeSSLElement() { final HTTPListenerConfig cfg = ((HTTPListenerConfig)mHttpServiceConfig. getHTTPListenerConfigMap(). get(getListenerName())); cfg.removeSSLConfig(); final SSLConfig ssl = cfg.getSSLConfig(); if (ssl != null){ System.err.println("Could not delete SSL element"); printSummary(passed, ++failed, ++didNotRun); } else{ printProgress(++passed); } } private void removeListener() { mHttpServiceConfig.removeHTTPListenerConfig(getListenerName()); final HTTPListenerConfig cfg = (HTTPListenerConfig) mHttpServiceConfig.getHTTPListenerConfigMap().get(getListenerName()); if(cfg != null) { System.err.println("Listener was not removed from http service"); printSummary(passed, ++failed, --totalTests); } else{ printProgress(++passed); } } private void removeVirtualServer() { mHttpServiceConfig.removeVirtualServerConfig(getVirtualServerName()); final VirtualServerConfig cfg = (VirtualServerConfig) mHttpServiceConfig.getVirtualServerConfigMap().get(getVirtualServerName()); if(cfg != null){ System.err.println("VirtualServer could not be removed"); printSummary(passed, ++failed, ++didNotRun); } else{ printProgress(++passed); } } private String getListenerName() { return "testListener"; } private String getListenerAddress() { return "localhost"; } private int getListenerPort() { return 48181; } private String getVirtualServerName() { return "testVS"; } private String getServerName() { return "testServerName"; } private Map getOptional() { final Map ops = new HashMap(); ops.put(HTTPListenerConfigKeys.SECURITY_ENABLED_KEY, "true"); return ops; } protected String getHost() { return System.getProperty("HOST", "localhost"); } protected int getAMXPort() { return Integer.parseInt(System.getProperty("AMX_PORT","8686")); } protected int getAdminPort() { return Integer.parseInt(System.getProperty("ADMIN_PORT","4848")); } protected String getAdminUser() { return System.getProperty("ADMIN_USER", "admin"); } protected String getAdminPassword() { return System.getProperty("ADMIN_PASSWORD", "adminadmin"); } protected boolean getUseTLS() { return Boolean.valueOf(System.getProperty("USE_TLS", "false")).booleanValue(); } private String getConfigName() { return System.getProperty("CONFIG_NAME","server-config"); } private String getDomainName() { return "domain1"; } private String runCommand(final String command) { String sb = null; try { final Process p = Runtime.getRuntime().exec(command); sb = convertToString(p.getInputStream()); System.out.println("Received Process Output String: |" +sb+"|"); if(sb.length() == 0 ){ sb = convertToString(p.getErrorStream()); System.out.println("Received Process Error String: |" +sb+"|"); } } catch (Exception e) { //System.out.println(e.getMessage()); e.printStackTrace(); } return sb; } private String convertToString(final InputStream in) { final BufferedReader br = new BufferedReader (new InputStreamReader(in)); String line; final StringBuffer sb = new StringBuffer(); try { while ((line = br.readLine()) != null) { sb.append(line); sb.append(" "); } br.close(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } public static void main(final String[] args){ HTTPListenerTests test = new HTTPListenerTests(); test.runtest(); } }