diff --git a/core-feature-pack/common/src/main/resources/modules/system/layers/base/org/jboss/as/server/main/module.xml b/core-feature-pack/common/src/main/resources/modules/system/layers/base/org/jboss/as/server/main/module.xml index ce6cf48ee08..c85ba7b5e2f 100644 --- a/core-feature-pack/common/src/main/resources/modules/system/layers/base/org/jboss/as/server/main/module.xml +++ b/core-feature-pack/common/src/main/resources/modules/system/layers/base/org/jboss/as/server/main/module.xml @@ -28,14 +28,13 @@ + - - diff --git a/testsuite/shared/src/main/java/org/jboss/as/test/layers/LayersTest.java b/testsuite/shared/src/main/java/org/jboss/as/test/layers/LayersTest.java index 3e9971626c2..0b7f72085f1 100644 --- a/testsuite/shared/src/main/java/org/jboss/as/test/layers/LayersTest.java +++ b/testsuite/shared/src/main/java/org/jboss/as/test/layers/LayersTest.java @@ -123,9 +123,11 @@ public static void testLayersModuleUse(Set unused, ScanContext scanConte appendResult(k, layers.get(k), builder, reference); } + // The only modules that are expected to be not provisioned are the un-used ones. // If more are not provisioned, then we are missing some modules. - String missingRequired = listModules(deltaModules, m -> !unused.contains(m)); + final Set referenceAliases = reference.getAliases(); // don't require callers to include alias modules in 'unused' + String missingRequired = listModules(deltaModules, m -> !unused.contains(m) && !referenceAliases.contains(m)); if (!missingRequired.isEmpty()) { String error = "Some expected modules have not been provisioned in " + ALL_LAYERS; builder.append("#!!!!!ERROR ").append(error).append("\n"); @@ -198,11 +200,18 @@ public static void testUnreferencedModules(Set unreferenced, ScanContext // Check that the reference has no more un-referenced modules than the expected ones. Set allUnReferenced = new HashSet<>(unreferenced); final Set refUnreferenced = reference.getNotReferenced(); - String invalidUnref = listModules(refUnreferenced, m -> !allUnReferenced.contains(m)); + final Set referenceAliases = reference.getAliases(); // don't require callers to include alias modules in 'unreferenced' + String invalidUnref = listModules(refUnreferenced, m -> !allUnReferenced.contains(m) && !referenceAliases.contains(m)); if (!invalidUnref.isEmpty()) { appendExceptionMsg(exceptionBuilder, "Some unreferenced modules are unexpected " + invalidUnref, empty); } + // Check that alias modules are not referenced + String referencedAlias = listModules(referenceAliases, m -> !refUnreferenced.contains(m)); + if (!referencedAlias.isEmpty()) { + appendExceptionMsg(exceptionBuilder, "Some alias modules are referenced " + referencedAlias, empty); + } + if (VALIDATE_INPUTS) { // Confirm that 'unreferenced' modules actually exist in the reference installation @@ -463,6 +472,11 @@ private static Set appendResult(String title, Result result, StringBuild notReferenced.append(s).append(","); } builder.append("unreferenced_modules=").append(notReferenced).append("\n"); + StringBuilder aliases = new StringBuilder(); + for (String s : result.getAliases()) { + aliases.append(s).append(","); + } + builder.append("alias_modules=").append(aliases).append("\n"); builder.append("num_unresolved=").append(optionals.size()).append("\n"); } for (Map.Entry> entry : optionals.entrySet()) { diff --git a/testsuite/shared/src/main/java/org/jboss/as/test/layers/Result.java b/testsuite/shared/src/main/java/org/jboss/as/test/layers/Result.java index 554eb60ebff..b128a418a93 100644 --- a/testsuite/shared/src/main/java/org/jboss/as/test/layers/Result.java +++ b/testsuite/shared/src/main/java/org/jboss/as/test/layers/Result.java @@ -60,13 +60,16 @@ public String getModule() { private final Map> unresolvedOptional; private final Set modules; private final Set notReferenced; + private final Set aliases; private final List extensions; - Result(long size, Set modules, Map> unresolvedOptional, Set notReferenced, List extensions) { + Result(long size, Set modules, Map> unresolvedOptional, Set notReferenced, + Set aliases, List extensions) { this.size = size; this.modules = modules; this.unresolvedOptional = unresolvedOptional; this.notReferenced = notReferenced; + this.aliases = aliases; this.extensions = extensions; } @@ -98,6 +101,13 @@ public Set getNotReferenced() { return notReferenced; } + /** + * @return the aliases + */ + public Set getAliases() { + return aliases; + } + /** * @return the extensions */ diff --git a/testsuite/shared/src/main/java/org/jboss/as/test/layers/Scanner.java b/testsuite/shared/src/main/java/org/jboss/as/test/layers/Scanner.java index ef45e89126b..a46f3ae166c 100644 --- a/testsuite/shared/src/main/java/org/jboss/as/test/layers/Scanner.java +++ b/testsuite/shared/src/main/java/org/jboss/as/test/layers/Scanner.java @@ -41,7 +41,7 @@ public static Result scan(Path homePath, Path configFile) throws Exception { Map> optionalDependencies = new TreeMap<>(); List size = new ArrayList<>(); size.add((long) 0); - Files.walkFileTree(homePath, new SimpleFileVisitor() { + Files.walkFileTree(homePath, new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { size.set(0, size.get(0) + attrs.size()); @@ -50,7 +50,8 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { }); Map> modulesReference = new HashMap<>(); Set modules = new HashSet<>(); - Files.walkFileTree(modulePath, new SimpleFileVisitor() { + Set aliases = new HashSet<>(); + Files.walkFileTree(modulePath, new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { @@ -63,13 +64,13 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) Document document = documentBuilder.parse(file.toFile()); Element elemAlias = (Element) document.getElementsByTagName("module-alias").item(0); if (elemAlias != null) { + // Track both the alias and the target, with the alias treated as a ref to target String moduleName = elemAlias.getAttribute("name"); + aliases.add(moduleName); + modules.add(moduleName); + modulesReference.computeIfAbsent(moduleName, k -> new HashSet<>()); String target = elemAlias.getAttribute("target-name"); - Set referencing = modulesReference.get(target); - if (referencing == null) { - referencing = new HashSet<>(); - modulesReference.put(target, referencing); - } + Set referencing = modulesReference.computeIfAbsent(target, k -> new HashSet<>()); referencing.add(moduleName); return FileVisitResult.CONTINUE; } @@ -93,11 +94,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) optionals.add(mod); } } - Set referencing = modulesReference.get(mod); - if (referencing == null) { - referencing = new HashSet<>(); - modulesReference.put(mod, referencing); - } + Set referencing = modulesReference.computeIfAbsent(mod, k -> new HashSet<>()); referencing.add(moduleName); } } @@ -112,8 +109,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) } @Override - public FileVisitResult postVisitDirectory(Path dir, IOException e) - throws IOException { + public FileVisitResult postVisitDirectory(Path dir, IOException e) { return FileVisitResult.CONTINUE; } } @@ -123,11 +119,7 @@ public FileVisitResult postVisitDirectory(Path dir, IOException e) for (Map.Entry> entry : optionalDependencies.entrySet()) { for (String opt : entry.getValue()) { if (!modules.contains(opt)) { - Set roots = missing.get(opt); - if (roots == null) { - roots = new TreeSet<>(); - missing.put(opt, roots); - } + Set roots = missing.computeIfAbsent(opt, k -> new TreeSet<>()); roots.add(entry.getKey()); } } @@ -198,7 +190,7 @@ public FileVisitResult postVisitDirectory(Path dir, IOException e) extensionResults.add(new Result.ExtensionResult(ex, extSize.get(0) / 1024, deps, unresolved)); } - return new Result(size.get(0) / 1024, modules, missing, allNotReferenced, extensionResults); + return new Result(size.get(0) / 1024, modules, missing, allNotReferenced, aliases, extensionResults); } private static Set retrieveExtensionModules(Path conf) throws Exception { @@ -240,7 +232,7 @@ private static void getDependencies(Path modulePath, String module, Set return; } // Add content size. - Files.walkFileTree(path.getParent(), new SimpleFileVisitor() { + Files.walkFileTree(path.getParent(), new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { size.set(0, size.get(0) + attrs.size());