LUCENE-10307: add exported packages consistency check.

This commit is contained in:
Dawid Weiss 2021-12-10 17:53:16 +01:00
parent 8511def95b
commit 51d93635aa
1 changed files with 39 additions and 0 deletions

View File

@ -244,4 +244,43 @@ public class TestModularLayer {
},
TreeMap::new));
}
/** Ensure all open packages in the descriptor are in sync with the module's actual content. */
@Test
public void testAllOpenPackagesInSync() throws IOException {
for (var module : allCoreModules) {
Set<String> modulePackages = getExportedModulePackages(module);
Set<String> jarPackages = getJarPackages(module);
Assertions.assertThat(modulePackages)
.as("Exported packages in module: " + module.descriptor().name())
.containsExactlyInAnyOrderElementsOf(jarPackages);
}
}
private Set<String> getJarPackages(ModuleReference module) throws IOException {
try (ModuleReader reader = module.open()) {
return reader
.list()
.filter(
entry ->
!entry.startsWith("META-INF/")
&& !entry.equals("module-info.class")
&& !entry.endsWith("/"))
.map(entry -> entry.replaceAll("/[^/]+$", ""))
.map(entry -> entry.replace('/', '.'))
.filter(
entry -> {
// Filter out luke's packages. They're not exported.
return !entry.startsWith("org.apache.lucene.luke");
})
.collect(Collectors.toCollection(TreeSet::new));
}
}
private Set<String> getExportedModulePackages(ModuleReference module) {
return module.descriptor().exports().stream()
.map(export -> export.toString())
.collect(Collectors.toCollection(TreeSet::new));
}
}