@@ -30,7 +30,15 @@ public class JDK11UpTimeoutAdjustmentTest {
30
30
private static final long NANOS_PER_MILLI = 1000_000L ;
31
31
private static final long NANOS_PER_SECOND = 1000_000_000L ;
32
32
33
- private static Unsafe unsafe = Unsafe .getUnsafe ();
33
+ private static final int nsTime500kns = 500000 ;
34
+ private static final long msTime2s = 2 * MILLIS_PER_SECOND ;
35
+ private static final long nsTime2s = 2 * NANOS_PER_SECOND ;
36
+ private static final long msTime5s = 5 * MILLIS_PER_SECOND ;
37
+ private static final long nsTime5s = 5 * NANOS_PER_SECOND ;
38
+
39
+ private static final Object objWait = new Object ();
40
+ private static final TestResult testResult = new TestResult (true , 0 );
41
+ private static final Unsafe unsafe = Unsafe .getUnsafe ();
34
42
35
43
public static void main (String [] args ) throws InterruptedException {
36
44
if (args .length == 0 ) {
@@ -41,41 +49,37 @@ public static void main(String[] args) throws InterruptedException {
41
49
}
42
50
}
43
51
44
- private static Object objWait = new Object ();
45
- // 5s time in ms
46
- private static final long msWaitNotify5s = 5 * MILLIS_PER_SECOND ;
47
- final TestResult testResult = new TestResult (true , 0 );
48
-
49
52
private void test (String testName ) throws InterruptedException {
50
53
CRIUSupport criu = CRIUTestUtils .prepareCheckPointJVM (CRIUTestUtils .imagePath );
51
54
System .out .println ("Start test name: " + testName );
52
55
CRIUTestUtils .showThreadCurrentTime ("Before starting " + testName );
56
+ Thread testThread ;
53
57
switch (testName ) {
54
58
case "testThreadPark" :
55
59
testThreadParkHelper ("testThreadPark NO C/R" );
56
- testThreadPark ();
60
+ testThread = testThreadPark ();
57
61
break ;
58
62
case "testThreadSleep" :
59
- testThreadParkHelper ("testThreadSleep NO C/R" );
60
- testThreadSleep ();
63
+ testThreadSleepHelper ("testThreadSleep NO C/R" );
64
+ testThread = testThreadSleep ();
61
65
break ;
62
66
case "testObjectWaitNotify" :
63
- testObjectWaitNotify ();
67
+ testThread = testObjectWaitNotify ();
64
68
break ;
65
69
case "testObjectWaitTimedNoNanoSecond" :
66
- testObjectWaitTimedHelper ("testObjectWaitTimedNoNanoSecond NO C/R" , msSleepTime10s , 0 );
67
- testObjectWaitTimedNoNanoSecond ();
70
+ testObjectWaitTimedHelper ("testObjectWaitTimedNoNanoSecond NO C/R" , msTime2s , 0 );
71
+ testThread = testObjectWaitTimedNoNanoSecond ();
68
72
break ;
69
73
case "testObjectWaitTimedWithNanoSecond" :
70
- testObjectWaitTimedHelper ("testObjectWaitTimedWithNanoSecond NO C/R" , msSleepTime10s , 500000 );
71
- testObjectWaitTimedWithNanoSecond ();
74
+ testObjectWaitTimedHelper ("testObjectWaitTimedWithNanoSecond NO C/R" , msTime2s , nsTime500kns );
75
+ testThread = testObjectWaitTimedWithNanoSecond ();
72
76
break ;
73
77
default :
74
78
throw new RuntimeException ("Unrecognized test name: " + testName );
75
79
}
76
80
77
81
while (testResult .lockStatus == 0 ) {
78
- Thread .yield ();
82
+ Thread .currentThread (). yield ();
79
83
}
80
84
CRIUTestUtils .checkPointJVMNoSetup (criu , CRIUTestUtils .imagePath , false );
81
85
@@ -87,24 +91,28 @@ private void test(String testName) throws InterruptedException {
87
91
testThreadSleepHelper ("testThreadSleep NO C/R" );
88
92
break ;
89
93
case "testObjectWaitNotify" :
90
- Thread .sleep (msWaitNotify5s );
91
- CRIUTestUtils .showThreadCurrentTime ("Before objWait.notify()" );
94
+ Thread .sleep (msTime5s );
92
95
synchronized (objWait ) {
93
96
objWait .notify ();
94
97
}
95
- Thread .sleep (5 * MILLIS_PER_SECOND );
96
98
break ;
97
99
case "testObjectWaitTimedNoNanoSecond" :
98
- testObjectWaitTimedHelper ("testObjectWaitTimedNoNanoSecond NO C/R" , msSleepTime10s , 0 );
100
+ testObjectWaitTimedHelper ("testObjectWaitTimedNoNanoSecond NO C/R" , msTime2s , 0 );
99
101
break ;
100
102
case "testObjectWaitTimedWithNanoSecond" :
101
- testObjectWaitTimedHelper ("testObjectWaitTimedWithNanoSecond NO C/R" , msSleepTime10s , 500000 );
103
+ testObjectWaitTimedHelper ("testObjectWaitTimedWithNanoSecond NO C/R" , msTime2s , nsTime500kns );
102
104
break ;
103
105
default :
104
106
}
107
+ CRIUTestUtils .showThreadCurrentTime ("After run test : " + testName );
105
108
106
- // maximum test running time is 12s, sleep another 2s
107
- Thread .sleep (2 * MILLIS_PER_SECOND );
109
+ if (testThread != null ) {
110
+ try {
111
+ testThread .join ();
112
+ } catch (InterruptedException e ) {
113
+ e .printStackTrace ();
114
+ }
115
+ }
108
116
CRIUTestUtils .showThreadCurrentTime ("End " + testName );
109
117
}
110
118
@@ -127,130 +135,119 @@ public static void showMessages(String logStr, long expectedTime, boolean isMill
127
135
+ "ns, CheckpointRestoreNanoTimeDelta: " + crDeltaNs + "ns (~" + (crDeltaNs / NANOS_PER_MILLI ) + "ms)" );
128
136
}
129
137
130
- // 10s parkt time in ns
131
- private static final long nsParkTime10s = 10 * NANOS_PER_SECOND ;
132
-
133
138
private void testThreadParkHelper (String testName ) {
134
139
CRIUTestUtils .showThreadCurrentTime (testName + " before park()" );
135
140
final long startNanoTime = System .nanoTime ();
136
141
testResult .lockStatus = 1 ;
137
- unsafe .park (false , nsParkTime10s );
142
+ unsafe .park (false , nsTime5s );
138
143
final long endNanoTime = System .nanoTime ();
139
- final long elapsedTime = endNanoTime - startNanoTime ;
140
- boolean pass = false ;
141
- if (elapsedTime >= nsParkTime10s ) {
142
- pass = true ;
143
- }
144
144
CRIUTestUtils .showThreadCurrentTime (testName + " after park()" );
145
- if (pass ) {
146
- showMessages ("PASSED: expected park time " , nsParkTime10s , false , elapsedTime , startNanoTime , endNanoTime );
145
+ final long nsElapsedTime = endNanoTime - startNanoTime ;
146
+ if (nsElapsedTime < nsTime5s ) {
147
+ showMessages ("FAILED: expected park time " , nsTime5s , false , nsElapsedTime , startNanoTime , endNanoTime );
147
148
} else {
148
- showMessages ("FAILED : expected park time " , nsParkTime10s , false , elapsedTime , startNanoTime , endNanoTime );
149
+ showMessages ("PASSED : expected park time " , nsTime5s , false , nsElapsedTime , startNanoTime , endNanoTime );
149
150
}
150
151
}
151
152
152
- private void testThreadPark () {
153
- new Thread (() -> testThreadParkHelper ("testThreadPark" )).start ();
153
+ private Thread testThreadPark () {
154
+ Thread parkThread = new Thread (() -> testThreadParkHelper ("testThreadPark" ));
155
+ parkThread .start ();
156
+ return parkThread ;
154
157
}
155
158
156
- // 10s sleep time in ms
157
- private static final long msSleepTime10s = 10 * MILLIS_PER_SECOND ;
158
-
159
159
private void testThreadSleepHelper (String testName ) {
160
160
CRIUTestUtils .showThreadCurrentTime (testName + " before sleep()" );
161
161
final long startNanoTime = System .nanoTime ();
162
162
try {
163
163
testResult .lockStatus = 1 ;
164
- Thread .sleep (msSleepTime10s );
165
- boolean pass = false ;
164
+ Thread .sleep (msTime5s );
166
165
final long endNanoTime = System .nanoTime ();
167
- final long elapsedTime = endNanoTime - startNanoTime ;
168
- if (elapsedTime >= msSleepTime10s ) {
169
- pass = true ;
170
- }
171
166
CRIUTestUtils .showThreadCurrentTime (testName + " after sleep()" );
172
- if (pass ) {
173
- showMessages ("PASSED: expected sleep time " , msSleepTime10s , true , elapsedTime , startNanoTime ,
167
+ final long nsElapsedTime = endNanoTime - startNanoTime ;
168
+ if (nsElapsedTime < nsTime5s ) {
169
+ showMessages ("FAILED: expected sleep time " , msTime5s , true , nsElapsedTime , startNanoTime ,
174
170
endNanoTime );
175
171
} else {
176
- showMessages ("FAILED : expected sleep time " , msSleepTime10s , true , elapsedTime , startNanoTime ,
172
+ showMessages ("PASSED : expected sleep time " , msTime5s , true , nsElapsedTime , startNanoTime ,
177
173
endNanoTime );
178
174
}
179
175
} catch (InterruptedException ie ) {
180
176
ie .printStackTrace ();
181
177
}
182
178
}
183
179
184
- private void testThreadSleep () {
185
- new Thread (() -> testThreadParkHelper ("testThreadSleep" )).start ();
180
+ private Thread testThreadSleep () {
181
+ Thread sleepThread = new Thread (() -> testThreadSleepHelper ("testThreadSleep" ));
182
+ sleepThread .start ();
183
+ return sleepThread ;
186
184
}
187
185
188
- private void testObjectWaitNotify () {
186
+ private Thread testObjectWaitNotify () {
189
187
Thread threadWait = new Thread (new Runnable () {
190
188
public void run () {
191
189
CRIUTestUtils .showThreadCurrentTime ("testObjectWaitNotify() before wait()" );
192
190
try {
193
- final long startNanoTime = System . nanoTime () ;
191
+ final long startNanoTime ;
194
192
synchronized (objWait ) {
193
+ startNanoTime = System .nanoTime ();
195
194
testResult .lockStatus = 1 ;
196
195
objWait .wait ();
197
196
}
198
- boolean pass = false ;
199
197
final long endNanoTime = System .nanoTime ();
200
- final long elapsedTime = endNanoTime - startNanoTime ;
201
- if (elapsedTime >= msWaitNotify5s ) {
202
- pass = true ;
203
- }
204
198
CRIUTestUtils .showThreadCurrentTime ("testObjectWaitNotify() after wait()" );
205
- if (pass ) {
206
- showMessages ("PASSED: expected wait time " , msWaitNotify5s , true , elapsedTime , startNanoTime ,
199
+ final long msElapsedTime = (endNanoTime - startNanoTime ) / NANOS_PER_MILLI ;
200
+ if (msElapsedTime < msTime5s ) {
201
+ showMessages ("FAILED: expected wait time " , msTime5s , true , msElapsedTime , startNanoTime ,
207
202
endNanoTime );
208
203
} else {
209
- showMessages ("FAILED : expected wait time " , msWaitNotify5s , true , elapsedTime , startNanoTime ,
204
+ showMessages ("PASSED : expected wait time " , msTime5s , true , msElapsedTime , startNanoTime ,
210
205
endNanoTime );
211
206
}
212
207
} catch (InterruptedException ie ) {
213
208
ie .printStackTrace ();
214
209
}
215
210
}
216
211
});
217
- threadWait .setDaemon (true );
218
212
threadWait .start ();
213
+
214
+ return threadWait ;
219
215
}
220
216
221
217
private void testObjectWaitTimedHelper (String testName , long ms , int ns ) {
222
218
CRIUTestUtils .showThreadCurrentTime (testName + " before wait(" + ms + ", " + ns + ")" );
223
219
try {
224
- final long startNanoTime = System . nanoTime () ;
220
+ final long startNanoTime ;
225
221
synchronized (objWait ) {
222
+ startNanoTime = System .nanoTime ();
226
223
testResult .lockStatus = 1 ;
227
224
objWait .wait (ms , ns );
228
225
}
229
- boolean pass = false ;
230
226
final long endNanoTime = System .nanoTime ();
231
- final long elapsedTime = endNanoTime - startNanoTime ;
232
- final long nsSleepTime = ms * NANOS_PER_MILLI + ns ;
233
- if (elapsedTime >= nsSleepTime ) {
234
- pass = true ;
235
- }
236
227
CRIUTestUtils .showThreadCurrentTime (testName + " after wait(" + ms + ", " + ns + ")" );
237
- if (pass ) {
238
- showMessages ("PASSED: expected wait time " , nsSleepTime , false , elapsedTime , startNanoTime ,
228
+ final long nsElapsedTime = endNanoTime - startNanoTime ;
229
+ final long nsSleepTime = ms * NANOS_PER_MILLI + ns ;
230
+ if (nsElapsedTime < nsSleepTime ) {
231
+ showMessages ("FAILED: expected wait time " , nsSleepTime , false , nsElapsedTime , startNanoTime ,
239
232
endNanoTime );
240
233
} else {
241
- showMessages ("FAILED : expected wait time " , nsSleepTime , false , elapsedTime , startNanoTime ,
234
+ showMessages ("PASSED : expected wait time " , nsSleepTime , false , nsElapsedTime , startNanoTime ,
242
235
endNanoTime );
243
236
}
244
237
} catch (InterruptedException ie ) {
245
238
ie .printStackTrace ();
246
239
}
247
240
}
248
241
249
- private void testObjectWaitTimedNoNanoSecond () {
250
- new Thread (() -> testObjectWaitTimedHelper ("testObjectWaitTimedNoNanoSecond" , msSleepTime10s , 0 )).start ();
242
+ private Thread testObjectWaitTimedNoNanoSecond () {
243
+ Thread waitThread = new Thread (() -> testObjectWaitTimedHelper ("testObjectWaitTimedNoNanoSecond" , msTime5s , 0 ));
244
+ waitThread .start ();
245
+ return waitThread ;
251
246
}
252
247
253
- private void testObjectWaitTimedWithNanoSecond () {
254
- new Thread (() -> testObjectWaitTimedHelper ("testObjectWaitTimedWithNanoSecond" , msSleepTime10s , 500000 )).start ();
248
+ private Thread testObjectWaitTimedWithNanoSecond () {
249
+ Thread waitThread = new Thread (() -> testObjectWaitTimedHelper ("testObjectWaitTimedWithNanoSecond" , msTime5s , nsTime500kns ));
250
+ waitThread .start ();
251
+ return waitThread ;
255
252
}
256
253
}
0 commit comments