You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by da...@apache.org on 2018/11/07 11:45:26 UTC
[sling-org-apache-sling-feature-apiregions] 06/19: Unit tests for
the apiregions runtime component.
This is an automated email from the ASF dual-hosted git repository.
davidb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-apiregions.git
commit 57ed82972310fb745820f764c221716863c446ac
Author: David Bosschaert <bo...@adobe.com>
AuthorDate: Sun Nov 4 20:07:39 2018 +0000
Unit tests for the apiregions runtime component.
---
.../apiregions/impl/ResolverHookImplTest.java | 50 ++++++++++++++++++++--
1 file changed, 46 insertions(+), 4 deletions(-)
diff --git a/src/test/java/org/apache/sling/feature/apiregions/impl/ResolverHookImplTest.java b/src/test/java/org/apache/sling/feature/apiregions/impl/ResolverHookImplTest.java
index eead297..21e77e2 100644
--- a/src/test/java/org/apache/sling/feature/apiregions/impl/ResolverHookImplTest.java
+++ b/src/test/java/org/apache/sling/feature/apiregions/impl/ResolverHookImplTest.java
@@ -31,6 +31,7 @@ import org.osgi.framework.wiring.BundleRevision;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -190,16 +191,20 @@ public class ResolverHookImplTest {
Collections.singletonList("b8"));
bsnvermap.put(new AbstractMap.SimpleEntry<String,Version>("some.other.bundle", new Version(9,9,9,"suffix")),
Collections.singletonList("b9"));
+ bsnvermap.put(new AbstractMap.SimpleEntry<String,Version>("a.b.c", new Version(1,2,3)),
+ Collections.singletonList("b17"));
Map<String, Set<String>> bfmap = new HashMap<>();
bfmap.put("b7", Collections.singleton("f"));
bfmap.put("b8", Collections.singleton("f1"));
bfmap.put("b9", Collections.singleton("f2"));
+ bfmap.put("b17", Collections.singleton("f3"));
Map<String, Set<String>> frmap = new HashMap<>();
frmap.put("f", new HashSet<>(Arrays.asList("r1", "r2")));
frmap.put("f1", Collections.singleton("r1"));
frmap.put("f2", Collections.singleton("r2"));
+ frmap.put("f3", Collections.singleton("r3"));
Map<String, Set<String>> rpmap = new HashMap<>();
rpmap.put("r0", Collections.singleton("org.bar"));
@@ -213,8 +218,8 @@ public class ResolverHookImplTest {
// where that region exports the package
// Bundle 7 is in feature f with regions r1, r2. Bundle 8 is in feature f1 with regions r1
// r1 exports the org.foo package
- BundleRequirement req0 = mockRequirement(7, "a.b.c", new Version(0,0,0));
- BundleCapability bc0 = mockCapability("org.foo", 8, "a.bundle", new Version(1,0,0));
+ BundleRequirement req0 = mockRequirement("b7", bsnvermap);
+ BundleCapability bc0 = mockCapability("org.foo", "b8", bsnvermap);
List<BundleCapability> candidates0 = new ArrayList<>(Arrays.asList(bc0));
rh.filterMatches(req0, candidates0);
assertEquals(Collections.singletonList(bc0), candidates0);
@@ -223,12 +228,38 @@ public class ResolverHookImplTest {
// but that region doesn't export the pacakge.
// Bundle 7 is in feature f with regions r1, r2. Bundle 9 is in feature f2 with regions r2
// r2 does not export any packages
- BundleRequirement req1 = mockRequirement(7, "a.b.c", new Version(0,0,0));
- BundleCapability bc1 = mockCapability("org.foo", 9, "some.other.bundle", new Version(9,9,9,"suffix"));
+ BundleRequirement req1 = mockRequirement("b7", bsnvermap);
+ BundleCapability bc1 = mockCapability("org.foo", "b9", bsnvermap);
List<BundleCapability> candidates1 = new ArrayList<>(Arrays.asList(bc1));
rh.filterMatches(req1, candidates1);
assertEquals(Collections.emptyList(), candidates1);
+ // Check that we cannot get the capability from another bundle in a different region
+ // Bundle 9 is in feature f2 with region r2
+ // Bundle 17 is in feature f3 with region r3
+ BundleRequirement req2 = mockRequirement("b9", bsnvermap);
+ BundleCapability bc2 = mockCapability("org.bar", "b17", bsnvermap);
+ Collection<BundleCapability> c2 = new ArrayList<>(Arrays.asList(bc2));
+ rh.filterMatches(req2, c2);
+ assertEquals(0, c2.size());
+
+ // Check that we can get the capability from the same bundle
+ BundleRequirement req3 = mockRequirement("b9", bsnvermap);
+ BundleCapability bc3 = mockCapability("abc.xyz", "b9", bsnvermap);
+ Collection<BundleCapability> c3 = new ArrayList<>(Arrays.asList(bc3));
+ rh.filterMatches(req3, c3);
+ assertEquals(Collections.singletonList(bc3), c3);
+ }
+
+ private BundleCapability mockCapability(String pkgName, String bid, Map<Entry<String, Version>, List<String>> bsnvermap) {
+ for (Map.Entry<Map.Entry<String, Version>, List<String>> entry : bsnvermap.entrySet()) {
+ if (entry.getValue().contains(bid)) {
+ // Remove first letter and use rest as bundle ID
+ long id = Long.parseLong(bid.substring(1));
+ return mockCapability(pkgName, id, entry.getKey().getKey(), entry.getKey().getValue());
+ }
+ }
+ throw new IllegalStateException("Bundle not found " + bid);
}
private BundleCapability mockCapability(String pkg, long bundleID, String bsn, Version version) {
@@ -250,6 +281,17 @@ public class ResolverHookImplTest {
return cap;
}
+ private BundleRequirement mockRequirement(String bid, Map<Map.Entry<String, Version>, List<String>> bsnvermap) {
+ for (Map.Entry<Map.Entry<String, Version>, List<String>> entry : bsnvermap.entrySet()) {
+ if (entry.getValue().contains(bid)) {
+ // Remove first letter and use rest as bundle ID
+ long id = Long.parseLong(bid.substring(1));
+ return mockRequirement(id, entry.getKey().getKey(), entry.getKey().getValue());
+ }
+ }
+ throw new IllegalStateException("Bundle not found " + bid);
+ }
+
private BundleRequirement mockRequirement(long bundleID, String bsn, Version version) {
Bundle bundle = Mockito.mock(Bundle.class);
Mockito.when(bundle.getBundleId()).thenReturn(bundleID);