1 package be
.nikiroo
.utils
.test
;
3 import be
.nikiroo
.utils
.Version
;
4 import be
.nikiroo
.utils
.serial
.Exporter
;
5 import be
.nikiroo
.utils
.serial
.Importer
;
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
.ServerObject
;
11 import be
.nikiroo
.utils
.serial
.server
.ServerString
;
13 class SerialTest
extends TestLauncher
{
14 private SerialTest() {
15 super("Serial test", null);
18 private TestLauncher
createServerStringTestCases(final String
[] args
,
20 final String ssls
= (ssl ?
"(ssl)" : "(plain text)");
21 TestLauncher series
= new TestLauncher("Client/Server " + ssls
, args
);
23 series
.addTest(new TestCase("Simple connection " + ssls
) {
25 public void test() throws Exception
{
26 final String
[] rec
= new String
[1];
28 ServerString server
= new ServerString(this.getName(), 0, ssl
) {
30 protected String
onRequest(
31 ConnectActionServerString action
,
32 Version clientVersion
, String data
)
38 assertEquals("A port should have been assigned", true,
39 server
.getPort() > 0);
44 new ConnectActionClientObject(null, server
.getPort(), ssl
) {
46 public void action(Version serverVersion
)
55 assertNotNull("The client action was not run", rec
[0]);
56 assertEquals("ok", rec
[0]);
60 series
.addTest(new TestCase("Simple exchange " + ssls
) {
61 final String
[] sent
= new String
[1];
62 final String
[] recd
= new String
[1];
63 final Exception
[] err
= new Exception
[1];
66 public void test() throws Exception
{
67 ServerString server
= new ServerString(this.getName(), 0, ssl
) {
69 protected String
onRequest(
70 ConnectActionServerString action
,
71 Version clientVersion
, String data
)
78 protected void onError(Exception e
) {
87 new ConnectActionClientString(null, server
.getPort(), ssl
) {
89 public void action(Version serverVersion
)
91 recd
[0] = send("ping");
99 fail("An exception was thrown: " + err
[0].getMessage());
102 assertEquals("ping", sent
[0]);
103 assertEquals("pong", recd
[0]);
107 series
.addTest(new TestCase("Multiple exchanges " + ssls
) {
108 final String
[] sent
= new String
[3];
109 final String
[] recd
= new String
[3];
110 final Exception
[] err
= new Exception
[1];
113 public void test() throws Exception
{
114 ServerString server
= new ServerString(this.getName(), 0, ssl
) {
116 protected String
onRequest(
117 ConnectActionServerString action
,
118 Version clientVersion
, String data
)
122 sent
[1] = action
.rec();
127 protected void onError(Exception e
) {
136 new ConnectActionClientString(null, server
.getPort(), ssl
) {
138 public void action(Version serverVersion
)
140 recd
[0] = send("ping");
141 recd
[1] = send("ping2");
148 if (err
[0] != null) {
149 fail("An exception was thrown: " + err
[0].getMessage());
152 assertEquals("ping", sent
[0]);
153 assertEquals("pong", recd
[0]);
154 assertEquals("ping2", sent
[1]);
155 assertEquals("pong2", recd
[1]);
159 series
.addTest(new TestCase("Multiple call from client " + ssls
) {
160 final String
[] sent
= new String
[3];
161 final String
[] recd
= new String
[3];
162 final Exception
[] err
= new Exception
[1];
165 public void test() throws Exception
{
166 ServerString server
= new ServerString(this.getName(), 0, ssl
) {
168 protected String
onRequest(
169 ConnectActionServerString action
,
170 Version clientVersion
, String data
)
172 sent
[Integer
.parseInt(data
)] = data
;
173 return "" + (Integer
.parseInt(data
) * 2);
177 protected void onError(Exception e
) {
186 new ConnectActionClientString(null, server
.getPort(), ssl
) {
188 public void action(Version serverVersion
)
190 for (int i
= 0; i
< 3; i
++) {
191 recd
[i
] = send("" + i
);
199 if (err
[0] != null) {
200 fail("An exception was thrown: " + err
[0].getMessage());
203 assertEquals("0", sent
[0]);
204 assertEquals("0", recd
[0]);
205 assertEquals("1", sent
[1]);
206 assertEquals("2", recd
[1]);
207 assertEquals("2", sent
[2]);
208 assertEquals("4", recd
[2]);
215 private TestLauncher
createServerObjectTestCases(final String
[] args
,
217 final String ssls
= (ssl ?
"(ssl)" : "(plain text)");
218 TestLauncher series
= new TestLauncher("Client/Server " + ssls
, args
);
220 series
.addTest(new TestCase("Simple connection " + ssls
) {
222 public void test() throws Exception
{
223 final Object
[] rec
= new Object
[1];
225 ServerObject server
= new ServerObject(this.getName(), 0, ssl
) {
227 protected Object
onRequest(
228 ConnectActionServerObject action
,
229 Version clientVersion
, Object data
)
235 assertEquals("A port should have been assigned", true,
236 server
.getPort() > 0);
241 new ConnectActionClientObject(null, server
.getPort(), ssl
) {
243 public void action(Version serverVersion
)
252 assertNotNull("The client action was not run", rec
[0]);
253 assertEquals(true, (boolean) ((Boolean
) rec
[0]));
257 series
.addTest(new TestCase("Simple exchange " + ssls
) {
258 final Object
[] sent
= new Object
[1];
259 final Object
[] recd
= new Object
[1];
260 final Exception
[] err
= new Exception
[1];
263 public void test() throws Exception
{
264 ServerObject server
= new ServerObject(this.getName(), 0, ssl
) {
266 protected Object
onRequest(
267 ConnectActionServerObject action
,
268 Version clientVersion
, Object data
)
275 protected void onError(Exception e
) {
284 new ConnectActionClientObject(null, server
.getPort(), ssl
) {
286 public void action(Version serverVersion
)
288 recd
[0] = send("ping");
295 if (err
[0] != null) {
296 fail("An exception was thrown: " + err
[0].getMessage());
299 assertEquals("ping", sent
[0]);
300 assertEquals("pong", recd
[0]);
304 series
.addTest(new TestCase("Multiple exchanges " + ssls
) {
305 final Object
[] sent
= new Object
[3];
306 final Object
[] recd
= new Object
[3];
307 final Exception
[] err
= new Exception
[1];
310 public void test() throws Exception
{
311 ServerObject server
= new ServerObject(this.getName(), 0, ssl
) {
313 protected Object
onRequest(
314 ConnectActionServerObject action
,
315 Version clientVersion
, Object data
)
319 sent
[1] = action
.rec();
324 protected void onError(Exception e
) {
333 new ConnectActionClientObject(null, server
.getPort(), ssl
) {
335 public void action(Version serverVersion
)
337 recd
[0] = send("ping");
338 recd
[1] = send("ping2");
345 if (err
[0] != null) {
346 fail("An exception was thrown: " + err
[0].getMessage());
349 assertEquals("ping", sent
[0]);
350 assertEquals("pong", recd
[0]);
351 assertEquals("ping2", sent
[1]);
352 assertEquals("pong2", recd
[1]);
356 series
.addTest(new TestCase("Multiple call from client " + ssls
) {
357 final Object
[] sent
= new Object
[3];
358 final Object
[] recd
= new Object
[3];
359 final Exception
[] err
= new Exception
[1];
362 public void test() throws Exception
{
363 ServerObject server
= new ServerObject(this.getName(), 0, ssl
) {
365 protected Object
onRequest(
366 ConnectActionServerObject action
,
367 Version clientVersion
, Object data
)
369 sent
[(Integer
) data
] = data
;
370 return ((Integer
) data
) * 2;
374 protected void onError(Exception e
) {
383 new ConnectActionClientObject(null, server
.getPort(), ssl
) {
385 public void action(Version serverVersion
)
387 for (int i
= 0; i
< 3; i
++) {
396 if (err
[0] != null) {
397 fail("An exception was thrown: " + err
[0].getMessage());
400 assertEquals(0, sent
[0]);
401 assertEquals(0, recd
[0]);
402 assertEquals(1, sent
[1]);
403 assertEquals(2, recd
[1]);
404 assertEquals(2, sent
[2]);
405 assertEquals(4, recd
[2]);
412 public SerialTest(String
[] args
) {
413 super("Serial test", args
);
415 addSeries(createServerObjectTestCases(args
, false));
417 addSeries(createServerObjectTestCases(args
, true));
419 addSeries(createServerStringTestCases(args
, false));
421 addSeries(createServerStringTestCases(args
, true));
423 addTest(new TestCase("Simple class Import/Export") {
425 public void test() throws Exception
{
426 Data data
= new Data(42);
427 String encoded
= new Exporter().append(data
).toString(false);
428 Object redata
= new Importer().read(encoded
).getValue();
429 String reencoded
= new Exporter().append(redata
)
432 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
433 reencoded
.replaceAll("@[0-9]*", "@REF"));
437 addTest(new TestCase("Import/Export with nested objects") {
439 public void test() throws Exception
{
440 Data data
= new DataObject(new Data(21));
441 String encoded
= new Exporter().append(data
).toString(false);
442 Object redata
= new Importer().read(encoded
).getValue();
443 String reencoded
= new Exporter().append(redata
)
446 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
447 reencoded
.replaceAll("@[0-9]*", "@REF"));
451 addTest(new TestCase("Import/Export with nested objects forming a loop") {
453 public void test() throws Exception
{
454 DataLoop data
= new DataLoop("looping");
455 data
.next
= new DataLoop("level 2");
456 data
.next
.next
= data
;
458 String encoded
= new Exporter().append(data
).toString(false);
459 Object redata
= new Importer().read(encoded
).getValue();
460 String reencoded
= new Exporter().append(redata
)
463 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
464 reencoded
.replaceAll("@[0-9]*", "@REF"));
468 addTest(new TestCase("Array in Object Import/Export") {
470 public void test() throws Exception
{
471 Object data
= new DataArray();// new String[] { "un", "deux" };
472 String encoded
= new Exporter().append(data
).toString(false);
473 Object redata
= new Importer().read(encoded
).getValue();
474 String reencoded
= new Exporter().append(redata
)
477 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
478 reencoded
.replaceAll("@[0-9]*", "@REF"));
482 addTest(new TestCase("Array Import/Export") {
484 public void test() throws Exception
{
485 Object data
= new String
[] { "un", "deux" };
486 String encoded
= new Exporter().append(data
).toString(false);
487 Object redata
= new Importer().read(encoded
).getValue();
488 String reencoded
= new Exporter().append(redata
)
491 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
492 reencoded
.replaceAll("@[0-9]*", "@REF"));
496 addTest(new TestCase("Enum Import/Export") {
498 public void test() throws Exception
{
499 Object data
= EnumToSend
.FANFAN
;
500 String encoded
= new Exporter().append(data
).toString(false);
501 Object redata
= new Importer().read(encoded
).getValue();
502 String reencoded
= new Exporter().append(redata
)
505 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
506 reencoded
.replaceAll("@[0-9]*", "@REF"));
512 public String
[] data
= new String
[] { "un", "deux" };
515 @SuppressWarnings("unused")
522 public Data(int value
) {
527 @SuppressWarnings("unused")
528 class DataObject
extends Data
{
531 @SuppressWarnings("synthetic-access")
532 private DataObject() {
535 @SuppressWarnings("synthetic-access")
536 public DataObject(Data data
) {
541 @SuppressWarnings("unused")
542 class DataLoop
extends Data
{
543 public DataLoop next
;
544 private String value
;
546 @SuppressWarnings("synthetic-access")
550 @SuppressWarnings("synthetic-access")
551 public DataLoop(String value
) {