Skip to content

Commit 1fb540c

Browse files
committed
Respect annotation configuration values when comparing test resources
1 parent 12a9f02 commit 1fb540c

File tree

6 files changed

+114
-4
lines changed

6 files changed

+114
-4
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.quarkus.it.extension.configurable;
2+
3+
import java.util.Map;
4+
5+
import io.quarkus.it.extension.Counter;
6+
import io.quarkus.test.common.QuarkusTestResourceConfigurableLifecycleManager;
7+
8+
public class ConfigurableLifecycleManager
9+
implements QuarkusTestResourceConfigurableLifecycleManager<CustomResourceWithAttribute> {
10+
11+
String attributeValue;
12+
13+
@Override
14+
public void init(CustomResourceWithAttribute annotation) {
15+
attributeValue = annotation.value();
16+
}
17+
18+
@Override
19+
public Map<String, String> start() {
20+
Counter.startCounter.incrementAndGet();
21+
return Map.of("attributeValue", attributeValue);
22+
}
23+
24+
@Override
25+
public void stop() {
26+
Counter.endCounter.incrementAndGet();
27+
}
28+
29+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.quarkus.it.extension.configurable;
2+
3+
import java.lang.annotation.*;
4+
5+
import jakarta.enterprise.inject.Stereotype;
6+
7+
import io.quarkus.test.common.QuarkusTestResource;
8+
9+
@Retention(RetentionPolicy.RUNTIME)
10+
@Target(ElementType.TYPE)
11+
@QuarkusTestResource(ConfigurableLifecycleManager.class)
12+
@Stereotype
13+
public @interface CustomResourceWithAttribute {
14+
15+
String value();
16+
17+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.quarkus.it.extension.configurable;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import org.eclipse.microprofile.config.ConfigProvider;
7+
import org.junit.jupiter.api.Test;
8+
9+
import io.quarkus.it.extension.Counter;
10+
import io.quarkus.test.junit.QuarkusTest;
11+
12+
@CustomResourceWithAttribute(value = "bar")
13+
@QuarkusTest
14+
public class WithAttributeEndTest {
15+
16+
@Test
17+
public void test1() {
18+
assertEquals("bar", ConfigProvider.getConfig().getValue("attributeValue", String.class));
19+
assertTrue(Counter.endCounter.get() <= 1);
20+
}
21+
22+
@Test
23+
public void test2() {
24+
assertTrue(Counter.endCounter.get() <= 1);
25+
}
26+
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.quarkus.it.extension.configurable;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import org.eclipse.microprofile.config.ConfigProvider;
7+
import org.junit.jupiter.api.Test;
8+
9+
import io.quarkus.it.extension.Counter;
10+
import io.quarkus.test.junit.QuarkusTest;
11+
12+
@CustomResourceWithAttribute(value = "foo")
13+
@QuarkusTest
14+
public class WithAttributeStartTest {
15+
16+
@Test
17+
public void test1() {
18+
assertEquals("foo", ConfigProvider.getConfig().getValue("attributeValue", String.class));
19+
assertTrue(Counter.startCounter.get() <= 1);
20+
}
21+
22+
@Test
23+
public void test2() {
24+
assertTrue(Counter.startCounter.get() <= 1);
25+
}
26+
27+
}

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

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.lang.annotation.Annotation;
99
import java.lang.reflect.Field;
1010
import java.lang.reflect.InvocationTargetException;
11+
import java.lang.reflect.Method;
1112
import java.nio.file.Path;
1213
import java.util.ArrayList;
1314
import java.util.Arrays;
@@ -349,12 +350,21 @@ public static Set<TestResourceManager.TestResourceComparisonInfo> testResourceCo
349350
}
350351

351352
private static TestResourceComparisonInfo prepareTestResourceComparisonInfo(TestResourceClassEntry entry) {
352-
Map<String, String> args;
353+
Map<String, Object> args;
353354
if (entry.configAnnotation != null) {
354355
args = new HashMap<>(entry.args);
355356
args.put("configAnnotation", entry.configAnnotation.annotationType().getName());
357+
Method[] annotationAttributes = entry.configAnnotation.annotationType().getDeclaredMethods();
358+
for (Method annotationAttribute : annotationAttributes) {
359+
try {
360+
args.put(annotationAttribute.getName(), annotationAttribute.invoke(entry.configAnnotation));
361+
} catch (Exception e) {
362+
throw new RuntimeException("Unable to extract configuration values for annotation "
363+
+ entry.configAnnotation.annotationType().getName(), e);
364+
}
365+
}
356366
} else {
357-
args = entry.args;
367+
args = new HashMap<>(entry.args);
358368
}
359369

360370
return new TestResourceComparisonInfo(entry.testResourceLifecycleManagerClass().getName(), entry.getScope(),
@@ -648,7 +658,7 @@ public TestResourceScope getScope() {
648658
}
649659

650660
public record TestResourceComparisonInfo(String testResourceLifecycleManagerClass, TestResourceScope scope,
651-
Map<String, String> args) {
661+
Map<String, Object> args) {
652662

653663
}
654664

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ static Set<TestResourceManager.TestResourceComparisonInfo> testResourceCompariso
243243
testResourceScope = TestResourceScope.valueOf(originalTestResourceScope.toString());
244244
}
245245
Object originalArgs = entry.getClass().getMethod("args").invoke(entry);
246-
Map<String, String> args = (Map<String, String>) originalArgs;
246+
Map<String, Object> args = (Map<String, Object>) originalArgs;
247247
result.add(new TestResourceManager.TestResourceComparisonInfo(testResourceLifecycleManagerClass,
248248
testResourceScope, args));
249249
}

0 commit comments

Comments
 (0)