Skip to content

Commit f115ab5

Browse files
geoandgsmet
authored andcommitted
Consider resources from @testprofile when checking for restart
Closes: #44497 (cherry picked from commit 7776de9)
1 parent 17a8b2e commit f115ab5

File tree

5 files changed

+38
-12
lines changed

5 files changed

+38
-12
lines changed

test-framework/common/src/main/java/io/quarkus/test/common/TestResourceManager.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -319,13 +319,15 @@ private Set<TestResourceClassEntry> uniqueTestResourceClassEntries(Path testClas
319319
* Allows Quarkus to extra basic information about which test resources a test class will require
320320
*/
321321
public static Set<TestResourceManager.TestResourceComparisonInfo> testResourceComparisonInfo(Class<?> testClass,
322-
Path testClassLocation) {
322+
Path testClassLocation, List<TestResourceClassEntry> entriesFromProfile) {
323323
Set<TestResourceClassEntry> uniqueEntries = getUniqueTestResourceClassEntries(testClass, testClassLocation, null);
324-
if (uniqueEntries.isEmpty()) {
324+
if (uniqueEntries.isEmpty() && entriesFromProfile.isEmpty()) {
325325
return Collections.emptySet();
326326
}
327-
Set<TestResourceManager.TestResourceComparisonInfo> result = new HashSet<>(uniqueEntries.size());
328-
for (TestResourceClassEntry entry : uniqueEntries) {
327+
Set<TestResourceClassEntry> allEntries = new HashSet<>(uniqueEntries);
328+
allEntries.addAll(entriesFromProfile);
329+
Set<TestResourceManager.TestResourceComparisonInfo> result = new HashSet<>(allEntries.size());
330+
for (TestResourceClassEntry entry : allEntries) {
329331
Map<String, String> args = new HashMap<>(entry.args);
330332
if (entry.configAnnotation != null) {
331333
args.put("configAnnotation", entry.configAnnotation.annotationType().getName());

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ private QuarkusTestExtensionState ensureStarted(ExtensionContext extensionContex
153153
// we reload the test resources if we changed test class and if we had or will have per-test test resources
154154
boolean reloadTestResources = false;
155155
if ((state == null && !failedBoot) || wrongProfile || (reloadTestResources = isNewTestClass
156-
&& TestResourceUtil.testResourcesRequireReload(state, extensionContext.getRequiredTestClass()))) {
156+
&& TestResourceUtil.testResourcesRequireReload(state, extensionContext.getRequiredTestClass(),
157+
selectedProfile))) {
157158
if (wrongProfile || reloadTestResources) {
158159
if (state != null) {
159160
try {

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ private void ensurePrepared(ExtensionContext extensionContext, Class<? extends Q
6767
// we reload the test resources if we changed test class and if we had or will have per-test test resources
6868
boolean isNewTestClass = !Objects.equals(extensionContext.getRequiredTestClass(), currentJUnitTestClass);
6969
if (wrongProfile || (isNewTestClass
70-
&& TestResourceUtil.testResourcesRequireReload(state, extensionContext.getRequiredTestClass()))) {
70+
&& TestResourceUtil.testResourcesRequireReload(state, extensionContext.getRequiredTestClass(),
71+
profile))) {
7172
if (state != null) {
7273
try {
7374
state.close();

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,8 @@ private QuarkusTestExtensionState ensureStarted(ExtensionContext extensionContex
579579
// we reload the test resources if we changed test class and the new test class is not a nested class, and if we had or will have per-test test resources
580580
boolean reloadTestResources = false;
581581
if ((state == null && !failedBoot) || wrongProfile || (reloadTestResources = isNewTestClass
582-
&& TestResourceUtil.testResourcesRequireReload(state, extensionContext.getRequiredTestClass()))) {
582+
&& TestResourceUtil.testResourcesRequireReload(state, extensionContext.getRequiredTestClass(),
583+
selectedProfile))) {
583584
if (wrongProfile || reloadTestResources) {
584585
if (state != null) {
585586
try {

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

+26-5
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,19 @@ private TestResourceUtil() {
3131
* This is where we decide if the test resources of the current state vs the ones required by the next test class
3232
* to be executed require a Quarkus restart.
3333
*/
34-
static boolean testResourcesRequireReload(QuarkusTestExtensionState state, Class<?> nextTestClass) {
34+
static boolean testResourcesRequireReload(QuarkusTestExtensionState state, Class<?> nextTestClass,
35+
Class<? extends QuarkusTestProfile> nextTestClassProfile) {
36+
QuarkusTestProfile profileInstance = null;
37+
if (nextTestClassProfile != null) {
38+
try {
39+
profileInstance = nextTestClassProfile.getConstructor().newInstance();
40+
} catch (Exception e) {
41+
throw new RuntimeException(e);
42+
}
43+
}
3544
Set<TestResourceManager.TestResourceComparisonInfo> existingTestResources = existingTestResources(state);
36-
Set<TestResourceManager.TestResourceComparisonInfo> nextTestResources = nextTestResources(nextTestClass);
45+
Set<TestResourceManager.TestResourceComparisonInfo> nextTestResources = nextTestResources(nextTestClass,
46+
profileInstance);
3747

3848
return TestResourceManager.testResourcesRequireReload(existingTestResources, nextTestResources);
3949
}
@@ -54,9 +64,20 @@ static Set<TestResourceManager.TestResourceComparisonInfo> existingTestResources
5464
return Collections.emptySet();
5565
}
5666

57-
static Set<TestResourceManager.TestResourceComparisonInfo> nextTestResources(Class<?> requiredTestClass) {
67+
static Set<TestResourceManager.TestResourceComparisonInfo> nextTestResources(Class<?> requiredTestClass,
68+
QuarkusTestProfile profileInstance) {
69+
70+
List<TestResourceManager.TestResourceClassEntry> entriesFromProfile = Collections.emptyList();
71+
if (profileInstance != null) {
72+
entriesFromProfile = new ArrayList<>(profileInstance.testResources().size());
73+
for (QuarkusTestProfile.TestResourceEntry entry : profileInstance.testResources()) {
74+
entriesFromProfile.add(new TestResourceManager.TestResourceClassEntry(entry.getClazz(), entry.getArgs(), null,
75+
entry.isParallel(), TestResourceScope.MATCHING_RESOURCES));
76+
}
77+
}
78+
5879
return TestResourceManager
59-
.testResourceComparisonInfo(requiredTestClass, getTestClassesLocation(requiredTestClass));
80+
.testResourceComparisonInfo(requiredTestClass, getTestClassesLocation(requiredTestClass), entriesFromProfile);
6081
}
6182

6283
/**
@@ -92,7 +113,7 @@ static <T> List<T> copyEntriesFromProfile(
92113
T instance = (T) testResourceClassEntryConstructor.newInstance(
93114
Class.forName(testResource.getClazz().getName(), true, classLoader), testResource.getArgs(),
94115
null, testResource.isParallel(),
95-
Enum.valueOf(testResourceScopeClass, TestResourceScope.RESTRICTED_TO_CLASS.name()));
116+
Enum.valueOf(testResourceScopeClass, TestResourceScope.MATCHING_RESOURCES.name()));
96117
result.add(instance);
97118
}
98119

0 commit comments

Comments
 (0)