Bug 543844 - FrameworkExtensionInstaller in dev mode is unable to get
extension files

Change-Id: I30d4dc4f7306fb39c2edba202e1a2f61c6873218
Signed-off-by: Thomas Watson <tjwatson@us.ibm.com>
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.a/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.a/META-INF/MANIFEST.MF
index 346e725..8b80357 100644
--- a/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.a/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.a/META-INF/MANIFEST.MF
@@ -5,3 +5,4 @@
 Bundle-Version: 1.0.0
 Fragment-Host: system.bundle; extension:=framework
 Export-Package: ext.framework.a
+Bundle-ClassPath: .
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
index 1433812..53880a5 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
@@ -23,6 +23,7 @@
 		suite.addTest(new TestSuite(ClassLoaderHookTests.class));
 		suite.addTest(new TestSuite(BundleFileWrapperFactoryHookTests.class));
 		suite.addTest(new TestSuite(ContextFinderTests.class));
+		suite.addTest(new TestSuite(DevClassPathWithExtensionTests.class));
 		return suite;
 	}
 }
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/DevClassPathWithExtensionTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/DevClassPathWithExtensionTests.java
new file mode 100644
index 0000000..dc6d1a5
--- /dev/null
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/DevClassPathWithExtensionTests.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2018 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.tests.hooks.framework;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.osgi.internal.framework.EquinoxConfiguration;
+import org.eclipse.osgi.tests.OSGiTestsActivator;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.launch.Framework;
+import org.osgi.framework.wiring.FrameworkWiring;
+
+public class DevClassPathWithExtensionTests extends AbstractFrameworkHookTests {
+	private static final String TEST_BUNDLE = "ext.framework.a";
+
+	private Map<String, String> configuration;
+	private Framework framework;
+	private String location;
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		location = bundleInstaller.getBundleLocation(TEST_BUNDLE);
+		File file = OSGiTestsActivator.getContext().getDataFile(getName());
+		configuration = new HashMap<String, String>();
+		configuration.put(Constants.FRAMEWORK_STORAGE, file.getAbsolutePath());
+		configuration.put(EquinoxConfiguration.PROP_DEV, "bin/");
+		framework = createFramework(configuration);
+	}
+
+	protected void tearDown() throws Exception {
+		stopQuietly(framework);
+		super.tearDown();
+	}
+
+	private void initAndStartFramework() throws Exception {
+		initAndStart(framework);
+	}
+
+	private Bundle installBundle() throws Exception {
+		return framework.getBundleContext().installBundle(location);
+	}
+
+	public void testDevClassPathWithExtension() throws Exception {
+		initAndStartFramework();
+
+		Bundle b = installBundle();
+		assertTrue("Did not resolve test extension", resolveBundles(Collections.singleton(b)));
+
+		stop(framework);
+
+		// reload the framework which uses read-only data structures
+		framework = createFramework(configuration);
+		initAndStart(framework);
+	}
+
+	private boolean resolveBundles(Collection<Bundle> bundles) {
+		return framework.adapt(FrameworkWiring.class).resolveBundles(bundles);
+	}
+
+}