44d26da5e9c438e3d1dfd5bfdc755c7262894f5a
[nikiroo-utils.git] / src / be / nikiroo / utils / test_code / SerialServerTest.java
1 package be.nikiroo.utils.test_code;
2
3 import java.net.URL;
4
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;
12 import be.nikiroo.utils.test.TestCase;
13 import be.nikiroo.utils.test.TestLauncher;
14
15 class SerialServerTest extends TestLauncher {
16 public SerialServerTest(String[] args) {
17 super("SerialServer test", args);
18
19 for (String key : new String[] { null,
20 "some super secret encryption key" }) {
21 // TODO: re-add bridge
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
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(
55 ConnectActionServerString action, String data)
56 throws Exception {
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 {
85 new ConnectActionClientObject(null, port, key) {
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 });
104
105 addTest(new TestCase("Simple exchange " + skey) {
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 {
112 ServerString server = new ServerString(this.getName(), 0, key) {
113 @Override
114 protected String onRequest(
115 ConnectActionServerString action, String data)
116 throws Exception {
117 sent[0] = data;
118 return "pong";
119 }
120
121 @Override
122 protected void onError(Exception e) {
123 err[0] = e;
124 }
125 };
126
127 int port = server.getPort();
128
129 server.start();
130
131 ServerBridge br = null;
132 if (bridge) {
133 br = new ServerBridge(0, key, "", port, key);
134 br.setTraceHandler(null);
135 port = br.getPort();
136 br.start();
137 }
138
139 try {
140 try {
141 new ConnectActionClientString(null, port, key) {
142 @Override
143 public void action() throws Exception {
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) {
157 fail("An exception was thrown: " + err[0].getMessage(),
158 err[0]);
159 }
160
161 assertEquals("ping", sent[0]);
162 assertEquals("pong", recd[0]);
163 }
164 });
165
166 addTest(new TestCase("Multiple exchanges " + skey) {
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 {
173 ServerString server = new ServerString(this.getName(), 0, key) {
174 @Override
175 protected String onRequest(
176 ConnectActionServerString action, String data)
177 throws Exception {
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) {
186 err[0] = e;
187 }
188 };
189
190 int port = server.getPort();
191
192 server.start();
193
194 ServerBridge br = null;
195 if (bridge) {
196 br = new ServerBridge(0, key, "", port, key);
197 br.setTraceHandler(null);
198 port = br.getPort();
199 br.start();
200 }
201
202 try {
203 try {
204 new ConnectActionClientString(null, port, key) {
205 @Override
206 public void action() throws Exception {
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) {
221 fail("An exception was thrown: " + err[0].getMessage(),
222 err[0]);
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
232 addTest(new TestCase("Multiple call from client " + skey) {
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 {
239 ServerString server = new ServerString(this.getName(), 0, key) {
240 @Override
241 protected String onRequest(
242 ConnectActionServerString action, String data)
243 throws Exception {
244 sent[Integer.parseInt(data)] = data;
245 return "" + (Integer.parseInt(data) * 2);
246 }
247
248 @Override
249 protected void onError(Exception e) {
250 err[0] = e;
251 }
252 };
253
254 int port = server.getPort();
255
256 server.start();
257
258 ServerBridge br = null;
259 if (bridge) {
260 br = new ServerBridge(0, key, "", port, key);
261 br.setTraceHandler(null);
262 port = br.getPort();
263 br.start();
264 }
265
266 try {
267 try {
268 new ConnectActionClientString(null, port, key) {
269 @Override
270 public void action() throws Exception {
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) {
286 fail("An exception was thrown: " + err[0].getMessage(),
287 err[0]);
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 });
298 }
299
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);
305
306 addTest(new TestCase("Simple connection " + skey) {
307 @Override
308 public void test() throws Exception {
309 final Object[] rec = new Object[1];
310
311 ServerObject server = new ServerObject(this.getName(), 0, key) {
312 @Override
313 protected Object onRequest(
314 ConnectActionServerObject action, Object data)
315 throws Exception {
316 return null;
317 }
318
319 @Override
320 protected void onError(Exception e) {
321 }
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) {
331 br = new ServerBridge(0, key, "", port, key);
332 br.setTraceHandler(null);
333 port = br.getPort();
334 br.start();
335 }
336
337 try {
338 try {
339 new ConnectActionClientObject(null, port, key) {
340 @Override
341 public void action() throws Exception {
342 rec[0] = true;
343 }
344
345 @Override
346 protected void onError(Exception e) {
347 }
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
363 addTest(new TestCase("Simple exchange " + skey) {
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 {
370 ServerObject server = new ServerObject(this.getName(), 0, key) {
371 @Override
372 protected Object onRequest(
373 ConnectActionServerObject action, Object data)
374 throws Exception {
375 sent[0] = data;
376 return "pong";
377 }
378
379 @Override
380 protected void onError(Exception e) {
381 err[0] = e;
382 }
383 };
384
385 int port = server.getPort();
386
387 server.start();
388
389 ServerBridge br = null;
390 if (bridge) {
391 br = new ServerBridge(0, key, "", port, key);
392 br.setTraceHandler(null);
393 port = br.getPort();
394 br.start();
395 }
396
397 try {
398 try {
399 new ConnectActionClientObject(null, port, key) {
400 @Override
401 public void action() throws Exception {
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) {
415 fail("An exception was thrown: " + err[0].getMessage(),
416 err[0]);
417 }
418
419 assertEquals("ping", sent[0]);
420 assertEquals("pong", recd[0]);
421 }
422 });
423
424 addTest(new TestCase("Multiple exchanges " + skey) {
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 {
431 ServerObject server = new ServerObject(this.getName(), 0, key) {
432 @Override
433 protected Object onRequest(
434 ConnectActionServerObject action, Object data)
435 throws Exception {
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) {
444 err[0] = e;
445 }
446 };
447
448 int port = server.getPort();
449
450 server.start();
451
452 ServerBridge br = null;
453 if (bridge) {
454 br = new ServerBridge(0, key, "", port, key);
455 br.setTraceHandler(null);
456 port = br.getPort();
457 br.start();
458 }
459
460 try {
461 try {
462 new ConnectActionClientObject(null, port, key) {
463 @Override
464 public void action() throws Exception {
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) {
479 fail("An exception was thrown: " + err[0].getMessage(),
480 err[0]);
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
490 addTest(new TestCase("Object array of URLs " + skey) {
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 {
497 ServerObject server = new ServerObject(this.getName(), 0, key) {
498 @Override
499 protected Object onRequest(
500 ConnectActionServerObject action, Object data)
501 throws Exception {
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) {
518 br = new ServerBridge(0, key, "", port, key);
519 br.setTraceHandler(null);
520 port = br.getPort();
521 br.start();
522 }
523
524 try {
525 try {
526 new ConnectActionClientObject(null, port, key) {
527 @Override
528 public void action() throws Exception {
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) {
546 fail("An exception was thrown: " + err[0].getMessage(),
547 err[0]);
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
561 addTest(new TestCase("Multiple call from client " + skey) {
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 {
568 ServerObject server = new ServerObject(this.getName(), 0, key) {
569 @Override
570 protected Object onRequest(
571 ConnectActionServerObject action, Object data)
572 throws Exception {
573 sent[(Integer) data] = data;
574 return ((Integer) data) * 2;
575 }
576
577 @Override
578 protected void onError(Exception e) {
579 err[0] = e;
580 }
581 };
582
583 int port = server.getPort();
584
585 server.start();
586
587 ServerBridge br = null;
588 if (bridge) {
589 br = new ServerBridge(0, key, "", port, key);
590 br.setTraceHandler(null);
591 port = br.getPort();
592 br.start();
593 }
594
595 try {
596 try {
597 new ConnectActionClientObject(null, port, key) {
598 @Override
599 public void action() throws Exception {
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) {
615 fail("An exception was thrown: " + err[0].getMessage(),
616 err[0]);
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 });
627 }
628 }