diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2016-06-15 23:09:44 +0200 |
commit | 72231250ed81e10d66bfe70701e64fa5fe50f712 (patch) | |
tree | 2728bba1131a6f6e5bdf95afec7d7ff9358dac50 /jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/core/FelixFrameworkIntegrationTest.java |
Publish
Diffstat (limited to 'jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/core/FelixFrameworkIntegrationTest.java')
-rw-r--r-- | jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/core/FelixFrameworkIntegrationTest.java | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/core/FelixFrameworkIntegrationTest.java b/jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/core/FelixFrameworkIntegrationTest.java new file mode 100644 index 00000000000..d6a77a88625 --- /dev/null +++ b/jdisc_core_test/integration_test/src/test/java/com/yahoo/jdisc/core/FelixFrameworkIntegrationTest.java @@ -0,0 +1,223 @@ +// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.jdisc.core; + +import com.yahoo.jdisc.application.BundleInstallationException; +import com.yahoo.jdisc.test.TestDriver; +import org.apache.felix.framework.util.FelixConstants; +import org.junit.Test; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleException; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.Callable; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + + +/** + * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a> + */ +public class FelixFrameworkIntegrationTest { + + @Test + public void requireThatBundlesCanBeInstalled() throws BundleException { + FelixFramework felix = TestDriver.newOsgiFramework(); + felix.start(); + + Bundle bundle = felix.installBundle("cert-a.jar").get(0); + assertNotNull(bundle); + + Iterator<Bundle> it = felix.bundles().iterator(); + assertNotNull(it); + assertTrue(it.hasNext()); + assertEquals(FelixConstants.SYSTEM_BUNDLE_SYMBOLICNAME, it.next().getSymbolicName()); + assertTrue(it.hasNext()); + assertSame(bundle, it.next()); + assertFalse(it.hasNext()); + + felix.stop(); + } + + @Test + public void requireThatInstallBundleInstructionWorks() throws Exception { + assertBundle("cert-ca.jar", "com.yahoo.jdisc.bundle.c.CertificateC", + "com.yahoo.vespa.jdisc_core.cert-ca", + "com.yahoo.vespa.jdisc_core.cert-a"); + } + + @Test + public void requireThatInstallBundleInstructionResolvesTransitiveDepedencies() throws Exception { + assertBundle("cert-dc.jar", "com.yahoo.jdisc.bundle.d.CertificateD", + "com.yahoo.vespa.jdisc_core.cert-dc", + "com.yahoo.vespa.jdisc_core.cert-ca", + "com.yahoo.vespa.jdisc_core.cert-a"); + } + + @Test + public void requireThatInstallBundleInstructionResolvesAllTransitiveDepedencies() throws Exception { + assertBundle("cert-eab.jar", "com.yahoo.jdisc.bundle.e.CertificateE", + "com.yahoo.vespa.jdisc_core.cert-eab", + "com.yahoo.vespa.jdisc_core.cert-a", + "com.yahoo.vespa.jdisc_core.cert-b"); + } + + @Test + public void requireThatInstallBundleInstructionInstallsEachBundleOnlyOnce() throws Exception { + assertBundle("cert-fac.jar", "com.yahoo.jdisc.bundle.f.CertificateF", + "com.yahoo.vespa.jdisc_core.cert-fac", + "com.yahoo.vespa.jdisc_core.cert-a", + "com.yahoo.vespa.jdisc_core.cert-ca"); + } + + @Test + public void requireThatInstallBundleInstructionTracksLocationInCanonicalForm() throws Exception { + assertBundle("cert-nac.jar", "com.yahoo.jdisc.bundle.n.CertificateN", + "com.yahoo.vespa.jdisc_core.cert-nac", + "com.yahoo.vespa.jdisc_core.cert-a", + "com.yahoo.vespa.jdisc_core.cert-ca"); + } + + @Test + public void requireThatInstallBundleInstructionDetectsAutoDependency() throws Exception { + assertBundle("cert-gg.jar", "com.yahoo.jdisc.bundle.g.CertificateG", + "com.yahoo.vespa.jdisc_core.cert-gg"); + } + + @Test + public void requireThatInstallBundleInstructionDetectsCycles() throws Exception { + assertBundle("cert-hi.jar", "com.yahoo.jdisc.bundle.h.CertificateH", + "com.yahoo.vespa.jdisc_core.cert-hi", + "com.yahoo.vespa.jdisc_core.cert-ih"); + } + + @Test + public void requireThatSystemPackagesAreExported() throws Exception { + assertBundle("cert-k-pkgs.jar", "com.yahoo.jdisc.bundle.k.CertificateK", + "com.yahoo.vespa.jdisc_core.cert-k-pkgs"); + } + + @Test + public void requireThatBundlesCanBeRefreshed() throws Exception { + FelixFramework felix = TestDriver.newOsgiFramework(); + felix.start(); + Bundle bundleL = startBundle(felix, "cert-l1.jar"); + Bundle bundleM = startBundle(felix, "cert-ml.jar"); + assertEquals(1, callClass(bundleM, "com.yahoo.jdisc.bundle.m.CertificateM")); + bundleL.uninstall(); + startBundle(felix, "cert-l2.jar"); + felix.refreshPackages(); + assertEquals(2, callClass(bundleM, "com.yahoo.jdisc.bundle.m.CertificateM")); + felix.stop(); + } + + @Test + public void requireThatBundlesCanBeRefreshedWithDisjunctRemovalClosure() throws Exception { + FelixFramework felix = TestDriver.newOsgiFramework(); + felix.start(); + Bundle bundleA = startBundle(felix, "cert-a.jar"); + Bundle bundleL = startBundle(felix, "cert-l1.jar"); + Bundle bundleM = startBundle(felix, "cert-ml.jar"); + assertEquals(1, callClass(bundleM, "com.yahoo.jdisc.bundle.m.CertificateM")); + bundleA.uninstall(); + bundleL.uninstall(); + startBundle(felix, "cert-l2.jar"); + felix.refreshPackages(); + assertEquals(2, callClass(bundleM, "com.yahoo.jdisc.bundle.m.CertificateM")); + felix.stop(); + } + + @Test + public void requireThatJdiscBundlePathIsConfigurable() throws Exception { + assertBundle("cert-oa-path.jar", "com.yahoo.jdisc.bundle.o.CertificateO", + "com.yahoo.vespa.jdisc_core.cert-oa-path", + "com.yahoo.vespa.jdisc_core.cert-a"); + } + + @Test + public void requireThatBundleSymbolicNameIsRequired() throws Exception { + FelixFramework felix = TestDriver.newOsgiFramework(); + felix.start(); + try { + felix.installBundle("cert-p-jar.jar"); + fail(); + } catch (BundleException e) { + assertTrue(e.getMessage().contains("it might not be an OSGi bundle")); + } + felix.stop(); + } + + @Test + public void requireThatBundleInstallationExceptionContainsInstalledBundles() throws Exception { + FelixFramework felix = TestDriver.newOsgiFramework(); + felix.start(); + assertEquals(1, felix.bundles().size()); + try { + felix.installBundle("cert-tp.jar"); + fail(); + } catch (BundleException e) { + assertTrue(e instanceof BundleInstallationException); + List<Bundle> bundles = ((BundleInstallationException)e).installedBundles(); + assertEquals(1, bundles.size()); + assertEquals("com.yahoo.vespa.jdisc_core.cert-tp", bundles.get(0).getSymbolicName()); + } + assertEquals(2, felix.bundles().size()); // did not clean up the installed bundle inside the catch-block + felix.stop(); + } + + @Test + public void requireThatFragmentBundlesCanBeInstalled() throws Exception { + assertBundle("cert-q-frag.jar", null, + "com.yahoo.vespa.jdisc_core.cert-q-frag"); + } + + @Test + public void requireThatFragmentBundlesCanBePreinstalled() throws Exception { + assertBundle("cert-rq.jar", null, + "com.yahoo.vespa.jdisc_core.cert-rq", + "com.yahoo.vespa.jdisc_core.cert-q-frag"); + } + + private static Bundle startBundle(FelixFramework felix, String bundleLocation) throws BundleException { + List<Bundle> lst = felix.installBundle(bundleLocation); + assertEquals(1, lst.size()); + felix.startBundles(lst, false); + return lst.get(0); + } + + @SuppressWarnings({ "unchecked" }) + private static int callClass(Bundle bundle, String className) throws Exception { + Class certClass = bundle.loadClass(className); + assertNotNull(certClass); + Callable<Integer> cert = (Callable<Integer>)certClass.newInstance(); + assertNotNull(cert); + return cert.call(); + } + + private static void assertBundle(String bundleLocation, String className, String... expectedBundles) + throws Exception { + FelixFramework felix = TestDriver.newOsgiFramework(); + felix.start(); + try { + List<Bundle> bundles = felix.installBundle(bundleLocation); + List<String> actual = new LinkedList<>(); + for (Bundle bundle : bundles) { + actual.add(bundle.getSymbolicName()); + } + assertEquals(Arrays.asList(expectedBundles), actual); + felix.startBundles(bundles, false); + if (className != null) { + assertNotNull(bundles.get(0).loadClass(className).newInstance()); + } + } finally { + felix.stop(); + } + } +} |