Remove framework property-based override mechanism from API Region enforcer
Also made missing configuration for an enabled API Regions enforcer
bundle an error.
diff --git a/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java b/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
index 010efec..e86c38a 100644
--- a/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
+++ b/src/main/java/org/apache/sling/feature/apiregions/impl/Activator.java
@@ -24,6 +24,7 @@
import java.util.Dictionary;
import java.util.Hashtable;
+import java.util.logging.Level;
public class Activator implements BundleActivator {
static final String REGIONS_PROPERTY_NAME = "org.apache.sling.feature.apiregions.regions";
@@ -35,8 +36,12 @@
return; // Component not enabled
Dictionary<String, Object> props = new Hashtable<>();
- RegionEnforcer enforcer = new RegionEnforcer(context, props, regions);
- context.registerService(ResolverHookFactory.class, enforcer, props);
+ try {
+ RegionEnforcer enforcer = new RegionEnforcer(context, props, regions);
+ context.registerService(ResolverHookFactory.class, enforcer, props);
+ } catch (Exception e) {
+ RegionEnforcer.LOG.log(Level.SEVERE, "Problem activating API Regions runtime enforcement component", e);
+ }
}
@Override
diff --git a/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java b/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
index badaa5c..f4ecaec 100644
--- a/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
+++ b/src/main/java/org/apache/sling/feature/apiregions/impl/RegionEnforcer.java
@@ -40,7 +40,6 @@
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
import java.util.logging.Logger;
@@ -51,8 +50,6 @@
static final String CLASSLOADER_PSEUDO_PROTOCOL = "classloader://";
static final String PROPERTIES_RESOURCE_PREFIX = "sling.feature.apiregions.resource.";
static final String PROPERTIES_FILE_LOCATION = "sling.feature.apiregions.location";
- static final String SYNTHESIZED_BUNDLES_KEY = "sling.feature.apiregions.bundles";
- static final String SYNTHESIZED_FEATURE = "org.apache.sling:org.apache.sling.feature.synthesized:0.0.0-SNAPSHOT";
static final String IDBSNVER_FILENAME = "idbsnver.properties";
static final String BUNDLE_FEATURE_FILENAME = "bundles.properties";
@@ -99,54 +96,9 @@
enabledRegions = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(regionsProp.split(","))));
- loadRegionsFromProperties(context, bsnVerMap, bundleFeatureMap, featureRegionMap);
// TODO fix all collections
}
- private static void loadRegionsFromProperties(BundleContext context,
- Map<Entry<String, Version>, List<String>> bsnVerMap,
- Map<String, Set<String>> bundleFeatureMap,
- Map<String, Set<String>> featureRegionMap) {
- String prop = context.getProperty(SYNTHESIZED_BUNDLES_KEY);
- if (prop == null)
- return;
-
- for (String bundle : prop.split(",")) {
- String[] bundleinfo = bundle.split("=");
- if (bundleinfo.length != 2) {
- LOG.severe("Incorrect bundle info '" + bundle + "' in " + prop);
- continue;
- }
-
- String bsnver = bundleinfo[0];
- String info = bundleinfo[1];
-
- String[] bsnver1 = bsnver.split(":");
- if (bsnver1.length != 2) {
- LOG.severe("Incorrect bsn and version '" + bsnver + "' in " + prop);
- continue;
- }
-
- String bsn = bsnver1[0];
- String ver = bsnver1[1];
-
- String[] aidregion = info.split(";");
- if (aidregion.length != 2) {
- LOG.severe("Incorrect artifact and region '" + aidregion + "' in " + prop);
- continue;
- }
-
- String aid = aidregion[0];
- String region = aidregion[1];
-
- addBsnVerArtifact(bsnVerMap, bsn, ver, aid);
- addValuesToMap(bundleFeatureMap, aid, SYNTHESIZED_FEATURE);
- addValuesToMap(featureRegionMap, SYNTHESIZED_FEATURE, region);
-
- LOG.info("Added bundle " + bsnver + " as " + aid + " to feature " + region);
- }
- }
-
private static Map<Map.Entry<String, Version>, List<String>> populateBSNVerMap(URI idbsnverFile) throws IOException {
if (idbsnverFile == null) {
return new HashMap<>();
@@ -231,7 +183,8 @@
}
if (fn == null)
- return null;
+ throw new IOException("API Region Enforcement enabled, but no configuration found to find "
+ + "region definition resource: " + name);
if (fn.contains(":")) {
if (fn.startsWith(CLASSLOADER_PSEUDO_PROTOCOL)) {
diff --git a/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java b/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
index 9a279fd..c2f13d1 100644
--- a/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
+++ b/src/test/java/org/apache/sling/feature/apiregions/impl/ActivatorTest.java
@@ -30,8 +30,11 @@
import java.util.Hashtable;
import java.util.Properties;
+import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.BUNDLE_FEATURE_FILENAME;
import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.FEATURE_REGION_FILENAME;
+import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.IDBSNVER_FILENAME;
import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.PROPERTIES_RESOURCE_PREFIX;
+import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.REGION_PACKAGE_FILENAME;
public class ActivatorTest {
private Properties savedProps;
@@ -50,15 +53,27 @@
@Test
public void testStart() throws Exception {
+ String i = getClass().getResource("/idbsnver1.properties").getFile();
+ String b = getClass().getResource("/bundles1.properties").getFile();
String f = getClass().getResource("/features1.properties").getFile();
+ String r = getClass().getResource("/regions1.properties").getFile();
Dictionary<String, Object> expectedProps = new Hashtable<>();
+ expectedProps.put(IDBSNVER_FILENAME, new File(i).toURI().toString());
+ expectedProps.put(BUNDLE_FEATURE_FILENAME, new File(b).toURI().toString());
expectedProps.put(FEATURE_REGION_FILENAME, new File(f).toURI().toString());
+ expectedProps.put(REGION_PACKAGE_FILENAME, new File(r).toURI().toString());
BundleContext bc = Mockito.mock(BundleContext.class);
Mockito.when(bc.getProperty(Activator.REGIONS_PROPERTY_NAME)).thenReturn("*");
+ Mockito.when(bc.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).
+ thenReturn(i);
+ Mockito.when(bc.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).
+ thenReturn(b);
Mockito.when(bc.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).
thenReturn(f);
+ Mockito.when(bc.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).
+ thenReturn(r);
Activator a = new Activator();
a.start(bc);
diff --git a/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java b/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
index 2962cb4..45192bd 100644
--- a/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
+++ b/src/test/java/org/apache/sling/feature/apiregions/impl/RegionEnforcerTest.java
@@ -30,8 +30,6 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
-import java.util.List;
-import java.util.Set;
import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.BUNDLE_FEATURE_FILENAME;
import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.FEATURE_REGION_FILENAME;
@@ -39,27 +37,33 @@
import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.PROPERTIES_FILE_LOCATION;
import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.PROPERTIES_RESOURCE_PREFIX;
import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.REGION_PACKAGE_FILENAME;
-import static org.apache.sling.feature.apiregions.impl.RegionEnforcer.SYNTHESIZED_BUNDLES_KEY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
public class RegionEnforcerTest {
@Test
public void testRegionEnforcerNoConfiguration() throws Exception {
BundleContext ctx = Mockito.mock(BundleContext.class);
- RegionEnforcer re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
- assertEquals(0, re.bsnVerMap.size());
- assertEquals(0, re.bundleFeatureMap.size());
- assertEquals(0, re.featureRegionMap.size());
- assertEquals(0, re.regionPackageMap.size());
+ RegionEnforcer re;
+ try {
+ re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
+ fail("Expected exception. Enforcer is enabled but is missing configuration");
+ } catch (Exception e) {
+ // good
+ }
}
@Test
public void testLoadBSNVerMap() throws Exception {
+ String e = getClass().getResource("/empty.properties").getFile();
String f = getClass().getResource("/idbsnver1.properties").getFile();
BundleContext ctx = Mockito.mock(BundleContext.class);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(f);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(e);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(e);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(e);
Hashtable<String, Object> props = new Hashtable<>();
RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
@@ -73,9 +77,13 @@
@Test
public void testLoadBundleFeatureMap() throws Exception {
+ String e = getClass().getResource("/empty.properties").getFile();
String f = getClass().getResource("/bundles1.properties").getFile();
BundleContext ctx = Mockito.mock(BundleContext.class);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(e);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(f);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(e);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(e);
Hashtable<String, Object> props = new Hashtable<>();
RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
@@ -91,9 +99,13 @@
@Test
public void testLoadFeatureRegionMap() throws Exception {
+ String e = getClass().getResource("/empty.properties").getFile();
String f = getClass().getResource("/features1.properties").getFile();
BundleContext ctx = Mockito.mock(BundleContext.class);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(e);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(e);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(f);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(e);
Hashtable<String, Object> props = new Hashtable<>();
RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
@@ -107,8 +119,12 @@
@Test
public void testLoadRegionPackageMap() throws Exception {
+ String e = getClass().getResource("/empty.properties").getFile();
String f = getClass().getResource("/regions1.properties").getFile();
BundleContext ctx = Mockito.mock(BundleContext.class);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(e);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(e);
+ Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(e);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(f);
Hashtable<String, Object> props = new Hashtable<>();
@@ -183,38 +199,4 @@
assertEquals(Arrays.asList("r0", "r1", "r2", "r3"),
new ArrayList<>(re.featureRegionMap.get("org.sling:something:1.2.3")));
}
-
- @Test
- public void testFrameworkPropertyBundleRegions() throws Exception {
- BundleContext ctx = Mockito.mock(BundleContext.class);
- Mockito.when(ctx.getProperty(SYNTHESIZED_BUNDLES_KEY)).thenReturn(
- "org.foo.bar:1.2.3=org.foo:bar:1.2.3;myregion," +
- "org.foo.jar:1.0.0=org.foo:jar:1.0.0;myregion");
-
- RegionEnforcer re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
-
- assertTrue(re.bsnVerMap.size() == 2);
- List<String> al1 = re.bsnVerMap.get(new AbstractMap.SimpleEntry<>(
- "org.foo.bar", Version.valueOf("1.2.3")));
- assertEquals(1, al1.size());
- String a1 = al1.iterator().next();
-
- List<String> al2 = re.bsnVerMap.get(new AbstractMap.SimpleEntry<>(
- "org.foo.jar", Version.valueOf("1.0.0")));
- assertEquals(1, al2.size());
- String a2 = al2.iterator().next();
-
- Set<String> fl1 = re.bundleFeatureMap.get(a1);
- assertEquals(1, fl1.size());
- String f1 = fl1.iterator().next();
- Set<String> fl2 = re.bundleFeatureMap.get(a2);
- assertEquals(1, fl2.size());
- String f2 = fl2.iterator().next();
- assertEquals(f1, f2);
-
- Set<String> rl = re.featureRegionMap.get(f1);
- assertEquals(1, rl.size());
- String r = rl.iterator().next();
- assertEquals("myregion", r);
- }
}
diff --git a/src/test/resources/empty.properties b/src/test/resources/empty.properties
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/src/test/resources/empty.properties
@@ -0,0 +1 @@
+