All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.as.test.shared.util.AssumeTestGroupUtil Maven / Gradle / Ivy

There is a newer version: 35.0.0.Beta1
Show newest version
package org.jboss.as.test.shared.util;

import static org.junit.Assume.assumeTrue;

import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.function.Supplier;

import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.AssumptionViolatedException;
import org.testcontainers.DockerClientFactory;

/**
 * Helper methods which help to skip tests for functionality which is not yet fully working or where the test is not
 * expected to work in certain execution environments. Put the call of the method directly into
 * the failing test method, or if you want to skip whole test class, then put the method call into method annotated with
 * {@link org.junit.BeforeClass}.
 * 

* Methods whose names begin with 'assume' throw {@link AssumptionViolatedException} if the described assumption is not * met; otherwise they return normally. Other methods and constants in this class are meant for related use cases. *

* * @author Josef Cacek * @author Brian Stansberry */ public class AssumeTestGroupUtil { /** * An empty deployment archive that can be returned from an @Deployment method if the normal deployment * returned from the method cannot be successfully deployed under certain conditions. Arquillian will deploy * managed deployments before executing any @BeforeClass method, so if a @BeforeClass * method conditionally disables running the tests with an AssumptionViolatedException, the deployment will * still get deployed and may fail the test. So have it deploy this instead so your @BeforeClass gets called. *

* This is private so it can be lazy initialized when needed, in case this class is used for other reasons * in-container where Shrinkwrap is not available. *

*/ private static JavaArchive EMPTY_JAR; /** Same as {@link #EMPTY_JAR} but is a {@link WebArchive}. */ private static WebArchive EMPTY_WAR; /** Same as {@link #EMPTY_JAR} but is an {@link EnterpriseArchive}. */ private static EnterpriseArchive EMPTY_EAR; /** * Creates an empty (except for a manifest) JavaArchive with the name {@code empty.jar}. * @return the archive */ public static JavaArchive emptyJar() { if (EMPTY_JAR == null) { EMPTY_JAR = emptyJar("empty"); } return EMPTY_JAR; } /** * Creates an empty (except for a manifest) JavaArchive with the given name. * @param name the jar name. Can end with the '.jar' extension, but if not it will be added * @return the archive */ public static JavaArchive emptyJar(String name) { String jarName = name.endsWith(".jar") ? name : name + ".jar"; return ShrinkWrap.create(JavaArchive.class, jarName) .addManifest(); } /** * Creates an empty (except for a manifest) WebArchive with the name {@code empty.war}. * @return the archive */ public static WebArchive emptyWar() { if (EMPTY_WAR == null) { EMPTY_WAR = emptyWar("empty"); } return EMPTY_WAR; } /** * Creates an empty (except for a manifest) WebArchive with the given name. * @param name the jar name. Can end with the '.war' extension, but if not it will be added * @return the archive */ public static WebArchive emptyWar(String name) { String warName = name.endsWith(".war") ? name : name + ".war"; return ShrinkWrap.create(WebArchive.class, warName) .addManifest(); } /** * Creates an empty (except for a manifest) EnterpriseArchive with the name {@code empty.ear}. * @return the archive */ public static EnterpriseArchive emptyEar() { if (EMPTY_EAR == null) { EMPTY_EAR = emptyEar("empty"); } return EMPTY_EAR; } /** * Creates an empty (except for a manifest) EnterpriseArchive with the given name. * @param name the jar name. Can end with the '.ear' extension, but if not it will be added * @return the archive */ public static EnterpriseArchive emptyEar(String name) { String earName = name.endsWith(".ear") ? name : name + ".ear"; return ShrinkWrap.create(EnterpriseArchive.class, earName) .addManifest(); } /** * Assume for tests that fail when the security manager is enabled. This should be used sparingly and issues should * be filed for failing tests so a proper fix can be done. *

* Note that this checks the {@code security.manager} system property and not that the * {@link System#getSecurityManager()} is {@code null}. The property is checked so that the assumption check can be * done in a {@link org.junit.Before @Before} or {@link org.junit.BeforeClass @BeforeClass} method. *

* * @throws AssumptionViolatedException if the security manager is enabled */ public static void assumeSecurityManagerDisabled() { assumeCondition("Tests failing if the security manager is enabled.", AssumeTestGroupUtil::isSecurityManagerDisabled); } /** * Check if the JDK Security Manager is enabled/strong>. *

* Note that this checks the {@code security.manager} system property and not that the * {@link System#getSecurityManager()} is not {@code null}. The property is checked so that the assumption check can be * done in a {@link org.junit.Before @Before} or {@link org.junit.BeforeClass @BeforeClass} method. *

* * @return {@code true} if the {@code security.manager} system property is null. */ public static boolean isSecurityManagerEnabled() { return !isSecurityManagerDisabled(); } /** * Check if the JDK Security Manager is disabled. *

* Note that this checks the {@code security.manager} system property and not that the * {@link System#getSecurityManager()} is {@code null}. The property is checked so that the assumption check can be * done in a {@link org.junit.Before @Before} or {@link org.junit.BeforeClass @BeforeClass} method. *

* * @return {@code true} if the {@code security.manager} system property is null. */ public static boolean isSecurityManagerDisabled() { return System.getProperty("security.manager") == null; } /** * Assume for tests that fail when the security manager is enabled or the JDK version is prior to a given version *

* Note that this checks the {@code security.manager} system property and not that the * {@link System#getSecurityManager()} is {@code null}. The property is checked so that the assumption check can be * done in a {@link org.junit.Before @Before} or {@link org.junit.BeforeClass @BeforeClass} method. *

* * @param javaSpecificationVersion the JDK specification version * * @throws AssumptionViolatedException if the security manager is enabled or the JDK version is greater than or equal to {@code javaSpecificationVersion} */ public static void assumeSecurityManagerDisabledOrAssumeJDKVersionBefore(int javaSpecificationVersion) { assumeCondition("Tests failing if the security manager is enabled and JDK in use is after " + javaSpecificationVersion + ".", () -> (isSecurityManagerDisabled() || isJDKVersionBefore(javaSpecificationVersion))); } /** * Assume for tests that fail when the JVM version is too low. This should be used sparingly. * * @param javaSpecificationVersion the JDK specification version. Use 8 for JDK 8. Must be 8 or higher. * * @throws AssumptionViolatedException if the JDK version is less than or equal to {@code javaSpecificationVersion} */ public static void assumeJDKVersionAfter(int javaSpecificationVersion) { assert javaSpecificationVersion >= 11; // we only support 11 or later assumeCondition("Tests failing if the JDK in use is before " + javaSpecificationVersion + ".", () -> isJDKVersionAfter(javaSpecificationVersion)); } /** * Assume for tests that fail when the JVM version is too high. This should be used sparingly. * * @param javaSpecificationVersion the JDK specification version. Must be 9 or higher. * * @throws AssumptionViolatedException if the JDK version is greater than or equal to {@code javaSpecificationVersion} */ public static void assumeJDKVersionBefore(int javaSpecificationVersion) { assert javaSpecificationVersion > 11; // we only support 11 or later so no reason to call this for 11 assumeCondition("Tests failing if the JDK in use is after " + javaSpecificationVersion + ".", () -> isJDKVersionBefore(javaSpecificationVersion)); } /** * Check if the current JDK specification version is greater than the given value. * * @param javaSpecificationVersion the JDK specification version. Use 8 for JDK 8. */ public static boolean isJDKVersionAfter(int javaSpecificationVersion) { return getJavaSpecificationVersion() > javaSpecificationVersion; } /** * Check if the current JDK specification version is less than the given value. * * @param javaSpecificationVersion the JDK specification version. Use 8 for JDK 8. */ public static boolean isJDKVersionBefore(int javaSpecificationVersion) { return getJavaSpecificationVersion() < javaSpecificationVersion; } /** * Assume for test failures when running against a full distribution. * Full distributions are available from build/dist modules. It skips tests in case * {@code '-Dtestsuite.default.build.project.prefix'} Maven argument is used with * a non empty value, e.g. testsuite.default.build.project.prefix=ee- which means we * are using ee-build/ee-dist modules as the source where to find the server under test. * * @throws AssumptionViolatedException if property {@code testsuite.default.build.project.prefix} is set to a non-empty value */ public static void assumeFullDistribution() { assumeCondition("Tests requiring full distribution are disabled", AssumeTestGroupUtil::isFullDistribution); } /** * Checks whether tests are running against a full distribution. * Full distributions are available from build/dist modules. It skips tests in case * {@code '-Dtestsuite.default.build.project.prefix'} Maven argument is used with * a non empty value, e.g. testsuite.default.build.project.prefix=ee- which means we * are using ee-build/ee-dist modules as the source where to find the server under test. * * @throws {@code true} of system property {@code testsuite.default.build.project.prefix} has a non-empty value */ public static boolean isFullDistribution() { return System.getProperty("testsuite.default.build.project.prefix", "").equals(""); } /** * Assume for tests that require a docker installation. * * @throws AssumptionViolatedException if a docker client cannot be initialized */ public static void assumeDockerAvailable() { assumeCondition("Docker is not available.", AssumeTestGroupUtil::isDockerAvailable); } /** * Checks whether a docker installation is available. * * @throws AssumptionViolatedException if a docker client cannot be initialized */ public static boolean isDockerAvailable() { try { DockerClientFactory.instance().client(); return true; } catch (Throwable ex) { return false; } } /** * Assume for tests that should not run against a WildFly Preview installation. * * @throws AssumptionViolatedException if one of the system properties that indicates WildFly Preview is being tested is set */ public static void assumeNotWildFlyPreview() { assumeCondition("Some tests are disabled on WildFly Preview", () -> !isWildFlyPreview()); } public static void assumeWildFlyPreview() { assumeCondition("Some tests require WildFly Preview", AssumeTestGroupUtil::isWildFlyPreview); } public static boolean isWildFlyPreview() { return System.getProperty("ts.ee9") != null || System.getProperty("ts.bootable.ee9") != null; } private static int getJavaSpecificationVersion() { final String versionString = System.getProperty("java.specification.version"); return Integer.parseInt(versionString); } private static void assumeCondition(final String message, final Supplier assumeTrueCondition) { AccessController.doPrivileged(new PrivilegedAction() { @Override public Void run() { assumeTrue(message, assumeTrueCondition.get()); return null; } }); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy