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 <[email protected]> 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);
