Skip to content

Commit bf6f091

Browse files
committed
HHH-18974 - Add test for new method StaticClassLists.typesNeedingRuntimeInitialization()
Signed-off-by: Jan Schatteman <[email protected]>
1 parent 305a86a commit bf6f091

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

hibernate-graalvm/src/main/java/org/hibernate/graalvm/internal/StaticClassLists.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ public static Class[] typesNeedingArrayCopy() {
7676
};
7777
}
7878

79+
/**
80+
* The classes listed below use a SecureRandom. We need to avoid static initialization at build time of these,
81+
* for it will trigger an error in GraalVM native images.
82+
*/
7983
public static Class<?>[] typesNeedingRuntimeInitialization() {
8084
return new Class[] {
8185
org.hibernate.id.uuid.UuidVersion6Strategy.Holder.class,

hibernate-graalvm/src/test/java/org/hibernate/graalvm/internal/StaticClassListsTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
import org.hibernate.Session;
1818
import org.hibernate.event.spi.EventType;
19+
import org.hibernate.id.uuid.UuidVersion6Strategy;
20+
import org.hibernate.id.uuid.UuidVersion7Strategy;
1921
import org.hibernate.internal.util.ReflectHelper;
2022
import org.hibernate.persister.collection.CollectionPersister;
2123
import org.hibernate.persister.entity.EntityPersister;
@@ -37,6 +39,38 @@ public static void index() throws IOException {
3739
hibernateIndex = JandexTestUtils.indexJar( Session.class );
3840
}
3941

42+
@Nested
43+
// Related Jira issue: https://hibernate.atlassian.net/browse/HHH-18974
44+
class TypesNeedingRuntimeInitialization {
45+
@ParameterizedTest
46+
@EnumSource(TypesNeedingRuntimeInitialization_Category.class)
47+
void containsAllExpectedClasses(TypesNeedingRuntimeInitialization_Category category) {
48+
assertThat( StaticClassLists.typesNeedingRuntimeInitialization() )
49+
.containsAll( category.classes().collect( Collectors.toSet() ) );
50+
}
51+
52+
@Test
53+
void meta_noMissingTestCategory() {
54+
assertThat( Arrays.stream( TypesNeedingRuntimeInitialization_Category.values() ).flatMap( TypesNeedingRuntimeInitialization_Category::classes ) )
55+
.as( "If this fails, a category is missing in " + TypesNeedingRuntimeInitialization_Category.class )
56+
.contains( StaticClassLists.typesNeedingRuntimeInitialization() );
57+
}
58+
}
59+
60+
enum TypesNeedingRuntimeInitialization_Category {
61+
UUID_STRATGY_HOLDERS_USING_SECURE_RANDOM {
62+
@Override
63+
Stream<Class<?>> classes() {
64+
return Stream.of(
65+
UuidVersion6Strategy.Holder.class,
66+
UuidVersion7Strategy.Holder.class
67+
);
68+
}
69+
};
70+
71+
abstract Stream<Class<?>> classes();
72+
}
73+
4074
@Nested
4175
class TypesNeedingAllConstructorsAccessible {
4276
@ParameterizedTest

0 commit comments

Comments
 (0)