Java tutorial
/******************************************************************************* * Copyright (c) 2008, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VMware Inc. - initial contribution *******************************************************************************/ package org.eclipse.virgo.server.svt.hostedrepo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; import java.util.HashMap; import java.util.Map; import javax.management.MBeanServerConnection; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.openmbean.CompositeData; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import org.eclipse.virgo.server.svt.AbstractWebTests; import org.eclipse.virgo.server.svt.UrlWaitLatch; import org.eclipse.virgo.util.io.FileCopyUtils; import org.eclipse.virgo.util.io.FileSystemUtils; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class RemoteHostedRepositoryOtherThan8080Tests extends AbstractWebTests { private static String serverHomeDir1 = null; private static String usrDir1 = null; private static String binDir1 = null; private static String configDir1 = null; private static String serverHomeDir2 = null; private static String usrDir2 = null; private static String binDir2 = null; private static String configDir2 = null; private static String pickupDir = null; private static String hostedDir = null; protected static final String HOSTED_REPO_SPLASHURL = "http://localhost:8084/"; protected static final String HOSTED_REPO_ADMINURL = "http://localhost:8084/admin"; protected static final String CLIENT_SPLASHURL = "http://localhost:8083/"; protected static final String CLEINT_ADMINURL = "http://localhost:8083/admin"; private static final String APP_URI_PLAN_UNSCOPED = "./../org.eclipse.virgo.server.svt/apps/helloworld_unscoped-1.0.0.RELEASE.plan"; private static final String APP_URI_SHAREDSERVICES_WAR1 = "./../org.eclipse.virgo.server.svt/apps/hello_war_shared_services.war"; private static final String APP_URI_SHAREDSERVICES_WAR2 = "./../org.eclipse.virgo.server.svt/apps/formtags-shared-services-war-2.0.1.BUILD-20100413113234.war"; private static final String APP_URI_PAR = "./../org.eclipse.virgo.server.svt/apps/greenpages-solution-2.0.1.SNAPSHOT.par"; private static final String APP_URI_PLAN = "./../test-apps/scopedplan.plan"; private static final String resourcesDir1 = "./../org.eclipse.virgo.server.svt/bundles"; private static final String resourcesDir2 = "./../org.eclipse.virgo.server.svt/src/test/resources/bundles"; private static final String downloadDir = "target/bundles"; private static String[] bundleNames1 = new String[] { // "com.springsource.org.antlr-3.0.1.jar", deleted from git as not covered by a full CQ "com.springsource.javassist-3.9.0.GA.jar", "com.springsource.net.sf.cglib-2.2.0.jar", "com.springsource.org.apache.commons.collections-3.2.1.jar", "com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar", "com.springsource.org.apache.commons.logging-1.1.1.jar", "com.springsource.org.apache.commons.pool-1.3.0.jar", "com.springsource.org.dom4j-1.6.1.jar", "com.springsource.org.eclipse.persistence-1.0.0.jar", "com.springsource.org.eclipse.persistence.antlr-1.0.0.jar", "com.springsource.org.eclipse.persistence.asm-1.0.0.jar", "com.springsource.org.eclipse.persistence.jpa-1.0.0.jar", "com.springsource.org.hsqldb-1.8.0.9.jar", "com.springsource.org.objectweb.asm-1.5.3.jar", "com.springsource.org.objectweb.asm.attrs-1.5.3.jar" }; private static String[] downloadBundleNames1 = new String[] { "com.springsource.org.hibernate-3.2.6.ga.jar" }; private static String[] bundleNames2 = new String[] { "formtags-shared-services-service-2.0.1.BUILD-20100413113234.jar", "com.springsource.freemarker-2.3.15.jar", "com.springsource.javax.persistence-1.0.0.jar", "com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar", "com.springsource.org.apache.commons.pool-1.3.0.jar", "com.springsource.org.eclipse.persistence-1.0.0.jar", "com.springsource.org.eclipse.persistence.antlr-1.0.0.jar", "com.springsource.org.eclipse.persistence.asm-1.0.0.jar", "com.springsource.org.eclipse.persistence.jpa-1.0.0.jar", "com.springsource.org.h2-1.0.71.jar", "hello.domain.jar", "hello.service.api.jar", "hello.service.impl-en.jar", "bundleA.jar", "bundleB.war", "foo.properties" }; private static Process process = null; private static ProcessBuilder pb = null; private static File startup = null; private static File startupURI = null; private static File shutdownURI = null; private static String startupFileName = null; private static File shutdown = null; private static String shutdownFileName = null; private static OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); private static MBeanServerConnection connection = null; private static final String JMXURL = "service:jmx:rmi:///jndi/rmi://localhost:4444/jmxrmi"; private static final String KEYSTORE = "/config/keystore"; private static final String KEYPASSWORD = "changeit"; public static final long HALF_SECOND = 500; public static final long TWO_MINUTES = 120 * 1000; private static String[] signature = null; private static Object[] params = null; private static String artifactType1 = null; private static String artifactName1 = null; private static String artifactVersion1 = null; private static String artifactType4 = null; private static String artifactName4 = null; private static String artifactVersion4 = null; private static String artifactType5 = null; private static String artifactName5 = null; private static String artifactVersion5 = null; private static String artifactType6 = null; private static String artifactName6 = null; private static String artifactVersion6 = null; private static String artifactType7 = null; private static String artifactName7 = null; private static String artifactVersion7 = null; @BeforeClass public static void testSetUp() throws IOException, Exception { FileCopyUtils.copy(new File("src/test/resources/tomcat-server1.xml"), new File(getConfiguredRemoteServerConfigDir1(), "tomcat-server.xml")); new File(getConfiguredRemoteServerConfigDir1(), "tomcat-server1.xml") .renameTo(new File(getConfiguredRemoteServerConfigDir1(), "tomcat-server.xml")); FileCopyUtils.copy(new File("src/test/resources/org.eclipse.virgo.kernel4.properties"), new File(getConfiguredRemoteServerConfigDir1(), "org.eclipse.virgo.kernel.properties")); new File(getConfiguredRemoteServerConfigDir1(), "org.eclipse.virgo.kernel4.properties") .renameTo(new File(getConfiguredRemoteServerConfigDir1(), "org.eclipse.virgo.kernel.properties")); copyBundlesToHostedRepository(getConfiguredRemoteServerHostedBundlesDir()); new Thread(new StartUpThread1()).start(); Thread.sleep(5000); UrlWaitLatch.waitFor(HOSTED_REPO_SPLASHURL); FileSystemUtils.deleteRecursively(new File(getConfiguredRemoteServerBundlesUsrDir2())); new File(getConfiguredRemoteServerBundlesUsrDir2()).mkdir(); FileSystemUtils.deleteRecursively( new File(getConfiguredRemoteServerConfigDir2(), "org.eclipse.virgo.apps.repository.properties")); FileCopyUtils.copy(new File("src/test/resources/org.eclipse.virgo.repository1.properties"), new File(getConfiguredRemoteServerConfigDir2(), "org.eclipse.virgo.repository.properties")); new File(getConfiguredRemoteServerConfigDir2(), "org.eclipse.virgo.repository1.properties").renameTo( new File(getConfiguredRemoteServerConfigDir2(), "org.eclipse.virgo.repository.properties")); copyDependentBundlesToRepository(getConfiguredRemoteServerBundlesUsrDir2()); FileCopyUtils.copy(new File("src/test/resources/tomcat-server2.xml"), new File(getConfiguredRemoteServerConfigDir2(), "tomcat-server.xml")); new File(getConfiguredRemoteServerConfigDir2(), "tomcat-server2.xml") .renameTo(new File(getConfiguredRemoteServerConfigDir2(), "tomcat-server.xml")); FileCopyUtils.copy(new File("src/test/resources/org.eclipse.virgo.kernel5.properties"), new File(getConfiguredRemoteServerConfigDir2(), "org.eclipse.virgo.kernel.properties")); new File(getConfiguredRemoteServerConfigDir2(), "org.eclipse.virgo.kernel5.properties") .renameTo(new File(getConfiguredRemoteServerConfigDir2(), "org.eclipse.virgo.kernel.properties")); new Thread(new StartUpThread2()).start(); Thread.sleep(5000); UrlWaitLatch.waitFor(CLIENT_SPLASHURL); } protected static String getConfiguredRemoteServerHomeDir1() throws Exception { if (serverHomeDir1 == null) { File testExpanded = new File("src/test/resources"); for (File candidate : testExpanded.listFiles()) { if (candidate.isDirectory() && candidate.getName().equals("virgo-web-server1")) { serverHomeDir1 = new File(candidate.getCanonicalPath()).getCanonicalPath(); break; } } } return serverHomeDir1; } protected static String getConfiguredRemoteServerHomeDir2() throws Exception { if (serverHomeDir2 == null) { File testExpanded = new File("src/test/resources"); for (File candidate : testExpanded.listFiles()) { if (candidate.isDirectory() && candidate.getName().equals("virgo-web-server2")) { serverHomeDir2 = new File(candidate.getCanonicalPath()).getCanonicalPath(); break; } } } return serverHomeDir2; } protected static String getConfiguredRemoteServerPickupDir() throws Exception { if (pickupDir == null) { File testExpanded = new File(getConfiguredRemoteServerHomeDir2()); for (File candidate : testExpanded.listFiles()) { if (candidate.isDirectory() && candidate.getName().equals("pickup")) { pickupDir = new File(candidate.getCanonicalPath()).getCanonicalPath(); break; } } } return pickupDir; } public static String getConfiguredRemoteServerBinDir1() throws Exception { if (binDir1 == null) { File testExpanded = new File(getConfiguredRemoteServerHomeDir1()); for (File candidate : testExpanded.listFiles()) { if (candidate.isDirectory() && candidate.getName().equals("bin")) { binDir1 = new File(candidate.getCanonicalPath()).getCanonicalPath(); break; } } } return binDir1; } public static String getConfiguredRemoteServerConfigDir1() throws Exception { if (configDir1 == null) { File testExpanded = new File(getConfiguredRemoteServerHomeDir1()); for (File candidate : testExpanded.listFiles()) { if (candidate.isDirectory() && candidate.getName().equals("config")) { configDir1 = new File(candidate.getCanonicalPath()).getCanonicalPath(); break; } } } return configDir1; } public static String getConfiguredRemoteServerConfigDir2() throws Exception { if (configDir2 == null) { File testExpanded = new File(getConfiguredRemoteServerHomeDir2()); for (File candidate : testExpanded.listFiles()) { if (candidate.isDirectory() && candidate.getName().equals("config")) { configDir2 = new File(candidate.getCanonicalPath()).getCanonicalPath(); break; } } } return configDir2; } public static String getConfiguredRemoteServerBinDir2() throws Exception { if (binDir2 == null) { File testExpanded = new File(getConfiguredRemoteServerHomeDir2()); for (File candidate : testExpanded.listFiles()) { if (candidate.isDirectory() && candidate.getName().equals("bin")) { binDir2 = new File(candidate.getCanonicalPath()).getCanonicalPath(); break; } } } return binDir2; } public static void copyFile(File source, File dest) throws IOException { if (!dest.exists()) { dest.createNewFile(); } InputStream in = null; OutputStream out = null; try { in = new FileInputStream(source); out = new FileOutputStream(dest); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } } finally { in.close(); out.close(); } } protected static String getConfiguredRemoteServerBundlesUsrDir1() throws Exception { if (usrDir1 == null) { File serverHomeDir = new File(getConfiguredRemoteServerHomeDir1()); if (serverHomeDir.isDirectory()) { File repositoryDir = new File(serverHomeDir, "repository").getCanonicalFile(); usrDir1 = new File(repositoryDir, "usr").getCanonicalPath(); } } return usrDir1; } protected static String getConfiguredRemoteServerBundlesUsrDir2() throws Exception { if (usrDir2 == null) { File serverHomeDir = new File(getConfiguredRemoteServerHomeDir2()); if (serverHomeDir.isDirectory()) { File repositoryDir = new File(serverHomeDir, "repository").getCanonicalFile(); usrDir2 = new File(repositoryDir, "usr").getCanonicalPath(); } } return usrDir2; } protected static String getConfiguredRemoteServerHostedBundlesDir() throws Exception { if (hostedDir == null) { File testExpanded = new File(getConfiguredRemoteServerHomeDir1()); for (File mainDir : testExpanded.listFiles()) { if (mainDir.isDirectory() && mainDir.getName().equals("repository")) { new File(mainDir, "hosted").mkdir(); hostedDir = new File(mainDir, "hosted").getCanonicalPath(); break; } } } return hostedDir; } protected static void copyDependentBundlesToRepository(String bundlesUsrDir) throws Exception { for (String bundleName : bundleNames1) { FileCopyUtils.copy(new File(resourcesDir1, bundleName), new File(bundlesUsrDir, bundleName)); } for (String bundleName : downloadBundleNames1) { FileCopyUtils.copy(new File(downloadDir, bundleName), new File(bundlesUsrDir, bundleName)); } } protected static void copyBundlesToHostedRepository(String bundlesUsrDir) throws Exception { for (String bundleName : bundleNames2) { FileCopyUtils.copy(new File(resourcesDir2, bundleName), new File(bundlesUsrDir, bundleName)); } } @Test public void testScopedPlanArtifactDeployThatDependsUponArtifactsInRemoteHostedRepo() throws Exception { signature = new String[] { String.class.getName() }; params = new Object[] { new File(APP_URI_PLAN).toURI().toString() }; CompositeData compositeData = deploy(signature, params); artifactName1 = compositeData.get("symbolicName").toString(); artifactType1 = compositeData.get("type").toString(); artifactVersion1 = compositeData.get("version").toString(); waitForMBeanRegister(artifactType1, artifactName1, artifactVersion1, HALF_SECOND, TWO_MINUTES); assertArtifactExists(artifactType1, artifactName1, artifactVersion1); waitForArtifactState("plan", "scoped.plan", "1.0.0", "ACTIVE", HALF_SECOND, TWO_MINUTES); ObjectName[] objectNameList = (ObjectName[]) getMBeanServerConnection() .getAttribute(getObjectName(artifactType1, artifactName1, artifactVersion1), "Dependents"); for (ObjectName objectName : objectNameList) { assertPlanReferencedArtifacts(objectName); } assertArtifactState(artifactType1, artifactName1, artifactVersion1, "ACTIVE"); } @Test public void testScopedPlanArtifactUndeployThatDependsUponArtifactsInRemoteHostedRepo() throws Exception { signature = new String[] { String.class.getName(), String.class.getName() }; params = new Object[] { artifactName1, artifactVersion1 }; getMBeanServerConnection().invoke(new ObjectName("org.eclipse.virgo.kernel:category=Control,type=Deployer"), "undeploy", params, signature); waitForMBeanDeRegister(artifactType1, artifactName1, artifactVersion1, HALF_SECOND, TWO_MINUTES); assertArtifactNotExists(artifactType1, artifactName1, artifactVersion1); } @Test public void testUnscopedPlanThatDependsUponArtifactsInRemoteHostedRepo() throws IOException, Exception { signature = new String[] { String.class.getName() }; params = new Object[] { new File(APP_URI_PLAN_UNSCOPED).toURI().toString() }; CompositeData compositeData = deploy(signature, params); artifactName4 = compositeData.get("symbolicName").toString(); artifactType4 = compositeData.get("type").toString(); artifactVersion4 = compositeData.get("version").toString(); waitForMBeanRegister(artifactType4, artifactName4, artifactVersion4, HALF_SECOND, TWO_MINUTES); assertArtifactExists(artifactType4, artifactName4, artifactVersion4); assertArtifactState(artifactType4, artifactName4, artifactVersion4, "ACTIVE"); } @Test public void testDeploymentOfSharedServicesWarDependsOnArtfiactsInUnscopedPlan() throws IOException, Exception { signature = new String[] { String.class.getName() }; params = new Object[] { new File(APP_URI_SHAREDSERVICES_WAR1).toURI().toString() }; CompositeData compositeData = deploy(signature, params); artifactName5 = compositeData.get("symbolicName").toString(); artifactType5 = compositeData.get("type").toString(); artifactVersion5 = compositeData.get("version").toString(); waitForMBeanRegister(artifactType5, artifactName5, artifactVersion5, HALF_SECOND, TWO_MINUTES); UrlWaitLatch.waitFor("http://localhost:8083/hello_war_shared_services/"); assertArtifactExists(artifactType5, artifactName5, artifactVersion5); assertArtifactState(artifactType5, artifactName5, artifactVersion5, "ACTIVE"); } @Test public void testUnDeploymentOfSharedServicesWarDependsOnArtfiactsInUnscopedPlan() throws Exception { signature = new String[] { String.class.getName(), String.class.getName() }; params = new Object[] { artifactName5, artifactVersion5 }; getMBeanServerConnection().invoke(new ObjectName("org.eclipse.virgo.kernel:category=Control,type=Deployer"), "undeploy", params, signature); waitForMBeanDeRegister(artifactType5, artifactName5, artifactVersion5, HALF_SECOND, TWO_MINUTES); UrlWaitLatch.waitForNotExistence("http://localhost:8083/hello_war_shared_services"); assertArtifactNotExists(artifactType5, artifactName5, artifactVersion5); } @Test public void testSharedServicesWarDeployThatDependsUponArtifactsInRemoteHostedRepo() throws Exception { signature = new String[] { String.class.getName() }; params = new Object[] { new File(APP_URI_SHAREDSERVICES_WAR2).toURI().toString() }; CompositeData compositeData = deploy(signature, params); artifactName6 = compositeData.get("symbolicName").toString(); artifactType6 = compositeData.get("type").toString(); artifactVersion6 = compositeData.get("version").toString(); waitForMBeanRegister(artifactType6, artifactName6, artifactVersion6, HALF_SECOND, TWO_MINUTES); UrlWaitLatch.waitFor("http://localhost:8083/formtags-shared-services-war-2.0.1.BUILD-20100413113234"); UrlWaitLatch .waitFor("http://localhost:8083/formtags-shared-services-war-2.0.1.BUILD-20100413113234/list.htm"); UrlWaitLatch.waitFor( "http://localhost:8083/formtags-shared-services-war-2.0.1.BUILD-20100413113234/form.htm?id=1"); assertArtifactExists(artifactType6, artifactName6, artifactVersion6); assertArtifactState(artifactType6, artifactName6, artifactVersion6, "ACTIVE"); } @Test public void testSharedServicesWarUnDeployThatDependsUponArtifactsInRemoteHostedRepo() throws Exception { signature = new String[] { String.class.getName(), String.class.getName() }; params = new Object[] { artifactName6, artifactVersion6 }; getMBeanServerConnection().invoke(new ObjectName("org.eclipse.virgo.kernel:category=Control,type=Deployer"), "undeploy", params, signature); waitForMBeanDeRegister(artifactType6, artifactName6, artifactVersion6, HALF_SECOND, TWO_MINUTES); UrlWaitLatch.waitForNotExistence( "http://localhost:8083/formtags-shared-services-war-2.0.1.BUILD-20100413113234"); assertArtifactNotExists(artifactType6, artifactName6, artifactVersion6); } @Test public void testParDeployThatDependsUponArtifactsInRemoteHostedRepo() throws Exception { signature = new String[] { String.class.getName() }; params = new Object[] { new File(APP_URI_PAR).toURI().toString() }; CompositeData compositeData = deploy(signature, params); artifactName7 = compositeData.get("symbolicName").toString(); artifactType7 = compositeData.get("type").toString(); artifactVersion7 = compositeData.get("version").toString(); waitForMBeanRegister(artifactType7, artifactName7, artifactVersion7, HALF_SECOND, TWO_MINUTES); assertArtifactExists(artifactType7, artifactName7, artifactVersion7); UrlWaitLatch.waitFor("http://localhost:8083/greenpages/app/home.htm"); assertArtifactState(artifactType7, artifactName7, artifactVersion7, "ACTIVE"); } @Test public void testParUnDeployThatDependsUponArtifactsInRemoteHostedRepo() throws Exception { signature = new String[] { String.class.getName(), String.class.getName() }; params = new Object[] { artifactName7, artifactVersion7 }; getMBeanServerConnection().invoke(new ObjectName("org.eclipse.virgo.kernel:category=Control,type=Deployer"), "undeploy", params, signature); waitForMBeanDeRegister(artifactType7, artifactName7, artifactVersion7, HALF_SECOND, TWO_MINUTES); UrlWaitLatch.waitForNotExistence("http://localhost:8083/greenpages"); assertArtifactNotExists(artifactType7, artifactName7, artifactVersion7); } @AfterClass public static void shutdownRemoteInstance() throws Exception { new Thread(new ShutdownThread1()).start(); UrlWaitLatch.waitForServerShutdownFully(HOSTED_REPO_SPLASHURL); FileSystemUtils.deleteRecursively(new File(getConfiguredRemoteServerHomeDir1())); new Thread(new ShutdownThread2()).start(); UrlWaitLatch.waitForServerShutdownFully(CLIENT_SPLASHURL); FileSystemUtils.deleteRecursively(new File(getConfiguredRemoteServerHomeDir2())); } private static CompositeData deploy(String[] signature, Object[] params) throws Exception { CompositeData compsiteData = (CompositeData) getMBeanServerConnection().invoke( new ObjectName("org.eclipse.virgo.kernel:category=Control,type=Deployer"), "deploy", params, signature); return compsiteData; } private static MBeanServerConnection getMBeanServerConnection() throws Exception { String severDir = null; String[] creds = { "admin", "springsource" }; Map<String, String[]> env = new HashMap<String, String[]>(); File testExpanded = new File("src/test/resources"); for (File mainDir : testExpanded.listFiles()) { if (mainDir.isDirectory() && mainDir.getName().equals("virgo-web-server2")) { severDir = new File(mainDir.toURI()).getCanonicalPath(); } } env.put(JMXConnector.CREDENTIALS, creds); System.setProperty("javax.net.ssl.trustStore", severDir + KEYSTORE); System.setProperty("javax.net.ssl.trustStorePassword", KEYPASSWORD); JMXServiceURL url = new JMXServiceURL(JMXURL); connection = JMXConnectorFactory.connect(url, env).getMBeanServerConnection(); return connection; } private void waitForMBeanRegister(String type, String name, String version, long interval, long duration) throws Exception { long startTime = System.currentTimeMillis(); boolean mbeanStatus = false; while (System.currentTimeMillis() - startTime < duration) { mbeanStatus = getMBeanServerConnection().isRegistered(getObjectName(type, name, version)); if (mbeanStatus) { return; } Thread.sleep(interval); } fail(String.format("After %d ms, artifact %s mbean Status was", duration, name) + mbeanStatus); } private void waitForMBeanDeRegister(String type, String name, String version, long interval, long duration) throws Exception { long startTime = System.currentTimeMillis(); boolean mbeanStatus = true; while (System.currentTimeMillis() - startTime < duration) { mbeanStatus = getMBeanServerConnection().isRegistered(getObjectName(type, name, version)); if (!mbeanStatus) { return; } Thread.sleep(interval); } fail(String.format("After %d ms, artifact %s mbean Status was", duration, name) + mbeanStatus); } private void waitForArtifactState(String type, String name, String version, String state, long interval, long duration) throws Exception { long startTime = System.currentTimeMillis(); String artifactstate = null; while (System.currentTimeMillis() - startTime < duration) { artifactstate = getMBeanServerConnection().getAttribute(getObjectName(type, name, version), "State") .toString(); if (artifactstate.equals(state)) { return; } Thread.sleep(interval); } fail(String.format("After %d ms, artifact %s state was", duration, name) + artifactstate); } private static ObjectName getObjectName(String type, String name, String version) throws MalformedObjectNameException { return new ObjectName(String.format( "org.eclipse.virgo.kernel:type=Model,artifact-type=%s,name=%s,version=%s", type, name, version)); } private void assertArtifactExists(String type, String name, String version) throws IOException, Exception, MalformedObjectNameException { assertTrue(String.format("Artifact %s:%s:%s does not exist", type, name, version), getMBeanServerConnection().isRegistered(getObjectName(type, name, version))); } private void assertArtifactState(String type, String name, String version, String state) throws MalformedObjectNameException, IOException, Exception { assertEquals(String.format("Artifact %s:%s:%s is not in state %s", type, name, version, state), state, getMBeanServerConnection().getAttribute(getObjectName(type, name, version), "State")); } private void assertArtifactNotExists(String type, String name, String version) throws IOException, Exception, MalformedObjectNameException { assertFalse(String.format("Artifact %s:%s:%s is still exists", type, name, version), getMBeanServerConnection().isRegistered(getObjectName(type, name, version))); } private void assertPlanReferencedArtifacts(ObjectName objectName) throws MalformedObjectNameException, IOException, Exception { assertTrue("plan referenced artifact does not exist", getMBeanServerConnection().isRegistered(objectName)); assertEquals(String.format("plan referenced artifact is not in state %s", "ACTIVE"), "ACTIVE", getMBeanServerConnection().getAttribute(objectName, "State")); } private static class StartUpThread1 implements Runnable { public StartUpThread1() { } public void run() { String[] args = null; try { if (os.getName().contains("Windows")) { startup = new File(getConfiguredRemoteServerBinDir1(), "startup.bat"); startupURI = new File(startup.toURI()); startupFileName = startupURI.getCanonicalPath(); } else { startup = new File(getConfiguredRemoteServerBinDir1(), "startup.sh"); startupURI = new File(startup.toURI()); startupFileName = startupURI.getCanonicalPath(); } args = new String[] { startupFileName, "-jmxport", "3333", "-clean" }; pb = new ProcessBuilder(args); Map<String, String> env = pb.environment(); env.put("JAVA_HOME", System.getProperty("java.home")); pb.redirectErrorStream(true); process = pb.start(); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } private static class StartUpThread2 implements Runnable { public StartUpThread2() { } public void run() { String[] args = null; try { if (os.getName().contains("Windows")) { startup = new File(getConfiguredRemoteServerBinDir2(), "startup.bat"); startupURI = new File(startup.toURI()); startupFileName = startupURI.getCanonicalPath(); } else { startup = new File(getConfiguredRemoteServerBinDir2(), "startup.sh"); startupURI = new File(startup.toURI()); startupFileName = startupURI.getCanonicalPath(); } args = new String[] { startupFileName, "-jmxport", "4444", "-clean" }; pb = new ProcessBuilder(args); Map<String, String> env = pb.environment(); env.put("JAVA_HOME", System.getProperty("java.home")); pb.redirectErrorStream(true); process = pb.start(); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } private static class ShutdownThread1 implements Runnable { public ShutdownThread1() { } public void run() { String[] args = null; try { if (os.getName().contains("Windows")) { shutdown = new File(getConfiguredRemoteServerBinDir1(), "shutdown.bat"); shutdownURI = new File(shutdown.toURI()); shutdownFileName = shutdownURI.getCanonicalPath(); } else { shutdown = new File(getConfiguredRemoteServerBinDir1(), "shutdown.sh"); shutdownURI = new File(shutdown.toURI()); shutdownFileName = shutdownURI.getCanonicalPath(); } args = new String[] { shutdownFileName, "-jmxport", "3333", "-immediate" }; pb = new ProcessBuilder(args); Map<String, String> env = pb.environment(); env.put("JAVA_HOME", System.getProperty("java.home")); pb.redirectErrorStream(true); process = pb.start(); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } private static class ShutdownThread2 implements Runnable { public ShutdownThread2() { } public void run() { String[] args = null; try { if (os.getName().contains("Windows")) { shutdown = new File(getConfiguredRemoteServerBinDir2(), "shutdown.bat"); shutdownURI = new File(shutdown.toURI()); shutdownFileName = shutdownURI.getCanonicalPath(); } else { shutdown = new File(getConfiguredRemoteServerBinDir2(), "shutdown.sh"); shutdownURI = new File(shutdown.toURI()); shutdownFileName = shutdownURI.getCanonicalPath(); } args = new String[] { shutdownFileName, "-jmxport", "4444", "-immediate" }; pb = new ProcessBuilder(args); Map<String, String> env = pb.environment(); env.put("JAVA_HOME", System.getProperty("java.home")); pb.redirectErrorStream(true); process = pb.start(); InputStream is = process.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } }