blob: 7fd0be6861d3c7dfa2297a5599992025aa08cee9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.sling.feature.apiregions.impl;
import org.junit.Test;
import org.mockito.Mockito;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Version;
import java.io.File;
import java.util.AbstractMap;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
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_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.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
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());
}
@Test
public void testLoadBSNVerMap() throws Exception {
String f = getClass().getResource("/idbsnver1.properties").getFile();
BundleContext ctx = Mockito.mock(BundleContext.class);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).thenReturn(f);
Hashtable<String, Object> props = new Hashtable<>();
RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
assertEquals(2, re.bsnVerMap.size());
assertEquals(Collections.singletonList("g:b1:1"),
re.bsnVerMap.get(new AbstractMap.SimpleEntry<String,Version>("b1", new Version(1,0,0))));
assertEquals(new HashSet<>(Arrays.asList("g:b2:1.2.3", "g2:b2:1.2.4")),
new HashSet<>(re.bsnVerMap.get(new AbstractMap.SimpleEntry<String,Version>("b2", new Version(1,2,3)))));
assertEquals(new File(f).toURI().toString(), props.get(IDBSNVER_FILENAME));
}
@Test
public void testLoadBundleFeatureMap() throws Exception {
String f = getClass().getResource("/bundles1.properties").getFile();
BundleContext ctx = Mockito.mock(BundleContext.class);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).thenReturn(f);
Hashtable<String, Object> props = new Hashtable<>();
RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
assertEquals(3, re.bundleFeatureMap.size());
assertEquals(Collections.singleton("org.sling:something:1.2.3:slingosgifeature:myclassifier"),
re.bundleFeatureMap.get("org.sling:b1:1"));
assertEquals(Collections.singleton("org.sling:something:1.2.3:slingosgifeature:myclassifier"),
re.bundleFeatureMap.get("org.sling:b2:1"));
assertEquals(new HashSet<>(Arrays.asList("some.other:feature:123", "org.sling:something:1.2.3:slingosgifeature:myclassifier")),
re.bundleFeatureMap.get("org.sling:b3:1"));
assertEquals(new File(f).toURI().toString(), props.get(BUNDLE_FEATURE_FILENAME));
}
@Test
public void testLoadFeatureRegionMap() throws Exception {
String f = getClass().getResource("/features1.properties").getFile();
BundleContext ctx = Mockito.mock(BundleContext.class);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).thenReturn(f);
Hashtable<String, Object> props = new Hashtable<>();
RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
assertEquals(2, re.featureRegionMap.size());
assertEquals(Collections.singleton("global"),
re.featureRegionMap.get("an.other:feature:123"));
assertEquals(new HashSet<>(Arrays.asList("global", "internal")),
re.featureRegionMap.get("org.sling:something:1.2.3"));
assertEquals(new File(f).toURI().toString(), props.get(FEATURE_REGION_FILENAME));
}
@Test
public void testLoadRegionPackageMap() throws Exception {
String f = getClass().getResource("/regions1.properties").getFile();
BundleContext ctx = Mockito.mock(BundleContext.class);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).thenReturn(f);
Hashtable<String, Object> props = new Hashtable<>();
RegionEnforcer re = new RegionEnforcer(ctx, props, "*");
assertEquals(2, re.regionPackageMap.size());
assertEquals(Collections.singleton("xyz"),
re.regionPackageMap.get("internal"));
assertEquals(new HashSet<>(Arrays.asList("a.b.c", "d.e.f", "test")),
re.regionPackageMap.get("global"));
assertEquals(new File(f).toURI().toString(), props.get(REGION_PACKAGE_FILENAME));
}
@Test
public void testBegin() throws Exception {
BundleContext ctx = Mockito.mock(BundleContext.class);
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + IDBSNVER_FILENAME)).
thenReturn(getClass().getResource("/idbsnver1.properties").getFile());
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + BUNDLE_FEATURE_FILENAME)).
thenReturn(getClass().getResource("/bundles1.properties").getFile());
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + FEATURE_REGION_FILENAME)).
thenReturn(getClass().getResource("/features1.properties").getFile());
Mockito.when(ctx.getProperty(PROPERTIES_RESOURCE_PREFIX + REGION_PACKAGE_FILENAME)).
thenReturn(getClass().getResource("/regions1.properties").getFile());
RegionEnforcer re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
assertTrue(re.bsnVerMap.size() > 0);
assertTrue(re.bundleFeatureMap.size() > 0);
assertTrue(re.featureRegionMap.size() > 0);
assertTrue(re.regionPackageMap.size() > 0);
ResolverHookImpl hook = (ResolverHookImpl) re.begin(null);
assertEquals(re.bsnVerMap, hook.bsnVerMap);
assertEquals(re.bundleFeatureMap, hook.bundleFeatureMap);
assertEquals(re.featureRegionMap, hook.featureRegionMap);
assertEquals(re.regionPackageMap, hook.regionPackageMap);
}
@Test
public void testURLs() throws Exception {
BundleContext ctx = Mockito.mock(BundleContext.class);
String location = new File(getClass().getResource("/props1/idbsnver.properties").
getFile()).getParentFile().toURI().toString();
Mockito.when(ctx.getProperty(PROPERTIES_FILE_LOCATION)).thenReturn(location);
RegionEnforcer re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
assertTrue(re.bsnVerMap.size() > 0);
assertTrue(re.bundleFeatureMap.size() > 0);
assertTrue(re.featureRegionMap.size() > 0);
assertTrue(re.regionPackageMap.size() > 0);
}
@Test
public void testClassloaderURLs() throws Exception {
BundleContext ctx = Mockito.mock(BundleContext.class);
Mockito.when(ctx.getProperty(PROPERTIES_FILE_LOCATION)).thenReturn("classloader://props1");
RegionEnforcer re = new RegionEnforcer(ctx, new Hashtable<String, Object>(), "*");
assertTrue(re.bsnVerMap.size() > 0);
assertTrue(re.bundleFeatureMap.size() > 0);
assertTrue(re.featureRegionMap.size() > 0);
assertTrue(re.regionPackageMap.size() > 0);
}
}