From 38047776e8ec84a799fc3a4102f79c3e12c12607 Mon Sep 17 00:00:00 2001 From: Yeray Borges Date: Fri, 13 Dec 2024 23:45:08 +0000 Subject: [PATCH 1/3] [WFCORE-7091] Add model controller constructors for WildFly 31 controllers Jira issue: https://issues.redhat.com/browse/WFCORE-7091 --- .../test/ModelTestModelControllerService.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/model-test/src/main/java/org/jboss/as/model/test/ModelTestModelControllerService.java b/model-test/src/main/java/org/jboss/as/model/test/ModelTestModelControllerService.java index fe36092aeee..fb8c968bf6d 100644 --- a/model-test/src/main/java/org/jboss/as/model/test/ModelTestModelControllerService.java +++ b/model-test/src/main/java/org/jboss/as/model/test/ModelTestModelControllerService.java @@ -181,6 +181,60 @@ protected ModelTestModelControllerService(final ProcessType processType, final R this.runningModeControl = runningModeControl; } + /** + * This is the constructor to use for WildFly 31.0.0 core model tests + */ + protected ModelTestModelControllerService(final ProcessType processType, Stability stability, final RunningModeControl runningModeControl, final TransformerRegistry transformerRegistry, + final StringConfigurationPersister persister, final ModelTestOperationValidatorFilter validateOpsFilter, + final ResourceDefinition rootResourceDefinition, final ControlledProcessState processState, + final ExpressionResolver expressionResolver, final CapabilityRegistry capabilityRegistry, final Controller31x version) { + super(null, + null, + processType, + stability, + runningModeControl, + persister, + processState == null ? new ControlledProcessState(true) : processState, rootResourceDefinition, + null, + expressionResolver, + AuditLogger.NO_OP_LOGGER, + new DelegatingConfigurableAuthorizer(), + new ManagementSecurityIdentitySupplier(), + capabilityRegistry, + null); + + this.persister = persister; + this.transformerRegistry = transformerRegistry; + this.validateOpsFilter = validateOpsFilter; + this.runningModeControl = runningModeControl; + } + + /** + * This is the constructor to use for WildFly 31.0.0 subsystem tests + */ + protected ModelTestModelControllerService(final ProcessType processType, Stability stability, final RunningModeControl runningModeControl, final TransformerRegistry transformerRegistry, + final StringConfigurationPersister persister, final ModelTestOperationValidatorFilter validateOpsFilter, + final ResourceDefinition resourceDefinition, final ExpressionResolver expressionResolver, final ControlledProcessState processState, + final CapabilityRegistry capabilityRegistry, final Controller31x version) { + super(null, + null, + processType, + stability, + runningModeControl, + persister, + processState == null ? new ControlledProcessState(true) : processState, + resourceDefinition, null, + expressionResolver != null ? expressionResolver : ExpressionResolver.TEST_RESOLVER, + AuditLogger.NO_OP_LOGGER, new DelegatingConfigurableAuthorizer(), + new ManagementSecurityIdentitySupplier(), + capabilityRegistry, + null); + this.persister = persister; + this.transformerRegistry = transformerRegistry; + this.validateOpsFilter = validateOpsFilter; + this.runningModeControl = runningModeControl; + } + /** * This is the constructor to use for current core model tests @@ -481,4 +535,10 @@ public static class Controller29x { private Controller29x() { } } + + public static class Controller31x { + public static Controller31x INSTANCE = new Controller31x(); + private Controller31x() { + } + } } From 1650871df8c32fe49e814dd345a112643866ebb8 Mon Sep 17 00:00:00 2001 From: Yeray Borges Date: Fri, 13 Dec 2024 23:49:14 +0000 Subject: [PATCH 2/3] [WFCORE-7091] Adapt the test framework to use an stability level when it is preparing the legacy controllers Jira issue: https://issues.redhat.com/browse/WFCORE-7091 --- ...FirstClassLoaderKernelServicesFactory.java | 23 ++++++ .../local/ScopedKernelServicesBootstrap.java | 81 +++++++++++++------ .../model/test/CoreModelTestDelegate.java | 16 ++-- .../test/TestModelControllerService.java | 18 ++++- .../test/util/TransformersTestParameter.java | 2 + .../elytron/SubsystemTransformerTestCase.java | 10 ++- .../test/ModelTestControllerVersion.java | 17 +++- ...FirstClassLoaderKernelServicesFactory.java | 21 +++++ .../local/ScopedKernelServicesBootstrap.java | 70 +++++++++++----- .../test/AdditionalInitialization.java | 36 +++++++++ .../subsystem/test/SubsystemTestDelegate.java | 29 ++++--- .../test/TestModelControllerService.java | 11 ++- .../org/jboss/as/version/ProductConfig.java | 7 +- 13 files changed, 265 insertions(+), 76 deletions(-) diff --git a/core-model-test/framework/src/main/java/org/jboss/as/core/model/bridge/impl/ChildFirstClassLoaderKernelServicesFactory.java b/core-model-test/framework/src/main/java/org/jboss/as/core/model/bridge/impl/ChildFirstClassLoaderKernelServicesFactory.java index ad5c68caee3..ef665887118 100644 --- a/core-model-test/framework/src/main/java/org/jboss/as/core/model/bridge/impl/ChildFirstClassLoaderKernelServicesFactory.java +++ b/core-model-test/framework/src/main/java/org/jboss/as/core/model/bridge/impl/ChildFirstClassLoaderKernelServicesFactory.java @@ -29,6 +29,7 @@ import org.jboss.as.host.controller.HostRunningModeControl; import org.jboss.as.host.controller.RestartMode; import org.jboss.as.model.test.ModelTestOperationValidatorFilter; +import org.jboss.as.version.Stability; import org.jboss.dmr.ModelNode; import org.jboss.staxmapper.XMLMapper; @@ -54,6 +55,28 @@ public static KernelServices create(List bootOperations, ModelTestOpe return AbstractKernelServicesImpl.create(ProcessType.HOST_CONTROLLER, runningModeControl, validateOpsFilter, bootOperations, testParser, legacyModelVersion, type, modelInitializer, extensionRegistry, null); } + public static KernelServices create(List bootOperations, ModelTestOperationValidatorFilter validateOpsFilter, ModelVersion legacyModelVersion, + List modelInitializerEntries, String stabilityStr) throws Exception { + + Stability stability = Stability.fromString(stabilityStr); + TestModelType type = TestModelType.DOMAIN; + XMLMapper xmlMapper = XMLMapper.Factory.create(); + TestParser testParser = TestParser.create(stability, null, xmlMapper, type); + ModelInitializer modelInitializer = null; + if (modelInitializerEntries != null && !modelInitializerEntries.isEmpty()) { + modelInitializer = new LegacyModelInitializer(modelInitializerEntries); + } + + RunningModeControl runningModeControl = new HostRunningModeControl(RunningMode.ADMIN_ONLY, RestartMode.HC_ONLY); + + ExtensionRegistry extensionRegistry = ExtensionRegistry.builder(ProcessType.HOST_CONTROLLER) + .withRunningMode(runningModeControl.getRunningMode()) + .withStability(stability) + .build(); + + return AbstractKernelServicesImpl.create(ProcessType.HOST_CONTROLLER, runningModeControl, validateOpsFilter, bootOperations, testParser, legacyModelVersion, type, modelInitializer, extensionRegistry, null); + } + private static class LegacyModelInitializer implements ModelInitializer { private final List entries; diff --git a/core-model-test/framework/src/main/java/org/jboss/as/core/model/bridge/local/ScopedKernelServicesBootstrap.java b/core-model-test/framework/src/main/java/org/jboss/as/core/model/bridge/local/ScopedKernelServicesBootstrap.java index 0177fa41021..6ef83c14914 100644 --- a/core-model-test/framework/src/main/java/org/jboss/as/core/model/bridge/local/ScopedKernelServicesBootstrap.java +++ b/core-model-test/framework/src/main/java/org/jboss/as/core/model/bridge/local/ScopedKernelServicesBootstrap.java @@ -14,58 +14,89 @@ import org.jboss.as.core.model.bridge.impl.LegacyControllerKernelServicesProxy; import org.jboss.as.core.model.test.LegacyModelInitializerEntry; import org.jboss.as.model.test.ModelTestOperationValidatorFilter; +import org.jboss.as.version.Stability; import org.jboss.dmr.ModelNode; /** - * * @author Kabir Khan */ public class ScopedKernelServicesBootstrap { + Stability stability; ClassLoader legacyChildFirstClassLoader; ClassLoaderObjectConverter objectConverter; - public ScopedKernelServicesBootstrap(ClassLoader legacyChildFirstClassLoader) { + public ScopedKernelServicesBootstrap(ClassLoader legacyChildFirstClassLoader, Stability stability) { this.legacyChildFirstClassLoader = legacyChildFirstClassLoader; this.objectConverter = new ClassLoaderObjectConverterImpl(this.getClass().getClassLoader(), legacyChildFirstClassLoader); + this.stability = stability; } - public LegacyControllerKernelServicesProxy createKernelServices(List bootOperations, ModelTestOperationValidatorFilter validateOpsFilter, ModelVersion legacyModelVersion, List modelInitializerEntries) throws Exception { Object childClassLoaderKernelServices = createChildClassLoaderKernelServices(bootOperations, validateOpsFilter, legacyModelVersion, modelInitializerEntries); return new LegacyControllerKernelServicesProxy(legacyChildFirstClassLoader, childClassLoaderKernelServices, objectConverter); } - private Object createChildClassLoaderKernelServices(List bootOperations, ModelTestOperationValidatorFilter validateOpsFilter, ModelVersion legacyModelVersion, List modelInitializerEntries){ + private Object createChildClassLoaderKernelServices(List bootOperations, ModelTestOperationValidatorFilter validateOpsFilter, ModelVersion legacyModelVersion, List modelInitializerEntries) { try { Class clazz = legacyChildFirstClassLoader.loadClass(ChildFirstClassLoaderKernelServicesFactory.class.getName()); + List convertedBootOps = getConvertedBootOps(bootOperations); + List convertedModelInitializerEntries = convertModelInitializer(modelInitializerEntries); - Method m = clazz.getMethod("create", - List.class, - legacyChildFirstClassLoader.loadClass(ModelTestOperationValidatorFilter.class.getName()), - legacyChildFirstClassLoader.loadClass(ModelVersion.class.getName()), - List.class); - - List convertedBootOps = new ArrayList(); - for (int i = 0 ; i < bootOperations.size() ; i++) { - ModelNode node = bootOperations.get(i); - if (node != null) { - convertedBootOps.add(objectConverter.convertModelNodeToChildCl(node)); - } - } + Object convertedValidationFilter = objectConverter.convertValidateOperationsFilterToChildCl(validateOpsFilter); + Object convertedLegacyModelVersion = objectConverter.convertModelVersionToChildCl(legacyModelVersion); - List convertedModelInitializerEntries = null; - if (modelInitializerEntries != null) { - convertedModelInitializerEntries = new ArrayList(); - for (LegacyModelInitializerEntry entry : modelInitializerEntries) { - convertedModelInitializerEntries.add(objectConverter.convertLegacyModelInitializerEntryToChildCl(entry)); - } - } + if (!Stability.DEFAULT.equals(stability)) { + Method m = clazz.getMethod("create", + List.class, + legacyChildFirstClassLoader.loadClass(ModelTestOperationValidatorFilter.class.getName()), + legacyChildFirstClassLoader.loadClass(ModelVersion.class.getName()), + List.class, + String.class); - return m.invoke(null, convertedBootOps, objectConverter.convertValidateOperationsFilterToChildCl(validateOpsFilter), objectConverter.convertModelVersionToChildCl(legacyModelVersion), convertedModelInitializerEntries); + return m.invoke(null, + convertedBootOps, + convertedValidationFilter, + convertedLegacyModelVersion, + convertedModelInitializerEntries, + stability.toString()); + } else { + Method m = clazz.getMethod("create", + List.class, + legacyChildFirstClassLoader.loadClass(ModelTestOperationValidatorFilter.class.getName()), + legacyChildFirstClassLoader.loadClass(ModelVersion.class.getName()), + List.class); + return m.invoke(null, + convertedBootOps, + convertedValidationFilter, + convertedLegacyModelVersion, + convertedModelInitializerEntries); + } } catch (Exception e) { throw new RuntimeException(e); } } + + private List convertModelInitializer(List modelInitializerEntries) { + List converted = null; + if (modelInitializerEntries != null) { + converted = new ArrayList<>(); + for (LegacyModelInitializerEntry entry : modelInitializerEntries) { + converted.add(objectConverter.convertLegacyModelInitializerEntryToChildCl(entry)); + } + } + return converted; + } + + private List getConvertedBootOps(List bootOperations) { + List converted = new ArrayList<>(); + for (ModelNode node : bootOperations) { + if (node != null) { + converted.add(objectConverter.convertModelNodeToChildCl(node)); + } + } + return converted; + } } + diff --git a/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/CoreModelTestDelegate.java b/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/CoreModelTestDelegate.java index 10a69799126..b752e9c69ff 100644 --- a/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/CoreModelTestDelegate.java +++ b/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/CoreModelTestDelegate.java @@ -446,7 +446,10 @@ private class KernelServicesBuilderImpl implements KernelServicesBuilder, ModelT this.stability = stability; this.processType = type == TestModelType.HOST || type == TestModelType.DOMAIN ? ProcessType.HOST_CONTROLLER : ProcessType.STANDALONE_SERVER; runningModeControl = type == TestModelType.HOST ? new HostRunningModeControl(RunningMode.ADMIN_ONLY, RestartMode.HC_ONLY) : new RunningModeControl(RunningMode.ADMIN_ONLY); - extensionRegistry = ExtensionRegistry.builder(this.processType).withRunningModeControl(this.runningModeControl).withStability(stability).build(); + extensionRegistry = ExtensionRegistry.builder(this.processType) + .withRunningModeControl(this.runningModeControl) + .withStability(stability) + .build(); testParser = TestParser.create(stability, extensionRegistry, xmlMapper, type); } @@ -680,6 +683,7 @@ private class LegacyKernelServicesInitializerImpl implements LegacyKernelService private final ModelVersion modelVersion; private final List modelInitializerEntries = new ArrayList(); private final ModelTestControllerVersion testControllerVersion; + private final Stability stability; private boolean dontUseBootOperations = false; private boolean skipReverseCheck; private ModelFixer reverseCheckMainModelFixer; @@ -690,6 +694,7 @@ private class LegacyKernelServicesInitializerImpl implements LegacyKernelService this.classLoaderBuilder = new ChildFirstClassLoaderBuilder(version.isEap()); this.modelVersion = modelVersion; this.testControllerVersion = version; + this.stability = version.getStability(); } private LegacyControllerKernelServicesProxy install(AbstractKernelServicesImpl mainServices, ModelInitializer modelInitializer, ModelWriteSanitizer modelWriteSanitizer, List contentRepositoryContents, List bootOperations) throws Exception { @@ -698,7 +703,7 @@ private LegacyControllerKernelServicesProxy install(AbstractKernelServicesImpl m } if (!skipReverseCheck) { - bootCurrentVersionWithLegacyBootOperations(bootOperations, modelInitializer, modelWriteSanitizer, contentRepositoryContents, mainServices); + bootCurrentVersionWithLegacyBootOperations(bootOperations, modelInitializer, modelWriteSanitizer, contentRepositoryContents, mainServices, stability); } final ClassLoader legacyCl; @@ -733,7 +738,7 @@ private LegacyControllerKernelServicesProxy install(AbstractKernelServicesImpl m } - ScopedKernelServicesBootstrap scopedBootstrap = new ScopedKernelServicesBootstrap(legacyCl); + ScopedKernelServicesBootstrap scopedBootstrap = new ScopedKernelServicesBootstrap(legacyCl, stability); LegacyControllerKernelServicesProxy legacyServices = scopedBootstrap.createKernelServices(bootOperations, getOperationValidationFilter(), modelVersion, modelInitializerEntries); return legacyServices; @@ -793,8 +798,9 @@ public LegacyKernelServicesInitializer configureReverseControllerCheck(ModelFixe return this; } - private KernelServices bootCurrentVersionWithLegacyBootOperations(List bootOperations, ModelInitializer modelInitializer, ModelWriteSanitizer modelWriteSanitizer, List contentRepositoryHashes, KernelServices mainServices) throws Exception { - KernelServicesBuilder reverseServicesBuilder = createKernelServicesBuilder(TestModelType.DOMAIN, Stability.DEFAULT) + private KernelServices bootCurrentVersionWithLegacyBootOperations(List bootOperations, ModelInitializer modelInitializer, ModelWriteSanitizer modelWriteSanitizer, List contentRepositoryHashes, KernelServices mainServices, Stability stability) throws Exception { + testControllerVersion.getCoreVersion(); + KernelServicesBuilder reverseServicesBuilder = createKernelServicesBuilder(TestModelType.DOMAIN, stability) .setBootOperations(bootOperations) .setModelInitializer(modelInitializer, modelWriteSanitizer); for (String hash : contentRepositoryHashes) { diff --git a/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/TestModelControllerService.java b/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/TestModelControllerService.java index 876228b3196..b7df6c50f29 100644 --- a/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/TestModelControllerService.java +++ b/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/TestModelControllerService.java @@ -39,6 +39,7 @@ import org.jboss.as.controller.descriptions.ModelDescriptionConstants; import org.jboss.as.controller.descriptions.NonResolvingResourceDescriptionResolver; import org.jboss.as.controller.extension.ExtensionRegistry; +import org.jboss.as.controller.operations.common.ProcessEnvironment; import org.jboss.as.controller.persistence.ExtensibleConfigurationPersister; import org.jboss.as.controller.persistence.NullConfigurationPersister; import org.jboss.as.controller.registry.ManagementResourceRegistration; @@ -80,6 +81,7 @@ import org.jboss.as.server.controller.resources.VersionModelInitializer; import org.jboss.as.server.suspend.SuspendController; import org.jboss.as.version.ProductConfig; +import org.jboss.as.version.Stability; import org.jboss.as.version.Version; import org.jboss.dmr.ModelNode; import org.jboss.msc.service.StartContext; @@ -102,6 +104,7 @@ class TestModelControllerService extends ModelTestModelControllerService { private final ControlledProcessState processState; private final ExtensionRegistry extensionRegistry; private final CapabilityRegistry capabilityRegistry; + private final Stability stability; private volatile Initializer initializer; TestModelControllerService(ProcessType processType, RunningModeControl runningModeControl, StringConfigurationPersister persister, ModelTestOperationValidatorFilter validateOpsFilter, @@ -110,6 +113,7 @@ class TestModelControllerService extends ModelTestModelControllerService { super(processType, extensionRegistry.getStability(), runningModeControl, null, persister, validateOpsFilter, rootResourceDefinition, processState, expressionResolver, capabilityRegistry); this.type = type; + this.stability = extensionRegistry.getStability(); this.runningModeControl = runningModeControl; this.pathManagerService = type == TestModelType.STANDALONE ? new ServerPathManagerService(capabilityRegistry) : new HostPathManagerService(capabilityRegistry); this.modelInitializer = modelInitializer; @@ -191,13 +195,15 @@ private ServerEnvironment createStandaloneServerEnvironment() { throw new RuntimeException(e); } props.put(ServerEnvironment.JBOSS_SERVER_DEFAULT_CONFIG, "standalone.xml"); - ProductConfig pc = new ProductConfig("Test", Version.AS_VERSION, "main"); - return new ServerEnvironment(null, props, new HashMap(), "standalone.xml", null, LaunchType.STANDALONE, runningModeControl.getRunningMode(), pc, false); + props.put(ProcessEnvironment.STABILITY, this.stability.toString()); + + ProductConfig productConfig = new ProductConfig("Standalone-under-test", Version.AS_VERSION, "main", this.stability); + return new ServerEnvironment(null, props, new HashMap<>(), "standalone.xml", null, LaunchType.STANDALONE, runningModeControl.getRunningMode(), productConfig, false); } private HostControllerEnvironment createHostControllerEnvironment() { try { - Map props = new HashMap(); + Map props = new HashMap<>(); File home = new File("target/jbossas"); delete(home); home.mkdir(); @@ -230,7 +236,11 @@ private HostControllerEnvironment createHostControllerEnvironment() { RunningMode initialRunningMode = runningModeControl.getRunningMode(); boolean backupDomainFiles = false; boolean useCachedDc = false; - ProductConfig productConfig = ProductConfig.fromFilesystemSlot(null, "", props); + + props.put(ProcessEnvironment.STABILITY, this.stability.toString()); + + ProductConfig productConfig = new ProductConfig("HostController-under-test", Version.AS_VERSION, "main", this.stability); + return new HostControllerEnvironment(props, isRestart, modulePath, processControllerAddress, processControllerPort, hostControllerAddress, hostControllerPort, defaultJVM, domainConfig, initialDomainConfig, hostConfig, initialHostConfig, initialRunningMode, backupDomainFiles, useCachedDc, productConfig); diff --git a/core-model-test/tests/src/test/java/org/jboss/as/core/model/test/util/TransformersTestParameter.java b/core-model-test/tests/src/test/java/org/jboss/as/core/model/test/util/TransformersTestParameter.java index 9c1136da48a..b59c4245124 100644 --- a/core-model-test/tests/src/test/java/org/jboss/as/core/model/test/util/TransformersTestParameter.java +++ b/core-model-test/tests/src/test/java/org/jboss/as/core/model/test/util/TransformersTestParameter.java @@ -46,6 +46,8 @@ public static List setupVersions(){ //we only test EAP 7.4 and newer data.add(new TransformersTestParameter(ModelVersion.create(16, 0, 0), ModelTestControllerVersion.EAP_7_4_0)); data.add(new TransformersTestParameter(ModelVersion.create(22, 0, 0), ModelTestControllerVersion.EAP_8_0_0)); + // Requires an update of the wildfly legacy test version + // data.add(new TransformersTestParameter(ModelVersion.create(24, 0, 0), ModelTestControllerVersion.WILDFLY_31_0_0)); return data; } diff --git a/elytron/src/test/java/org/wildfly/extension/elytron/SubsystemTransformerTestCase.java b/elytron/src/test/java/org/wildfly/extension/elytron/SubsystemTransformerTestCase.java index 44d327b8ce2..5e0724c5f60 100644 --- a/elytron/src/test/java/org/wildfly/extension/elytron/SubsystemTransformerTestCase.java +++ b/elytron/src/test/java/org/wildfly/extension/elytron/SubsystemTransformerTestCase.java @@ -111,9 +111,11 @@ public void testTransformerEAP800() throws Exception { } private KernelServices buildKernelServices(String xml, ModelTestControllerVersion controllerVersion, ModelVersion version, String... mavenResourceURLs) throws Exception { - KernelServicesBuilder builder = this.createKernelServicesBuilder(AdditionalInitialization.MANAGEMENT).setSubsystemXml(xml); + AdditionalInitialization additionalInitialization = AdditionalInitialization.fromModelTestControllerVersion(controllerVersion); - builder.createLegacyKernelServicesBuilder(AdditionalInitialization.MANAGEMENT, controllerVersion, version) + KernelServicesBuilder builder = this.createKernelServicesBuilder(additionalInitialization).setSubsystemXml(xml); + + builder.createLegacyKernelServicesBuilder(additionalInitialization, controllerVersion, version) .addMavenResourceURL(mavenResourceURLs) .skipReverseControllerCheck() .addParentFirstClassPattern("org.jboss.as.controller.logging.ControllerLogger*") @@ -151,8 +153,8 @@ private void testRejectingTransformers(ModelTestControllerVersion controllerVers ModelVersion elytronVersion = controllerVersion.getSubsystemModelVersion(getMainSubsystemName()); //Boot up empty controllers with the resources needed for the ops coming from the xml to work - KernelServicesBuilder builder = createKernelServicesBuilder(AdditionalInitialization.withCapabilities( - RuntimeCapability.buildDynamicCapabilityName(Capabilities.DATA_SOURCE_CAPABILITY_NAME, "ExampleDS") + KernelServicesBuilder builder = createKernelServicesBuilder(AdditionalInitialization.withCapabilities(controllerVersion.getStability(), + RuntimeCapability.buildDynamicCapabilityName(Capabilities.DATA_SOURCE_CAPABILITY_NAME, "ExampleDS") )); builder.createLegacyKernelServicesBuilder(AdditionalInitialization.MANAGEMENT, controllerVersion, elytronVersion) .addMavenResourceURL(controllerVersion.getCoreMavenGroupId() + ":wildfly-elytron-integration:" + controllerVersion.getCoreVersion()) diff --git a/model-test/src/main/java/org/jboss/as/model/test/ModelTestControllerVersion.java b/model-test/src/main/java/org/jboss/as/model/test/ModelTestControllerVersion.java index 8919d5cea93..d58f019aa35 100644 --- a/model-test/src/main/java/org/jboss/as/model/test/ModelTestControllerVersion.java +++ b/model-test/src/main/java/org/jboss/as/model/test/ModelTestControllerVersion.java @@ -9,19 +9,25 @@ import java.util.Properties; import org.jboss.as.controller.ModelVersion; +import org.jboss.as.version.Stability; import org.wildfly.legacy.version.LegacyVersions; +/** + * Represents the versions of the legacy controllers that are available for testing. + */ public enum ModelTestControllerVersion { - //AS releases - + // Release version under test MASTER (CurrentVersion.VERSION, false, null, "master" ), //EAP releases EAP_7_4_0("7.4.0.GA-redhat-00005", true, "23.0.0", "15.0.2.Final-redhat-00001", "7.4.0"), EAP_8_0_0("8.0.0.GA-redhat-00011", true, "29.0.0", "21.0.5.Final-redhat-00001", "8.0.0"), EAP_XP_4("4.0.0.GA-redhat-00003", true, "23.0.0", "15.0.26.Final-redhat-00001", "xp4"), - EAP_XP_5("5.0.0.GA-redhat-00005", true, "29.0.0", "21.0.5.Final-redhat-00001", "xp5"); + EAP_XP_5("5.0.0.GA-redhat-00005", true, "29.0.0", "21.0.5.Final-redhat-00001", "xp5"), + + //WildFly releases + WILDFLY_31_0_0("31.0.0.Final", false, "31.0.0", "23.0.1.Final", "wf31"); private final String mavenGavVersion; private final String testControllerVersion; @@ -35,6 +41,7 @@ public enum ModelTestControllerVersion { private final String realVersionName; private final String artifactIdPrefix; private final Map subsystemModelVersions = new LinkedHashMap<>(); + private final Stability stability; ModelTestControllerVersion(String mavenGavVersion, boolean eap, String testControllerVersion, String realVersionName) { this(mavenGavVersion, eap, testControllerVersion, null, realVersionName); @@ -44,6 +51,7 @@ public enum ModelTestControllerVersion { this.mavenGavVersion = mavenGavVersion; this.testControllerVersion = testControllerVersion; this.eap = eap; + this.stability = eap ? Stability.DEFAULT : Stability.COMMUNITY; this.validLegacyController = testControllerVersion != null; this.coreVersion = coreVersion == null? mavenGavVersion : coreVersion; //full == core this.realVersionName = realVersionName; @@ -159,4 +167,7 @@ public String getMavenGav(String artifactIdPart, boolean coreArtifact) { } + public Stability getStability() { + return stability; + } } diff --git a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/bridge/impl/ChildFirstClassLoaderKernelServicesFactory.java b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/bridge/impl/ChildFirstClassLoaderKernelServicesFactory.java index 2c2005c5636..64dd15f86a2 100644 --- a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/bridge/impl/ChildFirstClassLoaderKernelServicesFactory.java +++ b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/bridge/impl/ChildFirstClassLoaderKernelServicesFactory.java @@ -5,6 +5,7 @@ package org.jboss.as.subsystem.bridge.impl; import java.util.List; +import java.util.Objects; import org.jboss.as.controller.Extension; import org.jboss.as.controller.ModelVersion; @@ -18,6 +19,7 @@ import org.jboss.as.subsystem.test.AdditionalInitialization; import org.jboss.as.subsystem.test.KernelServices; import org.jboss.as.subsystem.test.TestParser; +import org.jboss.as.version.Stability; import org.jboss.dmr.ModelNode; /** @@ -40,4 +42,23 @@ public static KernelServices create(String mainSubsystemName, String extensionCl return AbstractKernelServicesImpl.create(null, mainSubsystemName, additionalInit, validateOpsFilter, extensionRegistry, bootOperations, testParser, extension, legacyModelVersion, false, persistXml); } + + public static KernelServices create(String mainSubsystemName, String extensionClassName, AdditionalInitialization additionalInit, ModelTestOperationValidatorFilter validateOpsFilter, + List bootOperations, ModelVersion legacyModelVersion, boolean persistXml, String stabilityStr) throws Exception { + Objects.requireNonNull(additionalInit,"additionalInit is required"); + Stability stability = Stability.fromString(stabilityStr); + + Extension extension = (Extension) Class.forName(extensionClassName) + .getDeclaredConstructor() + .newInstance(); + + ExtensionRegistry extensionRegistry = ExtensionRegistry.builder(ProcessType.DOMAIN_SERVER) + .withRunningMode(RunningMode.ADMIN_ONLY) + .withStability(stability) + .build(); + + ModelTestParser testParser = new TestParser(mainSubsystemName, extensionRegistry); + return AbstractKernelServicesImpl.create(null, mainSubsystemName, additionalInit, validateOpsFilter, + extensionRegistry, bootOperations, testParser, extension, legacyModelVersion, false, persistXml); + } } diff --git a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/bridge/local/ScopedKernelServicesBootstrap.java b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/bridge/local/ScopedKernelServicesBootstrap.java index 32f2ff49f49..74b576aaedb 100644 --- a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/bridge/local/ScopedKernelServicesBootstrap.java +++ b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/bridge/local/ScopedKernelServicesBootstrap.java @@ -14,6 +14,7 @@ import org.jboss.as.subsystem.bridge.impl.ClassLoaderObjectConverterImpl; import org.jboss.as.subsystem.bridge.impl.LegacyControllerKernelServicesProxy; import org.jboss.as.subsystem.test.AdditionalInitialization; +import org.jboss.as.version.Stability; import org.jboss.dmr.ModelNode; /** @@ -38,37 +39,68 @@ public LegacyControllerKernelServicesProxy createKernelServices(String mainSubsy } private Object createChildClassLoaderKernelServices(String mainSubsystemName, String extensionClassName, AdditionalInitialization additionalInit, ModelTestOperationValidatorFilter validateOpsFilter, - List bootOperations, ModelVersion legacyModelVersion, boolean persistXml){ + List bootOperations, ModelVersion legacyModelVersion, boolean persistXml) { try { + Stability stability = additionalInit.getStability(); Class clazz = legacyChildFirstClassLoader.loadClass(ChildFirstClassLoaderKernelServicesFactory.class.getName()); - Method m = clazz.getMethod("create", - String.class, - String.class, - legacyChildFirstClassLoader.loadClass(AdditionalInitialization.class.getName()), - legacyChildFirstClassLoader.loadClass(ModelTestOperationValidatorFilter.class.getName()), - List.class, - legacyChildFirstClassLoader.loadClass(ModelVersion.class.getName()), - Boolean.TYPE); + List convertedBootOps = getConvertedBootOps(bootOperations); - List convertedBootOps = new ArrayList(); - for (int i = 0 ; i < bootOperations.size() ; i++) { - ModelNode node = bootOperations.get(i); - if (node != null) { - convertedBootOps.add(objectConverter.convertModelNodeToChildCl(node)); - } - } - - //Convert additional Init Object convertedAdditionalInit = objectConverter.convertAdditionalInitializationToChildCl(additionalInit); Object convertedModelVersion = objectConverter.convertModelVersionToChildCl(legacyModelVersion); Object convertedValidateOpsFilter = objectConverter.convertValidateOperationsFilterToChildCl(validateOpsFilter); + if (!Stability.DEFAULT.equals(stability)) { + Method m = clazz.getMethod("create", + String.class, + String.class, + legacyChildFirstClassLoader.loadClass(AdditionalInitialization.class.getName()), + legacyChildFirstClassLoader.loadClass(ModelTestOperationValidatorFilter.class.getName()), + List.class, + legacyChildFirstClassLoader.loadClass(ModelVersion.class.getName()), + Boolean.TYPE, + String.class); - return m.invoke(null, mainSubsystemName, extensionClassName, convertedAdditionalInit, convertedValidateOpsFilter, convertedBootOps, convertedModelVersion, persistXml); + return m.invoke(null, + mainSubsystemName, + extensionClassName, + convertedAdditionalInit, + convertedValidateOpsFilter, + convertedBootOps, + convertedModelVersion, + persistXml, + stability.toString()); + } else { + Method m = clazz.getMethod("create", + String.class, + String.class, + legacyChildFirstClassLoader.loadClass(AdditionalInitialization.class.getName()), + legacyChildFirstClassLoader.loadClass(ModelTestOperationValidatorFilter.class.getName()), + List.class, + legacyChildFirstClassLoader.loadClass(ModelVersion.class.getName()), + Boolean.TYPE); + return m.invoke(null, + mainSubsystemName, + extensionClassName, + convertedAdditionalInit, + convertedValidateOpsFilter, + convertedBootOps, + convertedModelVersion, + persistXml); + } } catch (Exception e) { throw new RuntimeException(e); } } + + private List getConvertedBootOps(List bootOperations) { + List convertedBootOps = new ArrayList<>(); + for (ModelNode node : bootOperations) { + if (node != null) { + convertedBootOps.add(objectConverter.convertModelNodeToChildCl(node)); + } + } + return convertedBootOps; + } } diff --git a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/AdditionalInitialization.java b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/AdditionalInitialization.java index 023d8a3fbfd..7859b31ba3c 100644 --- a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/AdditionalInitialization.java +++ b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/AdditionalInitialization.java @@ -18,6 +18,7 @@ import org.jboss.as.controller.extension.ExtensionRegistry; import org.jboss.as.controller.registry.ManagementResourceRegistration; import org.jboss.as.controller.registry.Resource; +import org.jboss.as.model.test.ModelTestControllerVersion; import org.jboss.as.model.test.ModelTestModelDescriptionValidator.AttributeOrParameterArbitraryDescriptorValidator; import org.jboss.as.subsystem.test.ModelDescriptionValidator.ValidationConfiguration; import org.jboss.as.version.Stability; @@ -76,6 +77,10 @@ public > ManagementAdditionalInitialization(S schem this(schema.getStability()); } + public ManagementAdditionalInitialization(ModelTestControllerVersion version) { + this(version.getStability()); + } + public ManagementAdditionalInitialization(Stability stability) { this.stability = stability; } @@ -110,6 +115,16 @@ protected ProcessType getProcessType() { } } + /** + * Creates a {@link org.jboss.as.subsystem.test.AdditionalInitialization.ManagementAdditionalInitialization} with + * the given {@link org.jboss.as.model.test.ModelTestControllerVersion version} stability level. + * + * @param version ModelTestController version + * @return the additional initialization + */ + public static AdditionalInitialization fromModelTestControllerVersion(ModelTestControllerVersion version) { + return new ManagementAdditionalInitialization(version); + } /** * Creates a {@link org.jboss.as.subsystem.test.AdditionalInitialization.ManagementAdditionalInitialization} with @@ -131,6 +146,27 @@ protected void initializeExtraSubystemsAndModel(ExtensionRegistry extensionRegis }; } + /** + * Creates a {@link org.jboss.as.subsystem.test.AdditionalInitialization.ManagementAdditionalInitialization} with + * the given {@link org.jboss.as.controller.capability.RuntimeCapability capabilities} registered, making it + * possible for subsystems under test to require them. No runtime API will be available, but that should not + * be needed for a {@link org.jboss.as.controller.RunningMode#ADMIN_ONLY} test. + * + * @param stability the desired stability level of the installed controller + * @param capabilities the capabilities + * @return the additional initialization + */ + public static AdditionalInitialization withCapabilities(final Stability stability, final String... capabilities) { + return new ManagementAdditionalInitialization(stability) { + + @Override + protected void initializeExtraSubystemsAndModel(ExtensionRegistry extensionRegistry, Resource rootResource, ManagementResourceRegistration rootRegistration, RuntimeCapabilityRegistry capabilityRegistry) { + super.initializeExtraSubystemsAndModel(extensionRegistry, rootResource, rootRegistration, capabilityRegistry); + registerCapabilities(capabilityRegistry, capabilities); + } + }; + } + /** * Creates a {@link org.jboss.as.subsystem.test.AdditionalInitialization.ManagementAdditionalInitialization} with * the given {@link org.jboss.as.controller.capability.RuntimeCapability capabilities} registered, making it diff --git a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/SubsystemTestDelegate.java b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/SubsystemTestDelegate.java index f684dd98544..cb1cbbd3190 100644 --- a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/SubsystemTestDelegate.java +++ b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/SubsystemTestDelegate.java @@ -114,7 +114,7 @@ final class SubsystemTestDelegate { private final Class testClass; private final List kernelServices = new ArrayList<>(); - protected final String mainSubsystemName; + private final String mainSubsystemName; private final Extension mainExtension; private final Comparator removeOrderComparator; @@ -222,11 +222,14 @@ String outputModel(ModelNode model) throws Exception { // Use ProcessType.HOST_CONTROLLER for this ExtensionRegistry so we don't need to provide // a PathManager via the ExtensionContext. All we need the Extension to do here is register the xml writers - ExtensionRegistry outputExtensionRegistry = ExtensionRegistry.builder(ProcessType.HOST_CONTROLLER).withStability(this.stability).build(); + ExtensionRegistry outputExtensionRegistry = ExtensionRegistry.builder(ProcessType.HOST_CONTROLLER) + .withStability(this.stability) + .build(); + outputExtensionRegistry.setWriterRegistry(persister); - Extension extension = mainExtension.getClass().newInstance(); - extension.initialize(outputExtensionRegistry.getExtensionContext("Test", MOCK_RESOURCE_REG, ExtensionRegistryType.SLAVE)); + Extension extension = mainExtension.getClass().getDeclaredConstructor().newInstance(); + extension.initialize(outputExtensionRegistry.getExtensionContext("Test", stability, MOCK_RESOURCE_REG, ExtensionRegistryType.SLAVE)); ConfigurationPersister.PersistenceResource resource = persister.store(model, Collections.emptySet()); resource.commit(); @@ -254,7 +257,7 @@ ProcessType getProcessType() { } /** - * Checks that the subystem resources can be removed, i.e. that people have registered + * Checks that the subsystem resources can be removed, i.e. that people have registered * working 'remove' operations for every 'add' level. * * @param kernelServices the kernel services used to access the controller @@ -264,7 +267,7 @@ void assertRemoveSubsystemResources(KernelServices kernelServices) { } /** - * Checks that the subystem resources can be removed, i.e. that people have registered + * Checks that the subsystem resources can be removed, i.e. that people have registered * working 'remove' operations for every 'add' level. * * @param kernelServices the kernel services used to access the controller @@ -430,7 +433,11 @@ void addAdditionalParsers(AdditionalParsers additionalParsers) { } private ExtensionRegistry cloneExtensionRegistry(AdditionalInitialization additionalInit) { - final ExtensionRegistry clone = ExtensionRegistry.builder(additionalInit.getProcessType()).withRunningMode(additionalInit.getExtensionRegistryRunningMode()).withStability(additionalInit.getStability()).build(); + final ExtensionRegistry clone = ExtensionRegistry.builder(additionalInit.getProcessType()) + .withRunningMode(additionalInit.getExtensionRegistryRunningMode()) + .withStability(additionalInit.getStability()) + .build(); + for (String extension : extensionParsingRegistry.getExtensionModuleNames()) { ExtensionParsingContext epc = clone.getExtensionParsingContext(extension, null); for (Map.Entry entry : extensionParsingRegistry.getAvailableSubsystems(extension).entrySet()) { @@ -546,7 +553,7 @@ public KernelServices build() throws Exception { bootOperationBuilder.validateNotAlreadyBuilt(); List bootOperations = bootOperationBuilder.build(); AbstractKernelServicesImpl kernelServices = AbstractKernelServicesImpl.create(testClass, mainSubsystemName, additionalInit, ModelTestOperationValidatorFilter.createValidateAll(), cloneExtensionRegistry(additionalInit), bootOperations, - testParser, mainExtension, null, legacyControllerInitializers.size() > 0, true); + testParser, mainExtension, null, !legacyControllerInitializers.isEmpty(), true); SubsystemTestDelegate.this.kernelServices.add(kernelServices); validateDescriptionProviders(additionalInit, kernelServices); ImmutableManagementResourceRegistration subsystemReg = kernelServices.getRootRegistration().getSubModel(PathAddress.pathAddress(PathElement.pathElement(SUBSYSTEM, mainSubsystemName))); @@ -559,7 +566,7 @@ public KernelServices build() throws Exception { for (Map.Entry entry : legacyControllerInitializers.entrySet()) { LegacyKernelServiceInitializerImpl legacyInitializer = entry.getValue(); - List transformedBootOperations = new ArrayList(); + List transformedBootOperations = new ArrayList<>(); for (ModelNode op : bootOperations) { TransformedOperation transformedOp = kernelServices.transformOperation(entry.getKey(), op); @@ -619,8 +626,8 @@ private class LegacyKernelServiceInitializerImpl implements LegacyKernelServices private final AdditionalInitialization additionalInit; private final ModelTestControllerVersion testControllerVersion; private String extensionClassName; - private ModelVersion modelVersion; - private ChildFirstClassLoaderBuilder classLoaderBuilder; + private final ModelVersion modelVersion; + private final ChildFirstClassLoaderBuilder classLoaderBuilder; private ModelTestOperationValidatorFilter.Builder operationValidationExcludeBuilder; private boolean persistXml = true; private boolean skipReverseCheck; diff --git a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/TestModelControllerService.java b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/TestModelControllerService.java index bcc0f189cc9..457e3c8283e 100644 --- a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/TestModelControllerService.java +++ b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/TestModelControllerService.java @@ -44,6 +44,7 @@ import org.jboss.as.server.controller.resources.ServerDeploymentResourceDefinition; import org.jboss.as.subsystem.test.ControllerInitializer.TestControllerAccessor; import org.jboss.as.version.ProductConfig; +import org.jboss.as.version.Version; import org.jboss.dmr.ModelNode; import org.jboss.vfs.VirtualFile; @@ -65,9 +66,11 @@ protected TestModelControllerService(final Extension mainExtension, final Contro final ExtensionRegistry extensionRegistry, final StringConfigurationPersister persister, final ModelTestOperationValidatorFilter validateOpsFilter, final boolean registerTransformers, final ExpressionResolver expressionResolver, final CapabilityRegistry capabilityRegistry) { - super(additionalInit.getProcessType(), additionalInit.getStability(), runningModeControl, extensionRegistry.getTransformerRegistry(), persister, validateOpsFilter, + + super(additionalInit.getProcessType(), additionalInit.getStability(), runningModeControl, extensionRegistry.getTransformerRegistry(), persister, validateOpsFilter, ResourceDefinition.builder(ResourceRegistration.of(null, additionalInit.getStability()), NonResolvingResourceDescriptionResolver.INSTANCE).build(), expressionResolver, new ControlledProcessState(true),capabilityRegistry); + this.mainExtension = mainExtension; this.additionalInit = additionalInit; this.controllerInitializer = controllerInitializer; @@ -126,7 +129,7 @@ private void initExtraModelInternal(Resource rootResource, ManagementResourceReg @Override protected void preBoot(List bootOperations, boolean rollbackOnRuntimeFailure) { - mainExtension.initialize(extensionRegistry.getExtensionContext("Test", getRootRegistration(), + mainExtension.initialize(extensionRegistry.getExtensionContext("Test", this.stability, getRootRegistration(), registerTransformers ? ExtensionRegistryType.MASTER : ExtensionRegistryType.SLAVE)); } @@ -145,7 +148,6 @@ private void delete(File file) { @Override public ServerEnvironment getServerEnvironment() { - ProductConfig productConfig = new ProductConfig(null, null, null); Properties props = new Properties(); File home = new File("target/jbossas"); delete(home); @@ -167,8 +169,9 @@ public ServerEnvironment getServerEnvironment() { throw new RuntimeException(e); } props.put(ServerEnvironment.JBOSS_SERVER_DEFAULT_CONFIG, "standalone.xml"); - props.put(ProcessEnvironment.STABILITY, this.additionalInit.getStability().toString()); + props.put(ProcessEnvironment.STABILITY, this.stability.toString()); + ProductConfig productConfig = new ProductConfig("Standalone-under-test", Version.AS_VERSION, "main", this.stability); return new ServerEnvironment(null, props, new HashMap<>(), "standalone.xml", null, LaunchType.STANDALONE, runningModeControl.getRunningMode(), productConfig, false); } diff --git a/version/src/main/java/org/jboss/as/version/ProductConfig.java b/version/src/main/java/org/jboss/as/version/ProductConfig.java index 76ee682dde7..b6b53057f57 100644 --- a/version/src/main/java/org/jboss/as/version/ProductConfig.java +++ b/version/src/main/java/org/jboss/as/version/ProductConfig.java @@ -148,10 +148,15 @@ private static ProductConfProps getProductConfProperties(String home) { /** Solely for use in unit testing */ public ProductConfig(final String productName, final String productVersion, final String consoleSlot) { + this(productName, productVersion, consoleSlot, Stability.DEFAULT); + } + + /** Solely for use in unit testing */ + public ProductConfig(final String productName, final String productVersion, final String consoleSlot, final Stability defaultStability) { this.name = productName; this.version = productVersion; this.consoleSlot = consoleSlot; - this.defaultStability = Stability.COMMUNITY; + this.defaultStability = defaultStability; this.stabilities = EnumSet.allOf(Stability.class).stream() .filter(this.defaultStability::enables) .collect(Collectors.toUnmodifiableSet()); From abea9d24cb9e0dbcade312ab50928d2ee96881e5 Mon Sep 17 00:00:00 2001 From: Yeray Borges Date: Sun, 15 Dec 2024 18:50:11 +0000 Subject: [PATCH 3/3] [WFCORE-7091] Add the ability to ignore tests using the ModelTestControllerVersion --- .../as/core/model/test/CoreModelTestDelegate.java | 2 ++ .../DomainDeploymentTransformersTestCase.java | 11 +++++++++-- .../as/model/test/ModelTestControllerVersion.java | 10 +++++++++- .../as/subsystem/test/SubsystemTestDelegate.java | 3 +++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/CoreModelTestDelegate.java b/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/CoreModelTestDelegate.java index b752e9c69ff..567cb927b22 100644 --- a/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/CoreModelTestDelegate.java +++ b/core-model-test/framework/src/main/java/org/jboss/as/core/model/test/CoreModelTestDelegate.java @@ -94,6 +94,7 @@ import org.jboss.dmr.Property; import org.jboss.staxmapper.XMLMapper; import org.junit.Assert; +import org.junit.Assume; import org.wildfly.common.xml.XMLInputFactoryUtil; import org.wildfly.legacy.test.spi.Version; @@ -691,6 +692,7 @@ private class LegacyKernelServicesInitializerImpl implements LegacyKernelService private ModelTestOperationValidatorFilter.Builder operationValidationExcludeFilterBuilder; LegacyKernelServicesInitializerImpl(ModelVersion modelVersion, ModelTestControllerVersion version) { + Assume.assumeFalse("This model controller version is ignored for this server.", version.isIgnored()); this.classLoaderBuilder = new ChildFirstClassLoaderBuilder(version.isEap()); this.modelVersion = modelVersion; this.testControllerVersion = version; diff --git a/core-model-test/tests/src/test/java/org/jboss/as/core/model/test/deployment/DomainDeploymentTransformersTestCase.java b/core-model-test/tests/src/test/java/org/jboss/as/core/model/test/deployment/DomainDeploymentTransformersTestCase.java index 2683a37bdfc..32c397c3f73 100644 --- a/core-model-test/tests/src/test/java/org/jboss/as/core/model/test/deployment/DomainDeploymentTransformersTestCase.java +++ b/core-model-test/tests/src/test/java/org/jboss/as/core/model/test/deployment/DomainDeploymentTransformersTestCase.java @@ -30,6 +30,7 @@ import org.jboss.as.model.test.ModelTestUtils; import org.jboss.dmr.ModelNode; import org.junit.Assert; +import org.junit.AssumptionViolatedException; import org.junit.Test; import org.junit.runner.RunWith; @@ -66,6 +67,9 @@ public void domainDeployment() throws Exception { KernelServices legacyServices = mainServices.getLegacyServices(modelVersion); Assert.assertTrue("Legacy services didn't boot for version " + modelVersion, legacyServices.isSuccessfulBoot()); checkCoreModelTransformation(mainServices, modelVersion); + } catch (AssumptionViolatedException ex) { + // If the test is ignored, we want to propagate the exception + throw ex; } catch (Exception ex) { throw new RuntimeException("Error for version " + modelVersion + " " + ex.getMessage(), ex); } @@ -86,10 +90,13 @@ public void domainExplodedDeployment() throws Exception { List operations = builder.parseXmlResource("domain-exploded-deployments.xml"); //removing the ading of "management-client-content" => "rollout-plans - operations = operations.subList(0, operations.size() -2); + operations = operations.subList(0, operations.size() - 2); ModelTestUtils.checkFailedTransformedBootOperations(mainServices, modelVersion, operations, getConfig()); + } catch (AssumptionViolatedException ex) { + // If the test is ignored, we want to propagate the exception + throw ex; } catch (Exception ex) { - throw new RuntimeException("Error for version " + modelVersion + " " + ex.getMessage(), ex); + throw new Exception("Error for version " + modelVersion + " " + ex.getMessage(), ex); } } diff --git a/model-test/src/main/java/org/jboss/as/model/test/ModelTestControllerVersion.java b/model-test/src/main/java/org/jboss/as/model/test/ModelTestControllerVersion.java index d58f019aa35..78064b26553 100644 --- a/model-test/src/main/java/org/jboss/as/model/test/ModelTestControllerVersion.java +++ b/model-test/src/main/java/org/jboss/as/model/test/ModelTestControllerVersion.java @@ -42,12 +42,15 @@ public enum ModelTestControllerVersion { private final String artifactIdPrefix; private final Map subsystemModelVersions = new LinkedHashMap<>(); private final Stability stability; + private final boolean ignored; ModelTestControllerVersion(String mavenGavVersion, boolean eap, String testControllerVersion, String realVersionName) { this(mavenGavVersion, eap, testControllerVersion, null, realVersionName); } - ModelTestControllerVersion(String mavenGavVersion, boolean eap, String testControllerVersion, String coreVersion, String realVersionName) { + this(mavenGavVersion, eap, testControllerVersion, coreVersion, realVersionName, false); + } + ModelTestControllerVersion(String mavenGavVersion, boolean eap, String testControllerVersion, String coreVersion, String realVersionName, boolean ignored) { this.mavenGavVersion = mavenGavVersion; this.testControllerVersion = testControllerVersion; this.eap = eap; @@ -55,6 +58,7 @@ public enum ModelTestControllerVersion { this.validLegacyController = testControllerVersion != null; this.coreVersion = coreVersion == null? mavenGavVersion : coreVersion; //full == core this.realVersionName = realVersionName; + this.ignored = ignored; if (eap) { if (coreVersion != null) { //eap 7+ has core version defined this.coreMavenGroupId = "org.wildfly.core"; @@ -170,4 +174,8 @@ public String getMavenGav(String artifactIdPart, boolean coreArtifact) { public Stability getStability() { return stability; } + + public boolean isIgnored() { + return ignored; + } } diff --git a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/SubsystemTestDelegate.java b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/SubsystemTestDelegate.java index cb1cbbd3190..a8e90b7c73c 100644 --- a/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/SubsystemTestDelegate.java +++ b/subsystem-test/framework/src/main/java/org/jboss/as/subsystem/test/SubsystemTestDelegate.java @@ -28,6 +28,7 @@ import java.util.Map; import java.util.ServiceLoader; import java.util.Set; + import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; @@ -550,6 +551,7 @@ public LegacyKernelServicesInitializer createLegacyKernelServicesBuilder(Additio } public KernelServices build() throws Exception { + bootOperationBuilder.validateNotAlreadyBuilt(); List bootOperations = bootOperationBuilder.build(); AbstractKernelServicesImpl kernelServices = AbstractKernelServicesImpl.create(testClass, mainSubsystemName, additionalInit, ModelTestOperationValidatorFilter.createValidateAll(), cloneExtensionRegistry(additionalInit), bootOperations, @@ -636,6 +638,7 @@ private class LegacyKernelServiceInitializerImpl implements LegacyKernelServices private OperationFixer reverseCheckOperationFixer = operation -> operation; public LegacyKernelServiceInitializerImpl(AdditionalInitialization additionalInit, ModelTestControllerVersion version, ModelVersion modelVersion) { + Assume.assumeFalse("This model controller version is ignored for this server.", version.isIgnored()); this.classLoaderBuilder = new ChildFirstClassLoaderBuilder(version.isEap()); this.additionalInit = additionalInit == null ? AdditionalInitialization.MANAGEMENT : additionalInit; this.testControllerVersion = version;