diff options
author | gjoranv <gv@verizonmedia.com> | 2020-07-17 22:36:49 +0200 |
---|---|---|
committer | gjoranv <gv@verizonmedia.com> | 2020-07-17 23:14:45 +0200 |
commit | 7fca48252b72672a1505c9519193ae376eb562eb (patch) | |
tree | 86bdb53e4f92e7ebc64a66323e7ea09c3fcafb74 /container-core | |
parent | 030ef404f8b65fdc469abff0b0a77498fee4837c (diff) |
Add unit test for PlatformBundleLoader
Diffstat (limited to 'container-core')
2 files changed, 66 insertions, 1 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/core/config/PlatformBundleLoader.java b/container-core/src/main/java/com/yahoo/container/core/config/PlatformBundleLoader.java index c6bc52d5c31..1f788823753 100644 --- a/container-core/src/main/java/com/yahoo/container/core/config/PlatformBundleLoader.java +++ b/container-core/src/main/java/com/yahoo/container/core/config/PlatformBundleLoader.java @@ -16,7 +16,7 @@ import java.util.logging.Logger; * Platform bundles are allowed to pre-install other bundles on disk via the * X-JDisc-Preinstall-Bundle manifest header. * - * After the first time, attempts to install additional bundles should be a NOP. + * Attempts to install additional bundles, after the first call, should be a NOP. * * @author gjoranv */ diff --git a/container-core/src/test/java/com/yahoo/container/core/config/PlatformBundleLoaderTest.java b/container-core/src/test/java/com/yahoo/container/core/config/PlatformBundleLoaderTest.java new file mode 100644 index 00000000000..338577c6f4c --- /dev/null +++ b/container-core/src/test/java/com/yahoo/container/core/config/PlatformBundleLoaderTest.java @@ -0,0 +1,65 @@ +package com.yahoo.container.core.config; + +import com.yahoo.config.FileReference; +import com.yahoo.osgi.Osgi; +import org.junit.Before; +import org.junit.Test; +import org.osgi.framework.Bundle; + +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author gjoranv + */ +public class PlatformBundleLoaderTest { + + private static final FileReference BUNDLE_1_REF = new FileReference("bundle-1"); + private static final Bundle BUNDLE_1 = new TestBundle(BUNDLE_1_REF.value()); + private static final FileReference BUNDLE_2_REF = new FileReference("bundle-2"); + private static final Bundle BUNDLE_2 = new TestBundle(BUNDLE_2_REF.value()); + + private PlatformBundleLoader bundleLoader; + private TestOsgi osgi; + + @Before + public void setup() { + osgi = new TestOsgi(testBundles()); + bundleLoader = new PlatformBundleLoader(osgi, new TestBundleInstaller()); + } + + @Test + public void bundles_are_installed_and_started() { + bundleLoader.useBundles(List.of(BUNDLE_1_REF)); + assertEquals(1, osgi.getInstalledBundles().size()); + + // The bundle is installed and started + TestBundle installedBundle = (TestBundle)osgi.getInstalledBundles().get(0); + assertEquals(BUNDLE_1.getSymbolicName(), installedBundle.getSymbolicName()); + assertTrue(installedBundle.started); + } + + @Test + public void bundles_cannot_be_added_by_later_calls() { + bundleLoader.useBundles(List.of(BUNDLE_1_REF)); + bundleLoader.useBundles(List.of(BUNDLE_2_REF)); // Should be a NOP + + assertEquals(1, osgi.getInstalledBundles().size()); + assertEquals(BUNDLE_1.getSymbolicName(), osgi.getInstalledBundles().get(0).getSymbolicName()); + } + + private static Map<String, Bundle> testBundles() { + return Map.of(BUNDLE_1_REF.value(), BUNDLE_1, + BUNDLE_2_REF.value(), BUNDLE_2); + } + + static class TestBundleInstaller extends DiskBundleInstaller { + @Override + public List<Bundle> installBundles(FileReference reference, Osgi osgi) { + return osgi.install(reference.value()); + } + } +} |