Skip to content

Commit 5810fca

Browse files
authored
Merge pull request #44371 from geoand/#44118
Make @QuarkusMainTest respect `quarkus.test.profile.tags`
2 parents 54e17d8 + a82eba2 commit 5810fca

File tree

3 files changed

+50
-42
lines changed

3 files changed

+50
-42
lines changed

test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractJvmQuarkusTestExtension.java

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@
1414
import java.util.HashMap;
1515
import java.util.Map;
1616
import java.util.Optional;
17+
import java.util.Set;
1718
import java.util.function.Consumer;
1819
import java.util.stream.Collectors;
1920

2021
import jakarta.enterprise.inject.Alternative;
2122

2223
import org.jboss.jandex.Index;
2324
import org.junit.jupiter.api.Nested;
25+
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
26+
import org.junit.jupiter.api.extension.ExecutionCondition;
2427
import org.junit.jupiter.api.extension.ExtensionContext;
2528

2629
import io.quarkus.bootstrap.BootstrapConstants;
@@ -41,7 +44,8 @@
4144
import io.quarkus.test.common.RestorableSystemProperties;
4245
import io.quarkus.test.common.TestClassIndexer;
4346

44-
public class AbstractJvmQuarkusTestExtension extends AbstractQuarkusTestWithContextExtension {
47+
public class AbstractJvmQuarkusTestExtension extends AbstractQuarkusTestWithContextExtension
48+
implements ExecutionCondition {
4549

4650
protected static final String TEST_LOCATION = "test-location";
4751
protected static final String TEST_CLASS = "test-class";
@@ -267,6 +271,42 @@ private Class<? extends QuarkusTestProfile> findTestProfileAnnotation(Class<?> c
267271
return null;
268272
}
269273

274+
@Override
275+
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
276+
if (!context.getTestClass().isPresent()) {
277+
return ConditionEvaluationResult.enabled("No test class specified");
278+
}
279+
if (context.getTestInstance().isPresent()) {
280+
return ConditionEvaluationResult.enabled("Quarkus Test Profile tags only affect classes");
281+
}
282+
String tagsStr = System.getProperty("quarkus.test.profile.tags");
283+
if ((tagsStr == null) || tagsStr.isEmpty()) {
284+
return ConditionEvaluationResult.enabled("No Quarkus Test Profile tags");
285+
}
286+
Class<? extends QuarkusTestProfile> testProfile = getQuarkusTestProfile(context);
287+
if (testProfile == null) {
288+
return ConditionEvaluationResult.disabled("Test '" + context.getRequiredTestClass()
289+
+ "' is not annotated with '@QuarkusTestProfile' but 'quarkus.profile.test.tags' was set");
290+
}
291+
QuarkusTestProfile profileInstance;
292+
try {
293+
profileInstance = testProfile.getConstructor().newInstance();
294+
} catch (Exception e) {
295+
throw new RuntimeException(e);
296+
}
297+
Set<String> testProfileTags = profileInstance.tags();
298+
String[] tags = tagsStr.split(",");
299+
for (String tag : tags) {
300+
String trimmedTag = tag.trim();
301+
if (testProfileTags.contains(trimmedTag)) {
302+
return ConditionEvaluationResult.enabled("Tag '" + trimmedTag + "' is present on '" + testProfile
303+
+ "' which is used on test '" + context.getRequiredTestClass());
304+
}
305+
}
306+
return ConditionEvaluationResult.disabled("Test '" + context.getRequiredTestClass()
307+
+ "' disabled because 'quarkus.profile.test.tags' don't match the tags of '" + testProfile + "'");
308+
}
309+
270310
protected static class PrepareResult {
271311
protected final AugmentAction augmentAction;
272312
protected final QuarkusTestProfile profileInstance;

test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusMainTestExtension.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import org.junit.jupiter.api.extension.AfterEachCallback;
1717
import org.junit.jupiter.api.extension.BeforeAllCallback;
1818
import org.junit.jupiter.api.extension.BeforeEachCallback;
19+
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
20+
import org.junit.jupiter.api.extension.ExecutionCondition;
1921
import org.junit.jupiter.api.extension.ExtensionContext;
2022
import org.junit.jupiter.api.extension.InvocationInterceptor;
2123
import org.junit.jupiter.api.extension.ParameterContext;
@@ -38,7 +40,7 @@
3840

3941
public class QuarkusMainTestExtension extends AbstractJvmQuarkusTestExtension
4042
implements InvocationInterceptor, BeforeEachCallback, AfterEachCallback, ParameterResolver, BeforeAllCallback,
41-
AfterAllCallback {
43+
AfterAllCallback, ExecutionCondition {
4244

4345
PrepareResult prepareResult;
4446

@@ -321,4 +323,9 @@ public void afterAll(ExtensionContext context) throws Exception {
321323
public void beforeAll(ExtensionContext context) throws Exception {
322324
currentTestClassStack.push(context.getRequiredTestClass());
323325
}
326+
327+
@Override
328+
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
329+
return super.evaluateExecutionCondition(context);
330+
}
324331
}

test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.Objects;
2525
import java.util.Optional;
2626
import java.util.ServiceLoader;
27-
import java.util.Set;
2827
import java.util.concurrent.CompletionException;
2928
import java.util.concurrent.CopyOnWriteArrayList;
3029
import java.util.concurrent.Executors;
@@ -54,8 +53,6 @@
5453
import org.junit.jupiter.api.extension.BeforeAllCallback;
5554
import org.junit.jupiter.api.extension.BeforeEachCallback;
5655
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
57-
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
58-
import org.junit.jupiter.api.extension.ExecutionCondition;
5956
import org.junit.jupiter.api.extension.ExtensionContext;
6057
import org.junit.jupiter.api.extension.InvocationInterceptor;
6158
import org.junit.jupiter.api.extension.ParameterContext;
@@ -105,7 +102,7 @@
105102
public class QuarkusTestExtension extends AbstractJvmQuarkusTestExtension
106103
implements BeforeEachCallback, BeforeTestExecutionCallback, AfterTestExecutionCallback, AfterEachCallback,
107104
BeforeAllCallback, InvocationInterceptor, AfterAllCallback,
108-
ParameterResolver, ExecutionCondition {
105+
ParameterResolver {
109106

110107
private static final Logger log = Logger.getLogger(QuarkusTestExtension.class);
111108

@@ -1136,42 +1133,6 @@ private boolean testMethodInvokerHandlesParamType(Object testMethodInvoker, Para
11361133
}
11371134
}
11381135

1139-
@Override
1140-
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
1141-
if (!context.getTestClass().isPresent()) {
1142-
return ConditionEvaluationResult.enabled("No test class specified");
1143-
}
1144-
if (context.getTestInstance().isPresent()) {
1145-
return ConditionEvaluationResult.enabled("Quarkus Test Profile tags only affect classes");
1146-
}
1147-
String tagsStr = System.getProperty("quarkus.test.profile.tags");
1148-
if ((tagsStr == null) || tagsStr.isEmpty()) {
1149-
return ConditionEvaluationResult.enabled("No Quarkus Test Profile tags");
1150-
}
1151-
Class<? extends QuarkusTestProfile> testProfile = getQuarkusTestProfile(context);
1152-
if (testProfile == null) {
1153-
return ConditionEvaluationResult.disabled("Test '" + context.getRequiredTestClass()
1154-
+ "' is not annotated with '@QuarkusTestProfile' but 'quarkus.profile.test.tags' was set");
1155-
}
1156-
QuarkusTestProfile profileInstance;
1157-
try {
1158-
profileInstance = testProfile.getConstructor().newInstance();
1159-
} catch (Exception e) {
1160-
throw new RuntimeException(e);
1161-
}
1162-
Set<String> testProfileTags = profileInstance.tags();
1163-
String[] tags = tagsStr.split(",");
1164-
for (String tag : tags) {
1165-
String trimmedTag = tag.trim();
1166-
if (testProfileTags.contains(trimmedTag)) {
1167-
return ConditionEvaluationResult.enabled("Tag '" + trimmedTag + "' is present on '" + testProfile
1168-
+ "' which is used on test '" + context.getRequiredTestClass());
1169-
}
1170-
}
1171-
return ConditionEvaluationResult.disabled("Test '" + context.getRequiredTestClass()
1172-
+ "' disabled because 'quarkus.profile.test.tags' don't match the tags of '" + testProfile + "'");
1173-
}
1174-
11751136
public static class ExtensionState extends QuarkusTestExtensionState {
11761137

11771138
public ExtensionState(Closeable testResourceManager, Closeable resource, Runnable clearCallbacks) {

0 commit comments

Comments
 (0)