You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2020/01/20 12:55:06 UTC

[sling-org-apache-sling-feature-extension-apiregions] 01/01: SLING-8970 - adding test & fixing logic to consider inherited exports in region checks

This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch SLING-8970
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-apiregions.git

commit 1f4f8f1904f70fad6d3a8ee4734d46b07bce84f7
Author: Karl Pauls <kp...@adobe.com>
AuthorDate: Mon Jan 20 13:54:30 2020 +0100

    SLING-8970 - adding test & fixing logic to consider inherited exports in region checks
---
 .../CheckApiRegionsBundleExportsImports.java       | 13 ++++++++
 .../CheckApiRegionsBundleExportsImportsTest.java   | 37 ++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
index d11e2a5..3ff8334 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
@@ -39,6 +39,7 @@ import org.apache.sling.feature.Extensions;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.analyser.task.AnalyserTask;
 import org.apache.sling.feature.analyser.task.AnalyserTaskContext;
+import org.apache.sling.feature.extension.apiregions.api.ApiExport;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegion;
 import org.apache.sling.feature.extension.apiregions.api.ApiRegions;
 import org.apache.sling.feature.scanner.BundleDescriptor;
@@ -207,6 +208,18 @@ public class CheckApiRegionsBundleExportsImports implements AnalyserTask {
                                     Set<String> imRegions =
                                             getBundleRegions(info, apiRegions, ignoreAPIRegions);
 
+                                    // Check exports of the importing regions to consider inherited exports
+                                    for (String imRegion : imRegions)
+                                    {
+                                        ApiRegion region = apiRegions.getRegionByName(imRegion);
+                                        for (ApiExport export : region.listAllExports())
+                                        {
+                                            if (export.getName().equals(pck.getName()))
+                                            {
+                                                exRegions.add(imRegion);
+                                            }
+                                        }
+                                    }
                                     // Record the exporting and importing regions for diagnostics
                                     exportingRegions.addAll(exRegions);
                                     importingRegions.addAll(imRegions);
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImportsTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImportsTest.java
index a0492fa..5c0ce68 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImportsTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImportsTest.java
@@ -336,6 +336,43 @@ public class CheckApiRegionsBundleExportsImportsTest {
         Mockito.verify(ctx, Mockito.never()).reportWarning(Mockito.anyString());
     }
 
+    @Test
+    /*
+     * Bundle 2 imports org.foo.b from bundle 1. Bundle 1 exports it in region1.
+     * Regions
+     */
+    public void testImportFromInheritedRegionSucceeds() throws Exception {
+        String exJson = "[" +
+            "{\"name\": \"region1\", \"exports\": [\"org.foo.b\"],\"feature-origins\":[\"f:f:1\"]}," +
+            "{\"name\": \"region2\", \"exports\": [],\"feature-origins\":[\"f:f:2\"]}" +
+            "]";
+
+        CheckApiRegionsBundleExportsImports t = new CheckApiRegionsBundleExportsImports();
+
+        Feature f = new Feature(ArtifactId.fromMvnId("f:f:1"));
+        Extension ex = new Extension(ExtensionType.JSON, "api-regions", ExtensionState.OPTIONAL);
+        ex.setJSON(exJson);
+        f.getExtensions().add(ex);
+
+
+        FeatureDescriptor fd = new FeatureDescriptorImpl(f);
+
+        fdAddBundle(fd, "g:b1:1", "test-bundle1.jar", f.getId());
+        fdAddBundle(fd, "g:b2:1", "test-bundle2.jar", ArtifactId.fromMvnId("f:f:2"));
+
+        AnalyserTaskContext ctx = Mockito.mock(AnalyserTaskContext.class);
+        Mockito.when(ctx.getFeature()).thenReturn(f);
+        Mockito.when(ctx.getFeatureDescriptor()).thenReturn(fd);
+        Mockito.when(ctx.getConfiguration()).thenReturn(
+            Collections.singletonMap("fileStorage",
+                resourceRoot + "/origins/testImportFromInheritedRegionSucceeds"));
+        t.execute(ctx);
+
+        Mockito.verify(ctx, Mockito.never()).reportError(Mockito.anyString());
+        Mockito.verify(ctx, Mockito.never()).reportWarning(Mockito.anyString());
+
+    }
+
     private void fdAddBundle(FeatureDescriptor fd, String id, String file, ArtifactId... origins) throws IOException {
         Artifact artifact = new Artifact(ArtifactId.fromMvnId(id));
         artifact.setFeatureOrigins(origins);