Bug 538016 - Add test for new ClassLoaderHook.getClassPathEntries method

Change-Id: Ia07e253c2bf0dcfd2dbcc8c893a65cb806d40d7f
Signed-off-by: Thomas Watson <tjwatson@us.ibm.com>
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/classloader.hooks.a/org/eclipse/osgi/tests/classloader/hooks/a/TestHookConfigurator.java b/bundles/org.eclipse.osgi.tests/bundles_src/classloader.hooks.a/org/eclipse/osgi/tests/classloader/hooks/a/TestHookConfigurator.java
index 75bf704..61e86e9 100644
--- a/bundles/org.eclipse.osgi.tests/bundles_src/classloader.hooks.a/org/eclipse/osgi/tests/classloader/hooks/a/TestHookConfigurator.java
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/classloader.hooks.a/org/eclipse/osgi/tests/classloader/hooks/a/TestHookConfigurator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2017 IBM Corporation and others.
+ * 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
@@ -26,6 +26,7 @@
 	private static final String BAD_TRANSFORM_PROP = "classloader.hooks.a.bad.transform";
 	private static final String RECURSION_LOAD = "classloader.hooks.a.recursion.load";
 	private static final String RECURSION_LOAD_SUPPORTED = "classloader.hooks.a.recursion.load.supported";
+	private static final String FILTER_CLASS_PATHS = "classloader.hooks.a.filter.class.paths";
 	final ThreadLocal<Boolean> doingRecursionLoad = new ThreadLocal<Boolean>() {
 		protected Boolean initialValue() {
 			return false;
@@ -73,6 +74,13 @@
 				return Boolean.getBoolean(RECURSION_LOAD_SUPPORTED);
 			}
 
+			@Override
+			public ClasspathEntry[] getClassPathEntries(String name, ClasspathManager manager) {
+				if (Boolean.getBoolean(FILTER_CLASS_PATHS)) {
+					return new ClasspathEntry[0];
+				}
+				return super.getClassPathEntries(name, manager);
+			}
 		});
 	}
 }
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/ClassLoaderHookTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/ClassLoaderHookTests.java
index abef0cf..131d77a 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/ClassLoaderHookTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/ClassLoaderHookTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2017 IBM Corporation and others.
+ * 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
@@ -15,12 +15,18 @@
 
 import java.io.File;
 import java.net.URL;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import org.eclipse.osgi.internal.hookregistry.HookRegistry;
 import org.eclipse.osgi.tests.OSGiTestsActivator;
-import org.osgi.framework.*;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
 import org.osgi.framework.hooks.weaving.WeavingHook;
 import org.osgi.framework.hooks.weaving.WovenClass;
 import org.osgi.framework.launch.Framework;
@@ -37,6 +43,7 @@
 	private static final String BAD_TRANSFORM_PROP = "classloader.hooks.a.bad.transform";
 	private static final String RECURSION_LOAD = "classloader.hooks.a.recursion.load";
 	private static final String RECURSION_LOAD_SUPPORTED = "classloader.hooks.a.recursion.load.supported";
+	private static final String FILTER_CLASS_PATHS = "classloader.hooks.a.filter.class.paths";
 
 	private Map<String, String> configuration;
 	private Framework framework;
@@ -48,6 +55,7 @@
 		setBadTransform(false);
 		setRecursionLoad(false);
 		setRecursionLoadSupported(false);
+		setFilterClassPaths(false);
 		String loc = bundleInstaller.getBundleLocation(HOOK_CONFIGURATOR_BUNDLE);
 		loc = loc.substring(loc.indexOf("file:"));
 		classLoader.addURL(new URL(loc));
@@ -88,6 +96,10 @@
 		System.setProperty(RECURSION_LOAD_SUPPORTED, Boolean.toString(value));
 	}
 
+	private void setFilterClassPaths(boolean value) {
+		System.setProperty(FILTER_CLASS_PATHS, Boolean.toString(value));
+	}
+
 	public void testRejectTransformationFromWeavingHook() throws Exception {
 		setRejectTransformation(true);
 		initAndStartFramework();
@@ -165,4 +177,20 @@
 		});
 		refreshSignal.await(30, TimeUnit.SECONDS);
 	}
+
+	public void testFilterClassPaths() throws Exception {
+		setFilterClassPaths(false);
+		initAndStartFramework();
+		Bundle b = installBundle();
+		b.loadClass(TEST_CLASSNAME);
+
+		setFilterClassPaths(true);
+		refreshBundles(Collections.singleton(b));
+		try {
+			b.loadClass(TEST_CLASSNAME);
+			fail("Expected a ClassNotFoundException.");
+		} catch (ClassNotFoundException e) {
+			// expected
+		}
+	}
 }