initial checkin from dm Server kernel-system-verification-tests repository commit 128d1ef6b9001a58a80135fe51f5fa7525e22075
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d20e829
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.idea/workspace.xml
+target
+integration-repo
+ivy-cache
diff --git a/build-kernel-svt/build.xml b/build-kernel-svt/build.xml
new file mode 100644
index 0000000..604405c
--- /dev/null
+++ b/build-kernel-svt/build.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="build-kernel-svt" default="precommit">
+
+	<path id="bundles"/>
+
+	<import file="${basedir}/../virgo-build/multi-bundle/default.xml"/>
+
+	<target name="kernel-svt" description="Runs svt tests on the kernel packaged build">
+		<path id="svt.test.bundles">
+			<pathelement location="${basedir}/../org.eclipse.virgo.kernel.svt" />
+		</path>
+	
+		<antcall target="test.pre"/>
+		
+		<all-bundles target="test-package" buildpathRef="svt.test.bundles">
+			<property name="package.output.file" value="${package.output.file}"/>
+			<property name="package.basename" value="${package.basename}"/>
+			<property name="test-results.output.dir" value="${test-results.output.dir}"/>
+		</all-bundles>
+		
+		<antcall target="test.post"/>
+	</target>
+
+</project>
diff --git a/build-kernel-svt/test-package.xml b/build-kernel-svt/test-package.xml
new file mode 100644
index 0000000..e17c072
--- /dev/null
+++ b/build-kernel-svt/test-package.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="test-package">
+
+	<property name="test.staging.dir" value="${target.dir}/test-expanded"/>
+	<property name="test.package.dir" value="${test.staging.dir}/virgo-kernel"/>
+
+	<target name="test-package"
+			description="Runs svts on the kernel packaged build">
+    	<antcall target="unzip.package"/>
+	    <antcall target="test.do"/>
+	</target>
+
+	<target name="unzip.package">
+		<delete dir="${test.staging.dir}" quiet="true"/>
+		<mkdir dir="${test.staging.dir}"/>
+		<unzip dest="${test.staging.dir}">
+			<fileset dir="${basedir}/../build-kernel-svt/target">
+				<include name="**/virgo-kernel-*.zip"/>
+			</fileset>
+			<regexpmapper from="(virgo-kernel-[^/]*/)(.*)" to="virgo-kernel/\2" />
+		</unzip>
+		<chmod perm="755">
+			<fileset dir="${test.package.dir}/bin">
+				<include name="*.sh"/>
+			</fileset>
+		</chmod>
+		<chmod perm="600">
+			<fileset dir="${test.package.dir}/config">
+				<include name="org.eclipse.virgo.kernel.jmxremote.access.properties"/>
+			</fileset>
+		</chmod>
+	</target>
+
+</project>
diff --git a/build.properties b/build.properties
new file mode 100644
index 0000000..f37a9db
--- /dev/null
+++ b/build.properties
@@ -0,0 +1,10 @@
+version=2.1.0

+release.type=integration

+javadoc.exclude.package.names=**/internal/**,**/internal

+ivy.cache.dir=${basedir}/../ivy-cache

+integration.repo.dir=${basedir}/../integration-repo

+source.version=1.6

+target.version=1.6

+

+test.vm.args= -Xmx512M -XX:+HeapDumpOnOutOfMemoryError

+#test.vm.args= -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
diff --git a/build.versions b/build.versions
new file mode 100644
index 0000000..009d224
--- /dev/null
+++ b/build.versions
@@ -0,0 +1,7 @@
+# Compile
+org.eclipse.virgo.util=2.1.0.D-20100513115049
+
+# Test
+org.junit=4.7.0
+
+
diff --git a/org.eclipse.virgo.kernel.svt/.classpath b/org.eclipse.virgo.kernel.svt/.classpath
new file mode 100644
index 0000000..2287dcb
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/.classpath
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" path="src/test/java"/>
+	<classpathentry kind="src" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="var" path="KERNEL_IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-4.7.0.jar" sourcepath="/KERNEL_IVY_CACHE/org.junit/com.springsource.org.junit/4.7.0/com.springsource.org.junit-sources-4.7.0.jar"/>
+	<classpathentry kind="var" path="KERNEL_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.io/2.1.0.D-20100513115049/org.eclipse.virgo.util.io-2.1.0.D-20100513115049.jar" sourcepath="/KERNEL_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.io/2.1.0.D-20100513115049/org.eclipse.virgo.util.io-sources-2.1.0.D-20100513115049.jar"/>
+	<classpathentry kind="var" path="KERNEL_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.common/2.1.0.D-20100513115049/org.eclipse.virgo.util.common-2.1.0.D-20100513115049.jar" sourcepath="/KERNEL_IVY_CACHE/org.eclipse.virgo.util/org.eclipse.virgo.util.common/2.1.0.D-20100513115049/org.eclipse.virgo.util.common-sources-2.1.0.D-20100513115049.jar"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.eclipse.virgo.kernel.svt/.project b/org.eclipse.virgo.kernel.svt/.project
new file mode 100644
index 0000000..55289e7
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.virgo.kernel.svt</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.virgo.kernel.svt/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.virgo.kernel.svt/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..6379c7c
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon Aug 10 11:15:16 BST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/org.eclipse.virgo.kernel.svt/build.xml b/org.eclipse.virgo.kernel.svt/build.xml
new file mode 100644
index 0000000..2b2c19f
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/build.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="org.eclipse.virgo.kernel.svt">
+
+	<property file="${basedir}/../build.properties"/>
+	<property file="${basedir}/../build.versions"/>
+	<import file="${basedir}/../virgo-build/standard/default.xml"/>
+	<import file="${basedir}/../build-kernel-svt/test-package.xml"/>
+
+</project>
diff --git a/org.eclipse.virgo.kernel.svt/ivy.xml b/org.eclipse.virgo.kernel.svt/ivy.xml
new file mode 100644
index 0000000..cf21b82
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/ivy.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="http://ivyrep.jayasoft.org/ivy-doc.xsl"?>
+<ivy-module xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://incubator.apache.org/ivy/schemas/ivy.xsd"
+	version="1.3">
+
+	<info organisation="org.eclipse.virgo.kernel" module="${ant.project.name}" />
+
+	<configurations>
+		<include file="${virgo.build.dir}/common/default-ivy-configurations.xml" />
+	</configurations>
+
+	<publications>
+		<artifact name="${ant.project.name}" />
+		<artifact name="${ant.project.name}-sources" type="src" ext="jar" />
+	</publications>
+
+	<dependencies>
+		<dependency org="org.junit" name="com.springsource.org.junit" rev="${org.junit}" conf="test->runtime" />
+		<dependency org="org.eclipse.virgo.util" name="org.eclipse.virgo.util.io" rev="${org.eclipse.virgo.util}" conf="test->runtime" />
+	</dependencies>
+
+</ivy-module>
diff --git a/org.eclipse.virgo.kernel.svt/src/main/java/.gitignore b/org.eclipse.virgo.kernel.svt/src/main/java/.gitignore
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/src/main/java/.gitignore
diff --git a/org.eclipse.virgo.kernel.svt/src/main/resources/.gitignore b/org.eclipse.virgo.kernel.svt/src/main/resources/.gitignore
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/src/main/resources/.gitignore
diff --git a/org.eclipse.virgo.kernel.svt/src/test/java/org/eclipse/virgo/kernel/svt/AbstractKernelTests.java b/org.eclipse.virgo.kernel.svt/src/test/java/org/eclipse/virgo/kernel/svt/AbstractKernelTests.java
new file mode 100644
index 0000000..b4352d3
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/src/test/java/org/eclipse/virgo/kernel/svt/AbstractKernelTests.java
@@ -0,0 +1,299 @@
+/*******************************************************************************
+ * 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.kernel.svt;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.management.ManagementFactory;
+import java.lang.management.OperatingSystemMXBean;
+import java.rmi.ConnectIOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.management.InstanceNotFoundException;
+import javax.management.MBeanServerConnection;
+import javax.management.ObjectName;
+import javax.management.remote.JMXConnector;
+import javax.management.remote.JMXConnectorFactory;
+import javax.management.remote.JMXServiceURL;
+
+import org.eclipse.virgo.util.io.FileCopyUtils;
+
+public class AbstractKernelTests {
+
+	private static MBeanServerConnection connection = null;
+	private static String binDir = null;
+	private static String configDir = null;
+	private static String watchRepoDir = null;
+	private static String srcDir = "src/test/resources";
+	private static String srcFileName = "org.eclipse.virgo.repository.properties";
+	private static String bundlesDir = "src/test/resources/bundles";
+	private static String[] bundleNames = new String[] { "org.springframework.dmServer.testtool.incoho.domain-1.0.0.RELEASE.jar" };
+
+	private static Process process = null;
+	private static ProcessBuilder pb = null;
+	private static File startup = null;
+	private static String startupFileName = null;
+	private static File shutdown = null;
+	private static String shutdownFileName = null;
+	private static File startupURI = null;
+	private static File shutdownURI = null;
+	private static OperatingSystemMXBean os = ManagementFactory
+			.getOperatingSystemMXBean();
+	public static final long HALF_SECOND = 500;
+
+	public static final long TWO_MINUTES = 120 * 1000;
+	public static final String STATUS_STARTED = "STARTED";
+	public static final String STATUS_STARTING = "STARTING";
+
+	protected static MBeanServerConnection getMBeanServerConnection()
+			throws Exception {
+		String severDir = null;
+		Map<String, String[]> env = new HashMap<String, String[]>();
+
+		File testExpanded = new File("./target/test-expanded/");
+		for (File mainDir : testExpanded.listFiles()) {
+			if (mainDir.isDirectory()) {
+				severDir = new File(mainDir.toURI()).getCanonicalPath();
+
+			}
+		}
+		String[] creds = { "admin", "springsource" };
+		env.put(JMXConnector.CREDENTIALS, creds);
+
+		System.setProperty("javax.net.ssl.trustStore", severDir
+				+ "/config/keystore");
+		System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
+
+		JMXServiceURL url = new JMXServiceURL(
+				"service:jmx:rmi:///jndi/rmi://localhost:9875/jmxrmi");
+		connection = JMXConnectorFactory.connect(url, env)
+				.getMBeanServerConnection();
+		return connection;
+	}
+
+	protected static String getKernelStartUpStatus() throws Exception {
+		String kernelStartupStatus = (String) getMBeanServerConnection()
+				.getAttribute(
+						new ObjectName(
+								"org.eclipse.virgo.kernel:type=KernelStatus"),
+						"Status");
+		return kernelStartupStatus;
+	}
+
+	private static String getKernelBinDir() throws IOException {
+		if (binDir == null) {
+			File testExpanded = new File("./target/test-expanded/");
+			for (File candidate : testExpanded.listFiles()) {
+				if (candidate.isDirectory()) {
+					binDir = new File(candidate, "bin").getCanonicalPath();
+					break;
+				}
+			}
+		}
+		return binDir;
+	}
+
+	protected static String getKernelConfigDir() throws IOException {
+		if (configDir == null) {
+			File testExpanded = new File("./target/test-expanded/");
+			for (File candidate : testExpanded.listFiles()) {
+				if (candidate.isDirectory()) {
+					configDir = new File(candidate, "config")
+							.getCanonicalPath();
+					break;
+				}
+			}
+		}
+		return configDir;
+	}
+
+	protected static void configureWatchRepoWithDefaultConfiguration(
+			String destDir) {
+		try {
+			FileCopyUtils.copy(new File(srcDir, srcFileName), new File(destDir,
+					srcFileName));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		createWatchedRepoDir();
+	}
+
+	protected static void addBundlesToWatchedRepository(String watchRepoDir) {
+		for (String bundleName : bundleNames) {
+			try {
+				FileCopyUtils.copy(new File(bundlesDir, bundleName), new File(
+						watchRepoDir, bundleName));
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+
+	}
+
+	protected static String getWatchedRepoDir() throws IOException {
+		if (watchRepoDir == null) {
+			File testExpanded = new File("./target/test-expanded/");
+			for (File mainDir : testExpanded.listFiles()) {
+				if (mainDir.isDirectory()) {
+					File repositoryDir = new File(mainDir, "repository")
+							.getCanonicalFile();
+					if (repositoryDir.isDirectory()) {
+						watchRepoDir = new File(repositoryDir, "watched-repo")
+								.getCanonicalPath();
+						break;
+					}
+
+				}
+			}
+		}
+		return watchRepoDir;
+	}
+
+	protected static void createWatchedRepoDir() {
+		File testExpanded = new File("./target/test-expanded/");
+		for (File candidate : testExpanded.listFiles()) {
+			if (candidate.isDirectory()) {
+				File repoDir = new File(candidate, "repository");
+				if (repoDir.mkdir()) {
+					new File(repoDir, "watched-repo").mkdir();
+				}
+			}
+		}
+	}
+
+	public static void waitForKernelStartFully(String url) throws Exception {
+		waitForKernelStartFully(url, TWO_MINUTES, HALF_SECOND);
+	}
+
+	public static void waitForKernelShutdownFully(String url) throws Exception {
+		waitForKernelShutdownFully(url, TWO_MINUTES, HALF_SECOND);
+	}
+
+	private static void waitForKernelStartFully(String url, long duration,
+			long interval) throws Exception {
+		long startTime = System.currentTimeMillis();
+		while (System.currentTimeMillis() - startTime < duration) {
+			try {
+				if (getKernelStartUpStatus().equals(STATUS_STARTED)) {
+					return;
+				} else if (getKernelStartUpStatus().equals(STATUS_STARTING)) {
+					continue;
+				}
+			} catch (InstanceNotFoundException e) {
+				continue;
+			} catch (ConnectIOException e) {
+				continue;
+			} catch (IOException e) {
+				continue;
+			}
+			Thread.sleep(interval);
+		}
+	}
+
+	private static void waitForKernelShutdownFully(String url, long duration,
+			long interval) throws Exception {
+		long startTime = System.currentTimeMillis();
+		while (System.currentTimeMillis() - startTime < duration) {
+			try {
+				if (!getKernelStartUpStatus().equals(STATUS_STARTED)) {
+					return;
+				}
+			} catch (InstanceNotFoundException e) {
+				return;
+			} catch (ConnectIOException e) {
+				return;
+			} catch (IOException e) {
+				return;
+			}
+			Thread.sleep(interval);
+		}
+	}
+
+	protected static class KernelStartUpThread implements Runnable {
+		public KernelStartUpThread() {
+		}
+
+		public void run() {
+			String[] args = null;
+			try {
+				if (os.getName().contains("Windows")) {
+					startup = new File(getKernelBinDir(), "startup.bat");
+					startupURI = new File(startup.toURI());
+					startupFileName = startupURI.getCanonicalPath();
+
+				} else {
+					startup = new File(getKernelBinDir(), "startup.sh");
+					startupURI = new File(startup.toURI());
+					startupFileName = startupURI.getCanonicalPath();
+				}
+				args = new String[] { startupFileName };
+				pb = new ProcessBuilder(args);
+				pb.redirectErrorStream(true);
+				Map<String, String> env = pb.environment();
+				env.put("JAVA_HOME", System.getProperty("java.home"));
+
+				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 (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	protected static class KernelShutdownThread implements Runnable {
+		public KernelShutdownThread() {
+		}
+
+		public void run() {
+			String[] args = null;
+			try {
+				if (os.getName().contains("Windows")) {
+					shutdown = new File(getKernelBinDir(), "shutdown.bat");
+					shutdownURI = new File(shutdown.toURI());
+					shutdownFileName = shutdownURI.getCanonicalPath();
+				} else {
+					shutdown = new File(getKernelBinDir(), "shutdown.sh");
+					shutdownURI = new File(shutdown.toURI());
+					shutdownFileName = shutdownURI.getCanonicalPath();
+				}
+				args = new String[] { shutdownFileName };
+				pb = new ProcessBuilder(args);
+				pb.redirectErrorStream(true);
+				Map<String, String> env = pb.environment();
+				env.put("JAVA_HOME", System.getProperty("java.home"));
+
+				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 (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+}
diff --git a/org.eclipse.virgo.kernel.svt/src/test/java/org/eclipse/virgo/kernel/svt/watchrepo/DefaultConfigWatchRepositoryTests.java b/org.eclipse.virgo.kernel.svt/src/test/java/org/eclipse/virgo/kernel/svt/watchrepo/DefaultConfigWatchRepositoryTests.java
new file mode 100644
index 0000000..43c9eb1
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/src/test/java/org/eclipse/virgo/kernel/svt/watchrepo/DefaultConfigWatchRepositoryTests.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * 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.kernel.svt.watchrepo;
+
+import static org.junit.Assert.assertEquals;
+
+import javax.management.ObjectName;
+import javax.management.openmbean.CompositeData;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import org.eclipse.virgo.kernel.svt.AbstractKernelTests;
+
+public class DefaultConfigWatchRepositoryTests extends AbstractKernelTests {
+
+	@BeforeClass
+	public static void doKernelStartUp() throws Exception {
+		configureWatchRepoWithDefaultConfiguration(getKernelConfigDir());
+		new Thread(new KernelStartUpThread()).start();
+		AbstractKernelTests
+				.waitForKernelStartFully("service:jmx:rmi:///jndi/rmi://localhost:9875/jmxrmi");
+		addBundlesToWatchedRepository(getWatchedRepoDir());
+		Thread.sleep(2000);
+	}
+
+	@Test
+	public void testKernelStartUpStatus() throws Exception {
+		assertEquals(STATUS_STARTED, getKernelStartUpStatus());
+	}
+
+	@Test
+	public void testWatchRepoWithDefaultConfiguraton() throws Exception {
+		String repoName = (String) getMBeanServerConnection()
+				.getAttribute(
+						new ObjectName(
+								"org.eclipse.virgo.kernel:type=Repository,name=watched-repository"),
+						"Name");
+		assertEquals("watched-repository", repoName);
+		CompositeData[] object =  (CompositeData[]) getMBeanServerConnection()
+				.getAttribute(
+						new ObjectName(
+								"org.eclipse.virgo.kernel:type=Repository,name=watched-repository"),
+						"AllArtifactDescriptorSummaries");
+
+		for(int i=0;i<object.length;i++){
+		assertEquals("org.springframework.dmServer.testtool.incoho", object[i]
+				.get("name"));
+		assertEquals(
+				"1.0.0.RELEASE",object[i].get("version"));
+		assertEquals("bundle", object[i].get("type"));
+		}
+	}
+
+	@AfterClass
+	public static void doKernelShutdown() throws Exception {
+		
+		new Thread(new KernelShutdownThread()).start();
+		AbstractKernelTests
+				.waitForKernelShutdownFully("service:jmx:rmi:///jndi/rmi://localhost:9875/jmxrmi");
+	}
+
+}
diff --git a/org.eclipse.virgo.kernel.svt/src/test/resources/bundles/org.springframework.dmServer.testtool.incoho.domain-1.0.0.RELEASE.jar b/org.eclipse.virgo.kernel.svt/src/test/resources/bundles/org.springframework.dmServer.testtool.incoho.domain-1.0.0.RELEASE.jar
new file mode 100644
index 0000000..617191f
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/src/test/resources/bundles/org.springframework.dmServer.testtool.incoho.domain-1.0.0.RELEASE.jar
Binary files differ
diff --git a/org.eclipse.virgo.kernel.svt/src/test/resources/org.eclipse.virgo.repository.properties b/org.eclipse.virgo.kernel.svt/src/test/resources/org.eclipse.virgo.repository.properties
new file mode 100644
index 0000000..67b4890
--- /dev/null
+++ b/org.eclipse.virgo.kernel.svt/src/test/resources/org.eclipse.virgo.repository.properties
@@ -0,0 +1,8 @@
+ext.type=external
+ext.searchPattern=repository/ext/{artifact}
+
+watched-repository.type=watched
+watched-repository.watchDirectory=repository/watched-repo
+watched-repository.watchInterval=1
+
+chain=ext,watched-repository