summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org')
-rw-r--r--branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxHostTestCase.java95
-rw-r--r--branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java152
-rw-r--r--branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/TestEquinoxHost.java100
3 files changed, 347 insertions, 0 deletions
diff --git a/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxHostTestCase.java b/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxHostTestCase.java
new file mode 100644
index 0000000000..5743f7089a
--- /dev/null
+++ b/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxHostTestCase.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.extensibility.equinox;
+
+import java.util.Dictionary;
+import java.util.Enumeration;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Test start/stop the Equinox runtime.
+ *
+ * @version $Rev: $ $Date: $
+ */
+public class EquinoxHostTestCase {
+ @Test
+ public void testStartThenStop() {
+ TestEquinoxHost host = new TestEquinoxHost();
+ BundleContext context = host.start();
+ Assert.assertNotNull(context);
+ for (Bundle b : context.getBundles()) {
+ System.out.println(toString(b, false));
+ }
+ host.stop();
+ }
+
+ @Test
+ public void testStartTwice() {
+ TestEquinoxHost host = new TestEquinoxHost();
+ host.start();
+ try {
+ host.start();
+ Assert.fail();
+ } catch (IllegalStateException e) {
+ Assert.assertTrue(IllegalStateException.class.isInstance(e.getCause()));
+ } finally {
+ host.stop();
+ }
+ }
+
+ public static String toString(Bundle b, boolean verbose) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(b.getBundleId()).append(" ").append(b.getSymbolicName());
+ int s = b.getState();
+ if ((s & Bundle.UNINSTALLED) != 0) {
+ sb.append(" UNINSTALLED");
+ }
+ if ((s & Bundle.INSTALLED) != 0) {
+ sb.append(" INSTALLED");
+ }
+ if ((s & Bundle.RESOLVED) != 0) {
+ sb.append(" RESOLVED");
+ }
+ if ((s & Bundle.STARTING) != 0) {
+ sb.append(" STARTING");
+ }
+ if ((s & Bundle.STOPPING) != 0) {
+ sb.append(" STOPPING");
+ }
+ if ((s & Bundle.ACTIVE) != 0) {
+ sb.append(" ACTIVE");
+ }
+
+ sb.append(" ").append(b.getLocation());
+ if (verbose) {
+ Dictionary<Object, Object> dict = b.getHeaders();
+ Enumeration<Object> keys = dict.keys();
+ while (keys.hasMoreElements()) {
+ Object key = keys.nextElement();
+ sb.append(" ").append(key).append("=").append(dict.get(key));
+ }
+ }
+ return sb.toString();
+ }
+}
diff --git a/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java b/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
new file mode 100644
index 0000000000..8010ead253
--- /dev/null
+++ b/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.extensibility.equinox;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.jar.JarInputStream;
+import java.util.jar.Manifest;
+
+import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+
+/**
+ * Test the Equinox service discoverer.
+ *
+ * @version $Rev$ $Date$
+ */
+public class EquinoxServiceDiscovererTestCase {
+ private static EquinoxServiceDiscoverer discoverer;
+ private static Bundle testBundle;
+ private static TestEquinoxHost host;
+
+ private static String getState(Bundle b) {
+ StringBuffer sb = new StringBuffer();
+ int s = b.getState();
+ if ((s & Bundle.UNINSTALLED) != 0) {
+ sb.append("UNINSTALLED ");
+ }
+ if ((s & Bundle.INSTALLED) != 0) {
+ sb.append("INSTALLED ");
+ }
+ if ((s & Bundle.RESOLVED) != 0) {
+ sb.append("RESOLVED ");
+ }
+ if ((s & Bundle.STARTING) != 0) {
+ sb.append("STARTING ");
+ }
+ if ((s & Bundle.STOPPING) != 0) {
+ sb.append("STOPPING ");
+ }
+ if ((s & Bundle.ACTIVE) != 0) {
+ sb.append("ACTIVE ");
+ }
+ return sb.toString();
+
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ host = new TestEquinoxHost();
+ BundleContext context = host.start();
+
+ InputStream is = EquinoxServiceDiscovererTestCase.class.getResourceAsStream("/test-bundle.jar");
+ testBundle = context.installBundle("test-bundle", is);
+ is.close();
+ discoverer = new EquinoxServiceDiscoverer(context);
+ File dep = new File("target/bundles");
+ List<Bundle> bundles = new ArrayList<Bundle>();
+ if(dep.isDirectory()) {
+ for (File f : dep.listFiles()) {
+ BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
+ JarInputStream jis = new JarInputStream(bis);
+ Manifest manifest = jis.getManifest();
+ if (manifest == null || manifest.getMainAttributes().getValue("Bundle-Name") == null) {
+ bis.close();
+ continue;
+ }
+ bis.close();
+ bis = new BufferedInputStream(new FileInputStream(f));
+ Bundle b = context.installBundle(f.getName(), bis);
+ System.out.println("Installed " + b.getSymbolicName() + " [" + getState(b) + "]");
+ bundles.add(b);
+ bis.close();
+ }
+ }
+ for (Bundle b : bundles) {
+ b.start();
+ System.out.println("Started "+b.getSymbolicName() + " [" + getState(b) + "]");
+ // Get the Platform.getExtensionRegistry()
+ if ("org.eclipse.core.runtime".equals(b.getSymbolicName())) {
+ // The Platform class loaded by the bundle is different that the one
+ // on the classpath
+ Class<?> cls = b.loadClass("org.eclipse.core.runtime.Platform");
+ Method m = cls.getMethod("getExtensionRegistry");
+ Object reg = m.invoke(cls);
+ System.out.println(reg);
+ }
+ }
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ if (testBundle != null) {
+ // Uninstall the bundle to clean up the cache
+ testBundle.uninstall();
+ }
+ host.stop();
+ }
+
+ @Test
+ public void testDiscovery() throws IOException {
+ Collection<ServiceDeclaration> descriptors = discoverer.getServiceDeclarations("test.TestService");
+ Assert.assertEquals(1, descriptors.size());
+ descriptors = discoverer.getServiceDeclarations("notthere");
+ Assert.assertEquals(0, descriptors.size());
+ }
+
+ @Test
+ public void testDiscoveryFirst() throws IOException {
+ ServiceDeclaration descriptor = discoverer.getServiceDeclaration("test.TestService");
+ Assert.assertNotNull(descriptor);
+ descriptor = discoverer.getServiceDeclaration("notthere");
+ Assert.assertNull(descriptor);
+ }
+
+
+}
diff --git a/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/TestEquinoxHost.java b/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/TestEquinoxHost.java
new file mode 100644
index 0000000000..e000faa447
--- /dev/null
+++ b/branches/sca-java-2.0-M3/modules/extensibility-equinox/src/test/java/org/apache/tuscany/sca/extensibility/equinox/TestEquinoxHost.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.extensibility.equinox;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.runtime.adaptor.EclipseStarter;
+import org.eclipse.core.runtime.adaptor.LocationManager;
+import org.osgi.framework.BundleContext;
+
+/**
+ * A test host that starts/stops Equinox.
+ *
+ * @version $Rev: $ $Date: $
+ */
+public class TestEquinoxHost {
+
+ private final static String systemPackages =
+ "org.osgi.framework; version=1.3.0," + "org.osgi.service.packageadmin; version=1.2.0, "
+ + "org.osgi.service.startlevel; version=1.0.0, "
+ + "org.osgi.service.url; version=1.0.0, "
+ + "org.osgi.util.tracker; version=1.3.2, "
+ + "javax.xml, "
+ + "javax.xml.datatype, "
+ + "javax.xml.namespace, "
+ + "javax.xml.parsers, "
+ + "javax.xml.transform, "
+ + "javax.xml.transform.dom, "
+ + "javax.xml.transform.sax, "
+ + "javax.xml.transform.stream, "
+ + "javax.xml.validation, "
+ + "javax.xml.xpath, "
+ // Force the classes to be imported from the system bundle
+ + "javax.xml.stream, "
+ + "javax.xml.stream.util, "
+ + "javax.sql,"
+ + "org.w3c.dom, "
+ + "org.xml.sax, "
+ + "org.xml.sax.ext, "
+ + "org.xml.sax.helpers, "
+ + "javax.security.auth, "
+ + "javax.security.cert, "
+ + "javax.security.auth.login, "
+ + "javax.security.auth.callback, "
+ + "javax.naming, "
+ + "javax.naming.spi, "
+ + "javax.naming.directory, "
+ + "javax.management, "
+ + "javax.imageio, "
+ + "sun.misc, "
+ + "javax.net, "
+ + "javax.net.ssl, "
+ + "javax.crypto, "
+ + "javax.rmi, "
+ + "javax.transaction, "
+ + "javax.transaction.xa";
+
+ public BundleContext start() {
+ try {
+ Map<Object, Object> props = new HashMap<Object, Object>();
+ props.put("org.osgi.framework.system.packages", systemPackages);
+ props.put(EclipseStarter.PROP_CLEAN, "true");
+ props.put(LocationManager.PROP_INSTANCE_AREA, new File("target/workspace").toURI().toString());
+ props.put(LocationManager.PROP_INSTALL_AREA, new File("target/eclipse").toURI().toString());
+ EclipseStarter.setInitialProperties(props);
+ BundleContext context = EclipseStarter.startup(new String[]{}, null);
+ return context;
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ public void stop() {
+ try {
+ EclipseStarter.shutdown();
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+}