Commit | Line | Data |
---|---|---|
fbcc2a2a | 1 | package be.nikiroo.utils.test_code; |
8537d55a | 2 | |
f4053377 NR |
3 | import java.net.URL; |
4 | ||
8537d55a NR |
5 | import be.nikiroo.utils.serial.server.ConnectActionClientObject; |
6 | import be.nikiroo.utils.serial.server.ConnectActionClientString; | |
7 | import be.nikiroo.utils.serial.server.ConnectActionServerObject; | |
8 | import be.nikiroo.utils.serial.server.ConnectActionServerString; | |
9 | import be.nikiroo.utils.serial.server.ServerBridge; | |
10 | import be.nikiroo.utils.serial.server.ServerObject; | |
11 | import be.nikiroo.utils.serial.server.ServerString; | |
fbcc2a2a NR |
12 | import be.nikiroo.utils.test.TestCase; |
13 | import be.nikiroo.utils.test.TestLauncher; | |
8537d55a NR |
14 | |
15 | class SerialServerTest extends TestLauncher { | |
fbcc2a2a NR |
16 | public SerialServerTest(String[] args) { |
17 | super("SerialServer test", args); | |
18 | ||
08f80ac5 NR |
19 | for (String key : new String[] { null, |
20 | "some super secret encryption key" }) { | |
fbcc2a2a NR |
21 | for (boolean bridge : new Boolean[] { false, true }) { |
22 | final String skey = (key != null ? "(encrypted)" | |
23 | : "(plain text)"); | |
24 | final String sbridge = (bridge ? " with bridge" : ""); | |
25 | ||
26 | addSeries(new SerialServerTest(args, key, skey, bridge, | |
27 | sbridge, "ServerString")); | |
28 | ||
29 | addSeries(new SerialServerTest(args, key, skey, bridge, | |
30 | sbridge, new Object() { | |
31 | @Override | |
32 | public String toString() { | |
33 | return "ServerObject"; | |
34 | } | |
35 | })); | |
36 | } | |
37 | } | |
38 | } | |
39 | ||
40 | private SerialServerTest(final String[] args, final String key, | |
41 | final String skey, final boolean bridge, final String sbridge, | |
42 | final String title) { | |
43 | ||
44 | super(title + " " + skey + sbridge, args); | |
45 | ||
46 | addTest(new TestCase("Simple connection " + skey) { | |
8537d55a NR |
47 | @Override |
48 | public void test() throws Exception { | |
49 | final String[] rec = new String[1]; | |
50 | ||
8468bb79 | 51 | ServerString server = new ServerString(this.getName(), 0, key) { |
8537d55a NR |
52 | @Override |
53 | protected String onRequest( | |
08f80ac5 | 54 | ConnectActionServerString action, String data) |
8537d55a NR |
55 | throws Exception { |
56 | return null; | |
57 | } | |
d827da2a NR |
58 | |
59 | @Override | |
60 | protected void onError(Exception e) { | |
61 | } | |
8537d55a NR |
62 | }; |
63 | ||
64 | int port = server.getPort(); | |
65 | assertEquals("A port should have been assigned", true, port > 0); | |
66 | ||
67 | server.start(); | |
68 | ||
69 | ServerBridge br = null; | |
70 | if (bridge) { | |
8468bb79 | 71 | br = new ServerBridge(0, key, "", port, key); |
f4053377 | 72 | br.setTraceHandler(null); |
8537d55a NR |
73 | |
74 | port = br.getPort(); | |
75 | assertEquals( | |
76 | "A port should have been assigned to the bridge", | |
77 | true, port > 0); | |
78 | ||
79 | br.start(); | |
80 | } | |
81 | ||
82 | try { | |
83 | try { | |
8468bb79 | 84 | new ConnectActionClientObject(null, port, key) { |
8537d55a | 85 | @Override |
08f80ac5 | 86 | public void action() throws Exception { |
8537d55a NR |
87 | rec[0] = "ok"; |
88 | } | |
89 | }.connect(); | |
90 | } finally { | |
91 | server.stop(); | |
92 | } | |
93 | } finally { | |
94 | if (br != null) { | |
95 | br.stop(); | |
96 | } | |
97 | } | |
98 | ||
99 | assertNotNull("The client action was not run", rec[0]); | |
100 | assertEquals("ok", rec[0]); | |
101 | } | |
102 | }); | |
103 | ||
fbcc2a2a | 104 | addTest(new TestCase("Simple exchange " + skey) { |
8537d55a NR |
105 | final String[] sent = new String[1]; |
106 | final String[] recd = new String[1]; | |
107 | final Exception[] err = new Exception[1]; | |
108 | ||
109 | @Override | |
110 | public void test() throws Exception { | |
8468bb79 | 111 | ServerString server = new ServerString(this.getName(), 0, key) { |
8537d55a NR |
112 | @Override |
113 | protected String onRequest( | |
08f80ac5 | 114 | ConnectActionServerString action, String data) |
8537d55a NR |
115 | throws Exception { |
116 | sent[0] = data; | |
117 | return "pong"; | |
118 | } | |
119 | ||
120 | @Override | |
121 | protected void onError(Exception e) { | |
8537d55a NR |
122 | err[0] = e; |
123 | } | |
124 | }; | |
125 | ||
126 | int port = server.getPort(); | |
127 | ||
128 | server.start(); | |
129 | ||
130 | ServerBridge br = null; | |
131 | if (bridge) { | |
8468bb79 | 132 | br = new ServerBridge(0, key, "", port, key); |
f4053377 | 133 | br.setTraceHandler(null); |
8537d55a NR |
134 | port = br.getPort(); |
135 | br.start(); | |
136 | } | |
137 | ||
138 | try { | |
139 | try { | |
8468bb79 | 140 | new ConnectActionClientString(null, port, key) { |
8537d55a | 141 | @Override |
08f80ac5 | 142 | public void action() throws Exception { |
8537d55a NR |
143 | recd[0] = send("ping"); |
144 | } | |
145 | }.connect(); | |
146 | } finally { | |
147 | server.stop(); | |
148 | } | |
149 | } finally { | |
150 | if (br != null) { | |
151 | br.stop(); | |
152 | } | |
153 | } | |
154 | ||
155 | if (err[0] != null) { | |
08f80ac5 NR |
156 | fail("An exception was thrown: " + err[0].getMessage(), |
157 | err[0]); | |
8537d55a NR |
158 | } |
159 | ||
160 | assertEquals("ping", sent[0]); | |
161 | assertEquals("pong", recd[0]); | |
162 | } | |
163 | }); | |
164 | ||
fbcc2a2a | 165 | addTest(new TestCase("Multiple exchanges " + skey) { |
8537d55a NR |
166 | final String[] sent = new String[3]; |
167 | final String[] recd = new String[3]; | |
168 | final Exception[] err = new Exception[1]; | |
169 | ||
170 | @Override | |
171 | public void test() throws Exception { | |
8468bb79 | 172 | ServerString server = new ServerString(this.getName(), 0, key) { |
8537d55a NR |
173 | @Override |
174 | protected String onRequest( | |
08f80ac5 | 175 | ConnectActionServerString action, String data) |
8537d55a NR |
176 | throws Exception { |
177 | sent[0] = data; | |
178 | action.send("pong"); | |
179 | sent[1] = action.rec(); | |
180 | return "pong2"; | |
181 | } | |
182 | ||
183 | @Override | |
184 | protected void onError(Exception e) { | |
8537d55a NR |
185 | err[0] = e; |
186 | } | |
187 | }; | |
188 | ||
189 | int port = server.getPort(); | |
190 | ||
191 | server.start(); | |
192 | ||
193 | ServerBridge br = null; | |
194 | if (bridge) { | |
8468bb79 | 195 | br = new ServerBridge(0, key, "", port, key); |
f4053377 | 196 | br.setTraceHandler(null); |
8537d55a NR |
197 | port = br.getPort(); |
198 | br.start(); | |
199 | } | |
200 | ||
201 | try { | |
202 | try { | |
8468bb79 | 203 | new ConnectActionClientString(null, port, key) { |
8537d55a | 204 | @Override |
08f80ac5 | 205 | public void action() throws Exception { |
8537d55a NR |
206 | recd[0] = send("ping"); |
207 | recd[1] = send("ping2"); | |
208 | } | |
209 | }.connect(); | |
210 | } finally { | |
211 | server.stop(); | |
212 | } | |
213 | } finally { | |
214 | if (br != null) { | |
215 | br.stop(); | |
216 | } | |
217 | } | |
218 | ||
219 | if (err[0] != null) { | |
08f80ac5 NR |
220 | fail("An exception was thrown: " + err[0].getMessage(), |
221 | err[0]); | |
8537d55a NR |
222 | } |
223 | ||
224 | assertEquals("ping", sent[0]); | |
225 | assertEquals("pong", recd[0]); | |
226 | assertEquals("ping2", sent[1]); | |
227 | assertEquals("pong2", recd[1]); | |
228 | } | |
229 | }); | |
230 | ||
fbcc2a2a | 231 | addTest(new TestCase("Multiple call from client " + skey) { |
8537d55a NR |
232 | final String[] sent = new String[3]; |
233 | final String[] recd = new String[3]; | |
234 | final Exception[] err = new Exception[1]; | |
235 | ||
236 | @Override | |
237 | public void test() throws Exception { | |
8468bb79 | 238 | ServerString server = new ServerString(this.getName(), 0, key) { |
8537d55a NR |
239 | @Override |
240 | protected String onRequest( | |
08f80ac5 | 241 | ConnectActionServerString action, String data) |
8537d55a NR |
242 | throws Exception { |
243 | sent[Integer.parseInt(data)] = data; | |
244 | return "" + (Integer.parseInt(data) * 2); | |
245 | } | |
246 | ||
247 | @Override | |
248 | protected void onError(Exception e) { | |
8537d55a NR |
249 | err[0] = e; |
250 | } | |
251 | }; | |
252 | ||
253 | int port = server.getPort(); | |
254 | ||
255 | server.start(); | |
256 | ||
257 | ServerBridge br = null; | |
258 | if (bridge) { | |
8468bb79 | 259 | br = new ServerBridge(0, key, "", port, key); |
f4053377 | 260 | br.setTraceHandler(null); |
8537d55a NR |
261 | port = br.getPort(); |
262 | br.start(); | |
263 | } | |
264 | ||
265 | try { | |
266 | try { | |
8468bb79 | 267 | new ConnectActionClientString(null, port, key) { |
8537d55a | 268 | @Override |
08f80ac5 | 269 | public void action() throws Exception { |
8537d55a NR |
270 | for (int i = 0; i < 3; i++) { |
271 | recd[i] = send("" + i); | |
272 | } | |
273 | } | |
274 | }.connect(); | |
275 | } finally { | |
276 | server.stop(); | |
277 | } | |
278 | } finally { | |
279 | if (br != null) { | |
280 | br.stop(); | |
281 | } | |
282 | } | |
283 | ||
284 | if (err[0] != null) { | |
08f80ac5 NR |
285 | fail("An exception was thrown: " + err[0].getMessage(), |
286 | err[0]); | |
8537d55a NR |
287 | } |
288 | ||
289 | assertEquals("0", sent[0]); | |
290 | assertEquals("0", recd[0]); | |
291 | assertEquals("1", sent[1]); | |
292 | assertEquals("2", recd[1]); | |
293 | assertEquals("2", sent[2]); | |
294 | assertEquals("4", recd[2]); | |
295 | } | |
296 | }); | |
8537d55a NR |
297 | } |
298 | ||
fbcc2a2a NR |
299 | private SerialServerTest(final String[] args, final String key, |
300 | final String skey, final boolean bridge, final String sbridge, | |
301 | final Object title) { | |
302 | ||
303 | super(title + " " + skey + sbridge, args); | |
8537d55a | 304 | |
fbcc2a2a | 305 | addTest(new TestCase("Simple connection " + skey) { |
8537d55a NR |
306 | @Override |
307 | public void test() throws Exception { | |
308 | final Object[] rec = new Object[1]; | |
309 | ||
8468bb79 | 310 | ServerObject server = new ServerObject(this.getName(), 0, key) { |
8537d55a NR |
311 | @Override |
312 | protected Object onRequest( | |
08f80ac5 | 313 | ConnectActionServerObject action, Object data) |
8537d55a NR |
314 | throws Exception { |
315 | return null; | |
316 | } | |
d827da2a NR |
317 | |
318 | @Override | |
319 | protected void onError(Exception e) { | |
320 | } | |
8537d55a NR |
321 | }; |
322 | ||
323 | int port = server.getPort(); | |
324 | assertEquals("A port should have been assigned", true, port > 0); | |
325 | ||
326 | server.start(); | |
327 | ||
328 | ServerBridge br = null; | |
329 | if (bridge) { | |
8468bb79 | 330 | br = new ServerBridge(0, key, "", port, key); |
f4053377 | 331 | br.setTraceHandler(null); |
8537d55a NR |
332 | port = br.getPort(); |
333 | br.start(); | |
334 | } | |
335 | ||
336 | try { | |
337 | try { | |
8468bb79 | 338 | new ConnectActionClientObject(null, port, key) { |
8537d55a | 339 | @Override |
08f80ac5 | 340 | public void action() throws Exception { |
8537d55a NR |
341 | rec[0] = true; |
342 | } | |
d827da2a NR |
343 | |
344 | @Override | |
345 | protected void onError(Exception e) { | |
346 | } | |
8537d55a NR |
347 | }.connect(); |
348 | } finally { | |
349 | server.stop(); | |
350 | } | |
351 | } finally { | |
352 | if (br != null) { | |
353 | br.stop(); | |
354 | } | |
355 | } | |
356 | ||
357 | assertNotNull("The client action was not run", rec[0]); | |
358 | assertEquals(true, (boolean) ((Boolean) rec[0])); | |
359 | } | |
360 | }); | |
361 | ||
fbcc2a2a | 362 | addTest(new TestCase("Simple exchange " + skey) { |
8537d55a NR |
363 | final Object[] sent = new Object[1]; |
364 | final Object[] recd = new Object[1]; | |
365 | final Exception[] err = new Exception[1]; | |
366 | ||
367 | @Override | |
368 | public void test() throws Exception { | |
8468bb79 | 369 | ServerObject server = new ServerObject(this.getName(), 0, key) { |
8537d55a NR |
370 | @Override |
371 | protected Object onRequest( | |
08f80ac5 | 372 | ConnectActionServerObject action, Object data) |
8537d55a NR |
373 | throws Exception { |
374 | sent[0] = data; | |
375 | return "pong"; | |
376 | } | |
377 | ||
378 | @Override | |
379 | protected void onError(Exception e) { | |
8537d55a NR |
380 | err[0] = e; |
381 | } | |
382 | }; | |
383 | ||
384 | int port = server.getPort(); | |
385 | ||
386 | server.start(); | |
387 | ||
388 | ServerBridge br = null; | |
389 | if (bridge) { | |
8468bb79 | 390 | br = new ServerBridge(0, key, "", port, key); |
f4053377 | 391 | br.setTraceHandler(null); |
8537d55a NR |
392 | port = br.getPort(); |
393 | br.start(); | |
394 | } | |
395 | ||
396 | try { | |
397 | try { | |
8468bb79 | 398 | new ConnectActionClientObject(null, port, key) { |
8537d55a | 399 | @Override |
08f80ac5 | 400 | public void action() throws Exception { |
8537d55a NR |
401 | recd[0] = send("ping"); |
402 | } | |
403 | }.connect(); | |
404 | } finally { | |
405 | server.stop(); | |
406 | } | |
407 | } finally { | |
408 | if (br != null) { | |
409 | br.stop(); | |
410 | } | |
411 | } | |
412 | ||
413 | if (err[0] != null) { | |
08f80ac5 NR |
414 | fail("An exception was thrown: " + err[0].getMessage(), |
415 | err[0]); | |
8537d55a NR |
416 | } |
417 | ||
418 | assertEquals("ping", sent[0]); | |
419 | assertEquals("pong", recd[0]); | |
420 | } | |
421 | }); | |
422 | ||
fbcc2a2a | 423 | addTest(new TestCase("Multiple exchanges " + skey) { |
8537d55a NR |
424 | final Object[] sent = new Object[3]; |
425 | final Object[] recd = new Object[3]; | |
426 | final Exception[] err = new Exception[1]; | |
427 | ||
428 | @Override | |
429 | public void test() throws Exception { | |
8468bb79 | 430 | ServerObject server = new ServerObject(this.getName(), 0, key) { |
8537d55a NR |
431 | @Override |
432 | protected Object onRequest( | |
08f80ac5 | 433 | ConnectActionServerObject action, Object data) |
8537d55a NR |
434 | throws Exception { |
435 | sent[0] = data; | |
436 | action.send("pong"); | |
437 | sent[1] = action.rec(); | |
438 | return "pong2"; | |
439 | } | |
440 | ||
441 | @Override | |
442 | protected void onError(Exception e) { | |
8537d55a NR |
443 | err[0] = e; |
444 | } | |
445 | }; | |
446 | ||
447 | int port = server.getPort(); | |
448 | ||
449 | server.start(); | |
450 | ||
451 | ServerBridge br = null; | |
452 | if (bridge) { | |
8468bb79 | 453 | br = new ServerBridge(0, key, "", port, key); |
f4053377 | 454 | br.setTraceHandler(null); |
8537d55a NR |
455 | port = br.getPort(); |
456 | br.start(); | |
457 | } | |
458 | ||
459 | try { | |
460 | try { | |
8468bb79 | 461 | new ConnectActionClientObject(null, port, key) { |
8537d55a | 462 | @Override |
08f80ac5 | 463 | public void action() throws Exception { |
8537d55a NR |
464 | recd[0] = send("ping"); |
465 | recd[1] = send("ping2"); | |
466 | } | |
467 | }.connect(); | |
468 | } finally { | |
469 | server.stop(); | |
470 | } | |
471 | } finally { | |
472 | if (br != null) { | |
473 | br.stop(); | |
474 | } | |
475 | } | |
476 | ||
477 | if (err[0] != null) { | |
08f80ac5 NR |
478 | fail("An exception was thrown: " + err[0].getMessage(), |
479 | err[0]); | |
8537d55a NR |
480 | } |
481 | ||
482 | assertEquals("ping", sent[0]); | |
483 | assertEquals("pong", recd[0]); | |
484 | assertEquals("ping2", sent[1]); | |
485 | assertEquals("pong2", recd[1]); | |
486 | } | |
487 | }); | |
488 | ||
fbcc2a2a | 489 | addTest(new TestCase("Object array of URLs " + skey) { |
f4053377 NR |
490 | final Object[] sent = new Object[1]; |
491 | final Object[] recd = new Object[1]; | |
492 | final Exception[] err = new Exception[1]; | |
493 | ||
494 | @Override | |
495 | public void test() throws Exception { | |
8468bb79 | 496 | ServerObject server = new ServerObject(this.getName(), 0, key) { |
f4053377 NR |
497 | @Override |
498 | protected Object onRequest( | |
08f80ac5 | 499 | ConnectActionServerObject action, Object data) |
f4053377 NR |
500 | throws Exception { |
501 | sent[0] = data; | |
502 | return new Object[] { "ACK" }; | |
503 | } | |
504 | ||
505 | @Override | |
506 | protected void onError(Exception e) { | |
507 | err[0] = e; | |
508 | } | |
509 | }; | |
510 | ||
511 | int port = server.getPort(); | |
512 | ||
513 | server.start(); | |
514 | ||
515 | ServerBridge br = null; | |
516 | if (bridge) { | |
8468bb79 | 517 | br = new ServerBridge(0, key, "", port, key); |
f4053377 NR |
518 | br.setTraceHandler(null); |
519 | port = br.getPort(); | |
520 | br.start(); | |
521 | } | |
522 | ||
523 | try { | |
524 | try { | |
8468bb79 | 525 | new ConnectActionClientObject(null, port, key) { |
f4053377 | 526 | @Override |
08f80ac5 | 527 | public void action() throws Exception { |
f4053377 NR |
528 | recd[0] = send(new Object[] { |
529 | "key", | |
530 | new URL( | |
531 | "https://example.com/from_client"), | |
532 | "https://example.com/from_client" }); | |
533 | } | |
534 | }.connect(); | |
535 | } finally { | |
536 | server.stop(); | |
537 | } | |
538 | } finally { | |
539 | if (br != null) { | |
540 | br.stop(); | |
541 | } | |
542 | } | |
543 | ||
544 | if (err[0] != null) { | |
08f80ac5 NR |
545 | fail("An exception was thrown: " + err[0].getMessage(), |
546 | err[0]); | |
f4053377 NR |
547 | } |
548 | ||
549 | Object[] sento = (Object[]) (sent[0]); | |
550 | Object[] recdo = (Object[]) (recd[0]); | |
551 | ||
552 | assertEquals("key", sento[0]); | |
553 | assertEquals("https://example.com/from_client", | |
554 | ((URL) sento[1]).toString()); | |
555 | assertEquals("https://example.com/from_client", sento[2]); | |
556 | assertEquals("ACK", recdo[0]); | |
557 | } | |
558 | }); | |
559 | ||
fbcc2a2a | 560 | addTest(new TestCase("Multiple call from client " + skey) { |
8537d55a NR |
561 | final Object[] sent = new Object[3]; |
562 | final Object[] recd = new Object[3]; | |
563 | final Exception[] err = new Exception[1]; | |
564 | ||
565 | @Override | |
566 | public void test() throws Exception { | |
8468bb79 | 567 | ServerObject server = new ServerObject(this.getName(), 0, key) { |
8537d55a NR |
568 | @Override |
569 | protected Object onRequest( | |
08f80ac5 | 570 | ConnectActionServerObject action, Object data) |
8537d55a NR |
571 | throws Exception { |
572 | sent[(Integer) data] = data; | |
573 | return ((Integer) data) * 2; | |
574 | } | |
575 | ||
576 | @Override | |
577 | protected void onError(Exception e) { | |
8537d55a NR |
578 | err[0] = e; |
579 | } | |
580 | }; | |
581 | ||
582 | int port = server.getPort(); | |
583 | ||
584 | server.start(); | |
585 | ||
586 | ServerBridge br = null; | |
587 | if (bridge) { | |
8468bb79 | 588 | br = new ServerBridge(0, key, "", port, key); |
f4053377 | 589 | br.setTraceHandler(null); |
8537d55a NR |
590 | port = br.getPort(); |
591 | br.start(); | |
592 | } | |
593 | ||
594 | try { | |
595 | try { | |
8468bb79 | 596 | new ConnectActionClientObject(null, port, key) { |
8537d55a | 597 | @Override |
08f80ac5 | 598 | public void action() throws Exception { |
8537d55a NR |
599 | for (int i = 0; i < 3; i++) { |
600 | recd[i] = send(i); | |
601 | } | |
602 | } | |
603 | }.connect(); | |
604 | } finally { | |
605 | server.stop(); | |
606 | } | |
607 | } finally { | |
608 | if (br != null) { | |
609 | br.stop(); | |
610 | } | |
611 | } | |
612 | ||
613 | if (err[0] != null) { | |
08f80ac5 NR |
614 | fail("An exception was thrown: " + err[0].getMessage(), |
615 | err[0]); | |
8537d55a NR |
616 | } |
617 | ||
618 | assertEquals(0, sent[0]); | |
619 | assertEquals(0, recd[0]); | |
620 | assertEquals(1, sent[1]); | |
621 | assertEquals(2, recd[1]); | |
622 | assertEquals(2, sent[2]); | |
623 | assertEquals(4, recd[2]); | |
624 | } | |
625 | }); | |
8537d55a NR |
626 | } |
627 | } |