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