Skip to content

Commit 4d0ce00

Browse files
committed
Fix IT main for GraalVM >= 22.1
1 parent 9aa0739 commit 4d0ce00

File tree

7 files changed

+145
-35
lines changed

7 files changed

+145
-35
lines changed

integration-tests/main/src/main/java/io/quarkus/it/corestuff/serialization/SerializationConfig.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import io.quarkus.runtime.annotations.RegisterForReflection;
77

8-
@RegisterForReflection(targets = { List.class, ArrayList.class, String.class }, serialization = true)
8+
@RegisterForReflection(targets = { ArrayList.class, String.class }, serialization = true)
99
public class SerializationConfig {
1010

1111
}

integration-tests/main/src/test/java/io/quarkus/it/main/RegisterForReflectionITCase.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import static org.hamcrest.Matchers.is;
44

5+
import io.quarkus.test.junit.DisableIfBuiltWithGraalVMNewerThan;
6+
import io.quarkus.test.junit.DisableIfBuiltWithGraalVMOlderThan;
7+
import io.quarkus.test.junit.GraalVMVersion;
58
import org.junit.jupiter.api.Test;
69

710
import io.quarkus.test.junit.QuarkusIntegrationTest;
@@ -35,7 +38,20 @@ public void testSelfWithNested() {
3538
}
3639

3740
@Test
38-
public void testTargetWithNested() {
41+
@DisableIfBuiltWithGraalVMOlderThan(GraalVMVersion.GRAALVM_22_1)
42+
public void testTargetWithNestedPost22_1() {
43+
final String resourceC = BASE_PKG + ".ResourceC";
44+
45+
// Starting with GraalVM 22.1 ResourceC implicitly gets registered by GraalVM
46+
// (see https://github.com/oracle/graal/pull/4414)
47+
assertRegistration("ResourceC", resourceC);
48+
assertRegistration("InaccessibleClassOfC", resourceC + "$InaccessibleClassOfC");
49+
assertRegistration("OtherInaccessibleClassOfC", resourceC + "$InaccessibleClassOfC$OtherInaccessibleClassOfC");
50+
}
51+
52+
@Test
53+
@DisableIfBuiltWithGraalVMNewerThan(GraalVMVersion.GRAALVM_22_0)
54+
public void testTargetWithNestedPre22_1() {
3955
final String resourceC = BASE_PKG + ".ResourceC";
4056

4157
assertRegistration("FAILED", resourceC);
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.quarkus.test.junit;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
import org.junit.jupiter.api.extension.ExtendWith;
9+
10+
/**
11+
* Used to signal that a test class or method should be disabled if the version of GraalVM used to build the native binary
12+
* under test was older than the supplied version.
13+
*
14+
* This annotation should only be used on a test classes annotated with {@link NativeImageTest} or
15+
* {@link QuarkusIntegrationTest}. If it is used on other test classes, it will have no effect.
16+
*/
17+
@Target({ ElementType.TYPE, ElementType.METHOD })
18+
@Retention(RetentionPolicy.RUNTIME)
19+
@ExtendWith(DisableIfBuiltWithGraalVMNewerThanCondition.class)
20+
public @interface DisableIfBuiltWithGraalVMNewerThan {
21+
GraalVMVersion value();
22+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package io.quarkus.test.junit;
2+
3+
import static io.quarkus.test.junit.IntegrationTestUtil.readQuarkusArtifactProperties;
4+
import static org.junit.platform.commons.util.AnnotationUtils.findAnnotation;
5+
6+
import java.lang.annotation.Annotation;
7+
import java.lang.reflect.AnnotatedElement;
8+
import java.util.Arrays;
9+
import java.util.Collections;
10+
import java.util.HashSet;
11+
import java.util.Optional;
12+
import java.util.Properties;
13+
import java.util.Set;
14+
15+
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
16+
import org.junit.jupiter.api.extension.ExecutionCondition;
17+
import org.junit.jupiter.api.extension.ExtensionContext;
18+
19+
public class DisableIfBuiltWithGraalVMNewerThanCondition implements ExecutionCondition {
20+
21+
private static final String QUARKUS_INTEGRATION_TEST_NAME = QuarkusIntegrationTest.class.getName();
22+
private static final String NATIVE_IMAGE_TEST_NAME = NativeImageTest.class.getName();
23+
private static final Set<String> SUPPORTED_INTEGRATION_TESTS = Collections
24+
.unmodifiableSet(new HashSet<>(Arrays.asList(QUARKUS_INTEGRATION_TEST_NAME, NATIVE_IMAGE_TEST_NAME)));
25+
26+
@Override
27+
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
28+
Optional<AnnotatedElement> element = context.getElement();
29+
Optional<DisableIfBuiltWithGraalVMNewerThan> optional = findAnnotation(element,
30+
DisableIfBuiltWithGraalVMNewerThan.class);
31+
if (!optional.isPresent()) {
32+
return ConditionEvaluationResult.enabled("@DisableIfBuiltWithGraalVMNewerThan was not found");
33+
}
34+
if (!isIntegrationTest(context.getRequiredTestClass())) {
35+
return ConditionEvaluationResult.enabled("@DisableIfBuiltWithGraalVMNewerThan was added to an unsupported test");
36+
}
37+
38+
GraalVMVersion annotationValue = optional.get().value();
39+
Properties quarkusArtifactProperties = readQuarkusArtifactProperties(context);
40+
try {
41+
org.graalvm.home.Version version = org.graalvm.home.Version
42+
.parse(quarkusArtifactProperties.getProperty("metadata.graalvm.version.version"));
43+
int comparison = annotationValue.compareTo(version);
44+
if (comparison < 0) {
45+
return ConditionEvaluationResult.disabled("Native binary was built with GraalVM{version=" + version.toString()
46+
+ "} but the test is disabled for GraalVM versions newer than " + annotationValue);
47+
}
48+
return ConditionEvaluationResult
49+
.enabled("Native binary was built with a GraalVM version compatible with the required version by the test");
50+
} catch (NumberFormatException e) {
51+
return ConditionEvaluationResult
52+
.disabled("Unable to determine the GraalVM version with which the native binary was built");
53+
}
54+
}
55+
56+
private boolean isIntegrationTest(Class<?> testClass) {
57+
do {
58+
Annotation[] annotations = testClass.getAnnotations();
59+
for (Annotation annotation : annotations) {
60+
Class<? extends Annotation> annotationType = annotation.annotationType();
61+
String annotationTypeName = annotationType.getName();
62+
if (SUPPORTED_INTEGRATION_TESTS.contains(annotationTypeName)) {
63+
return true;
64+
}
65+
}
66+
testClass = testClass.getSuperclass();
67+
} while (testClass != Object.class);
68+
return false;
69+
}
70+
}

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

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,37 +18,5 @@
1818
@Retention(RetentionPolicy.RUNTIME)
1919
@ExtendWith(DisableIfBuiltWithGraalVMOlderThanCondition.class)
2020
public @interface DisableIfBuiltWithGraalVMOlderThan {
21-
2221
GraalVMVersion value();
23-
24-
enum GraalVMVersion {
25-
GRAALVM_21_0(org.graalvm.home.Version.create(21, 0));
26-
27-
private final org.graalvm.home.Version version;
28-
29-
GraalVMVersion(org.graalvm.home.Version version) {
30-
this.version = version;
31-
}
32-
33-
public org.graalvm.home.Version getVersion() {
34-
return version;
35-
}
36-
37-
/**
38-
* Compares this version with another GraalVM version
39-
*
40-
* @return {@code -1} if this version is older than the other version,
41-
* {@code +1} if it's newer and {@code 0} if they represent the same version
42-
*/
43-
public int compareTo(org.graalvm.home.Version version) {
44-
return this.version.compareTo(version);
45-
}
46-
47-
@Override
48-
public String toString() {
49-
return "GraalVMVersion{" +
50-
"version=" + version.toString() +
51-
'}';
52-
}
53-
}
5422
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext con
3535
return ConditionEvaluationResult.enabled("@DisableIfBuiltWithGraalVMOlderThan was added to an unsupported test");
3636
}
3737

38-
DisableIfBuiltWithGraalVMOlderThan.GraalVMVersion annotationValue = optional.get().value();
38+
GraalVMVersion annotationValue = optional.get().value();
3939
Properties quarkusArtifactProperties = readQuarkusArtifactProperties(context);
4040
try {
4141
org.graalvm.home.Version version = org.graalvm.home.Version
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.quarkus.test.junit;
2+
3+
public enum GraalVMVersion {
4+
GRAALVM_21_0(org.graalvm.home.Version.create(21, 0)),
5+
GRAALVM_22_0(org.graalvm.home.Version.create(22, 0)),
6+
GRAALVM_22_1(org.graalvm.home.Version.create(22, 1));
7+
8+
private final org.graalvm.home.Version version;
9+
10+
GraalVMVersion(org.graalvm.home.Version version) {
11+
this.version = version;
12+
}
13+
14+
public org.graalvm.home.Version getVersion() {
15+
return version;
16+
}
17+
18+
/**
19+
* Compares this version with another GraalVM version
20+
*
21+
* @return {@code -1} if this version is older than the other version,
22+
* {@code +1} if it's newer and {@code 0} if they represent the same version
23+
*/
24+
public int compareTo(org.graalvm.home.Version version) {
25+
return this.version.compareTo(version);
26+
}
27+
28+
@Override
29+
public String toString() {
30+
return "GraalVMVersion{" +
31+
"version=" + version.toString() +
32+
'}';
33+
}
34+
}

0 commit comments

Comments
 (0)