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