Skip to content

Commit fbdfa07

Browse files
DSouzaMzakkak
authored andcommitted
Add test for configuration propagation with recursive calls
(cherry picked from commit 9e17866)
1 parent f411185 commit fbdfa07

File tree

4 files changed

+88
-0
lines changed

4 files changed

+88
-0
lines changed

substratevm/mx.substratevm/mx_substratevm.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,7 @@ def run_nic_conditional_config_test(agent_path, conditional_config_filter_path):
496496
"createConfigPartOne",
497497
"createConfigPartTwo",
498498
"createConfigPartThree",
499+
"createConfigPartFour",
499500
]
500501
config_directories = []
501502
nic_test_dir = join(svmbuild_dir(), 'nic-cond-config-test')

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

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public void createTestConfig() {
4444
NoPropagationNecessary.runTest();
4545
PropagateToParent.runTest();
4646
PropagateButLeaveCommonConfiguration.runTest();
47+
PropagateThroughRecursiveCall.runTest();
4748
}
4849

4950
}
@@ -190,3 +191,54 @@ static void doWork(String clazz, String resource, Class<?>... interfaceList) {
190191
}
191192

192193
}
194+
195+
/**
196+
* This is a regression test. It ensures that configuration propagated from a recursive call does
197+
* not get lost (which can happen unless the configuration is propagated past any recursive
198+
* callers).
199+
*/
200+
@SuppressWarnings("unused")
201+
class PropagateThroughRecursiveCall {
202+
203+
public static void runTest() {
204+
ParentA.doWork();
205+
ParentB.doWork();
206+
}
207+
208+
private static final class ParentA {
209+
static void doWork() {
210+
Recursive.recur(true, "PropagateThroughRecursiveCall$A");
211+
}
212+
}
213+
214+
private static final class ParentB {
215+
static void doWork() {
216+
Recursive.recur(true, "PropagateThroughRecursiveCall$B");
217+
}
218+
}
219+
220+
private static final class A1 {
221+
}
222+
223+
private static final class A2 {
224+
}
225+
226+
private static final class B1 {
227+
}
228+
229+
private static final class B2 {
230+
}
231+
232+
private static final class Recursive {
233+
static void recur(boolean recurse, String clazz) {
234+
ClassUtil.forName("PropagateThroughRecursiveCall$Recursive");
235+
if (recurse) {
236+
ClassUtil.forName(clazz + "1");
237+
recur(false, clazz);
238+
} else {
239+
ClassUtil.forName(clazz + "2");
240+
}
241+
242+
}
243+
}
244+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,9 @@ public void createConfigPartTwo() {
5555
public void createConfigPartThree() {
5656
runIfEnabled(PropagateButLeaveCommonConfiguration::runTest);
5757
}
58+
59+
@Test
60+
public void createConfigPartFour() {
61+
runIfEnabled(PropagateThroughRecursiveCall::runTest);
62+
}
5863
}

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,36 @@
9595
"com.oracle.svm.configure.test.conditionalconfig.PropagateButLeaveCommonConfiguration$IC"
9696
]
9797
}
98+
},
99+
{
100+
"condition": {
101+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$ParentA"
102+
},
103+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$A1"
104+
},
105+
{
106+
"condition": {
107+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$ParentA"
108+
},
109+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$A2"
110+
},
111+
{
112+
"condition": {
113+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$ParentB"
114+
},
115+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$B1"
116+
},
117+
{
118+
"condition": {
119+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$ParentB"
120+
},
121+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$B2"
122+
},
123+
{
124+
"condition": {
125+
"typeReached": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$Recursive"
126+
},
127+
"type": "com.oracle.svm.configure.test.conditionalconfig.PropagateThroughRecursiveCall$Recursive"
98128
}
99129
],
100130
"resources": [

0 commit comments

Comments
 (0)