Skip to content

Commit f411185

Browse files
DSouzaMzakkak
authored andcommitted
Fix and re-enable conditional configuration tests
(cherry picked from commit ef177c1)
1 parent 3463344 commit f411185

File tree

15 files changed

+183
-136
lines changed

15 files changed

+183
-136
lines changed

substratevm/ci/ci.jsonnet

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@
110110
"style-fullbuild": mxgate("fullbuild,style,nativeimagehelp") + eclipse + jdt + maven + mx_build_exploded + gdb("10.2") + platform_spec(no_jobs) + platform_spec({
111111
"linux:amd64:jdk21": gate + t("30:00"),
112112
}),
113-
"basics": mxgate("build,helloworld,native_unittests,truffle_unittests,debuginfotest,hellomodule") + maven + jsonschema + platform_spec(no_jobs) + platform_spec({
113+
"basics": mxgate("build,helloworld,native_unittests,truffle_unittests,debuginfotest,hellomodule,condconfig") + maven + jsonschema + platform_spec(no_jobs) + platform_spec({
114114
"linux:amd64:jdk21": gate + gdb("10.2") + t("55:00"),
115115
"windows:amd64:jdk21": gate + t("1:30:00"),
116116
}) + variants({

substratevm/mx.substratevm/mx_substratevm.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -475,22 +475,23 @@ def conditional_config_task(native_image):
475475
agent_path = build_native_image_agent(native_image)
476476
conditional_config_filter_path = join(svmbuild_dir(), 'conditional-config-filter.json')
477477
with open(conditional_config_filter_path, 'w') as conditional_config_filter:
478-
conditional_config_filter.write(
479-
'''
478+
conditional_config_filter.write('''
480479
{
481480
"rules": [
482481
{"includeClasses": "com.oracle.svm.configure.test.conditionalconfig.**"}
483482
]
484483
}
485-
'''
486-
)
487-
484+
''')
488485
run_agent_conditional_config_test(agent_path, conditional_config_filter_path)
489-
490486
run_nic_conditional_config_test(agent_path, conditional_config_filter_path)
491487

492488

493489
def run_nic_conditional_config_test(agent_path, conditional_config_filter_path):
490+
"""
491+
Invoke ConfigurationGenerator test methods across multiple runs to produce multiple partial traces,
492+
use native-image-configure to compute the conditional configuration, then compare against the expected
493+
configuration.
494+
"""
494495
test_cases = [
495496
"createConfigPartOne",
496497
"createConfigPartTwo",
@@ -511,10 +512,11 @@ def run_nic_conditional_config_test(agent_path, conditional_config_filter_path):
511512
'com.oracle.svm.configure.test.conditionalconfig.PartialConfigurationGenerator#' + test_case])
512513
config_output_dir = join(nic_test_dir, 'config-output')
513514
nic_exe = mx.cmd_suffix(join(mx.JDKConfig(home=mx_sdk_vm_impl.graalvm_output()).home, 'bin', 'native-image-configure'))
514-
nic_command = [nic_exe, 'create-conditional'] \
515-
+ ['--user-code-filter=' + conditional_config_filter_path] \
516-
+ ['--input-dir=' + config_dir for config_dir in config_directories] \
517-
+ ['--output-dir=' + config_output_dir]
515+
nic_command = [nic_exe, 'generate-conditional',
516+
'--user-code-filter=' + conditional_config_filter_path,
517+
'--class-name-filter=' + conditional_config_filter_path,
518+
'--output-dir=' + config_output_dir] \
519+
+ ['--input-dir=' + config_dir for config_dir in config_directories]
518520
mx.run(nic_command)
519521
jvm_unittest(
520522
['-Dcom.oracle.svm.configure.test.conditionalconfig.ConfigurationVerifier.configpath=' + config_output_dir,
@@ -528,7 +530,8 @@ def run_agent_conditional_config_test(agent_path, conditional_config_filter_path
528530
mx.rmtree(config_dir)
529531

530532
agent_opts = ['config-output-dir=' + config_dir,
531-
'experimental-conditional-config-filter-file=' + conditional_config_filter_path]
533+
'experimental-conditional-config-filter-file=' + conditional_config_filter_path,
534+
'conditional-config-class-filter-file=' + conditional_config_filter_path]
532535
# This run generates the configuration from different test cases
533536
jvm_unittest(['-agentpath:' + agent_path + '=' + ','.join(agent_opts),
534537
'-Dcom.oracle.svm.configure.test.conditionalconfig.ConfigurationGenerator.enabled=true',

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/ConfigurationGenerator.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,23 @@
2424
*/
2525
package com.oracle.svm.configure.test.conditionalconfig;
2626

27+
import static org.junit.Assume.assumeTrue;
28+
2729
import java.lang.reflect.Proxy;
2830

2931
import org.junit.Assert;
3032
import org.junit.Test;
3133

34+
/**
35+
* Test that generates configuration metadata when traced by the agent. This output is tested
36+
* against the expected output in the config-dir directory by {@link ConfigurationVerifier}. This
37+
* test is invoked manually from mx.
38+
*/
3239
public class ConfigurationGenerator {
3340

3441
@Test
3542
public void createTestConfig() {
36-
if (!Boolean.getBoolean(ConfigurationGenerator.class.getName() + ".enabled")) {
37-
return;
38-
}
43+
assumeTrue("Test must be explicitly enabled because it is not designed for regular execution", Boolean.getBoolean(ConfigurationGenerator.class.getName() + ".enabled"));
3944
NoPropagationNecessary.runTest();
4045
PropagateToParent.runTest();
4146
PropagateButLeaveCommonConfiguration.runTest();
@@ -174,12 +179,12 @@ interface IC {
174179
}
175180

176181
private static class Util {
177-
static void doWork(String clazz, String resource, Class<?>... intefaceList) {
182+
static void doWork(String clazz, String resource, Class<?>... interfaceList) {
178183
ClassUtil.forName(clazz);
179184
ClassUtil.forName("PropagateButLeaveCommonConfiguration$C");
180185
ClassUtil.getResource(resource);
181186
ClassUtil.getResource("Common.txt");
182-
ClassUtil.createProxy(intefaceList);
187+
ClassUtil.createProxy(interfaceList);
183188
ClassUtil.createProxy(IC.class);
184189
}
185190
}

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/ConfigurationVerifier.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
*/
2525
package com.oracle.svm.configure.test.conditionalconfig;
2626

27+
import static org.junit.Assume.assumeTrue;
28+
2729
import java.io.IOException;
2830
import java.io.StringWriter;
2931
import java.net.URL;
@@ -44,10 +46,7 @@ public class ConfigurationVerifier {
4446

4547
@Test
4648
public void testConfig() throws Exception {
47-
String enabledProperty = System.getProperty(ConfigurationVerifier.class.getName() + ".enabled");
48-
if (!Boolean.parseBoolean(enabledProperty)) {
49-
return;
50-
}
49+
assumeTrue("Test must be explicitly enabled because it is not designed for regular execution", Boolean.getBoolean(ConfigurationVerifier.class.getName() + ".enabled"));
5150
ConfigurationSet actualConfig = loadActualConfig();
5251
ConfigurationSet expectedConfig = loadExpectedConfig();
5352

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/PartialConfigurationGenerator.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,20 @@
2424
*/
2525
package com.oracle.svm.configure.test.conditionalconfig;
2626

27+
import static org.junit.Assume.assumeTrue;
28+
2729
import org.junit.Test;
2830

31+
/**
32+
* Like {@link ConfigurationGenerator}, but performs the work across multiple test methods. The
33+
* agent is run separately for each and configured to emit "partial" configurations, and then the
34+
* results are combined using the {@code native-image-configure generate-conditional} command. This
35+
* test is invoked manually from mx.
36+
*/
2937
public class PartialConfigurationGenerator {
3038

3139
private static void runIfEnabled(Runnable runnable) {
32-
if (!Boolean.getBoolean(PartialConfigurationGenerator.class.getName() + ".enabled")) {
33-
return;
34-
}
40+
assumeTrue("Test must be explicitly enabled because it is not designed for regular execution", Boolean.getBoolean(PartialConfigurationGenerator.class.getName() + ".enabled"));
3541
runnable.run();
3642
}
3743

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/config-dir/jni-config.json

Lines changed: 0 additions & 2 deletions
This file was deleted.

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/config-dir/predefined-classes-config.json

Lines changed: 0 additions & 7 deletions
This file was deleted.

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/config-dir/proxy-config.json

Lines changed: 0 additions & 26 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
{
2+
"reflection": [
3+
{
4+
"condition": {
5+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.NoPropagationNecessary"
6+
},
7+
"type": "com.oracle.svm.configure.test.conditionalconfig.NoPropagationNecessary$A"
8+
},
9+
{
10+
"condition": {
11+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$ParentA"
12+
},
13+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$ParentA"
14+
},
15+
{
16+
"condition": {
17+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$ParentB"
18+
},
19+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$ParentB"
20+
},
21+
{
22+
"condition": {
23+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$ParentA"
24+
},
25+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$ParentA"
26+
},
27+
{
28+
"condition": {
29+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$ParentB"
30+
},
31+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$ParentB"
32+
},
33+
{
34+
"condition": {
35+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$Util"
36+
},
37+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$C"
38+
},
39+
{
40+
"condition": {
41+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.NoPropagationNecessary"
42+
},
43+
"type": {
44+
"proxy": [
45+
"com.oracle.svm.configure.test.conditionalconfig.NoPropagationNecessary$IA"
46+
]
47+
}
48+
},
49+
{
50+
"condition": {
51+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$ParentA"
52+
},
53+
"type": {
54+
"proxy": [
55+
"com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$IA"
56+
]
57+
}
58+
},
59+
{
60+
"condition": {
61+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$ParentB"
62+
},
63+
"type": {
64+
"proxy": [
65+
"com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$IB"
66+
]
67+
}
68+
},
69+
{
70+
"condition": {
71+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$ParentA"
72+
},
73+
"type": {
74+
"proxy": [
75+
"com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$IA"
76+
]
77+
}
78+
},
79+
{
80+
"condition": {
81+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$ParentB"
82+
},
83+
"type": {
84+
"proxy": [
85+
"com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$IB"
86+
]
87+
}
88+
},
89+
{
90+
"condition": {
91+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$Util"
92+
},
93+
"type": {
94+
"proxy": [
95+
"com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$IC"
96+
]
97+
}
98+
}
99+
],
100+
"resources": [
101+
{
102+
"condition": {
103+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.NoPropagationNecessary"
104+
},
105+
"glob": "com/oracle/svm/configure/test/conditionalconfig/resources/NotPropagated.txt"
106+
},
107+
{
108+
"condition": {
109+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$ParentA"
110+
},
111+
"glob": "com/oracle/svm/configure/test/conditionalconfig/resources/PropagateToParentA.txt"
112+
},
113+
{
114+
"condition": {
115+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateToParent$ParentB"
116+
},
117+
"glob": "com/oracle/svm/configure/test/conditionalconfig/resources/PropagateToParentB.txt"
118+
},
119+
{
120+
"condition": {
121+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$ParentA"
122+
},
123+
"glob": "com/oracle/svm/configure/test/conditionalconfig/resources/PropagateToParentA.txt"
124+
},
125+
{
126+
"condition": {
127+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$ParentB"
128+
},
129+
"glob": "com/oracle/svm/configure/test/conditionalconfig/resources/PropagateToParentB.txt"
130+
},
131+
{
132+
"condition": {
133+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$Util"
134+
},
135+
"glob": "com/oracle/svm/configure/test/conditionalconfig/resources/Common.txt"
136+
}
137+
]
138+
}

substratevm/src/com.oracle.svm.configure.test/src/com/oracle/svm/configure/test/conditionalconfig/config-dir/reflect-config.json

Lines changed: 0 additions & 38 deletions
This file was deleted.

0 commit comments

Comments
 (0)