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