1 package be
.nikiroo
.utils
.test
;
3 import be
.nikiroo
.utils
.TraceHandler
;
4 import be
.nikiroo
.utils
.Version
;
5 import be
.nikiroo
.utils
.serial
.ConnectActionClient
;
6 import be
.nikiroo
.utils
.serial
.ConnectActionServer
;
7 import be
.nikiroo
.utils
.serial
.Exporter
;
8 import be
.nikiroo
.utils
.serial
.Importer
;
9 import be
.nikiroo
.utils
.serial
.Server
;
11 class SerialTest
extends TestLauncher
{
12 private SerialTest() {
13 super("Serial test", null);
16 private TestLauncher
createServerTestCases(final String
[] args
,
18 final String ssls
= (ssl ?
"(ssl)" : "(plain text)");
19 TestLauncher series
= new TestLauncher("Client/Server " + ssls
, args
);
21 series
.addTest(new TestCase("Simple connection " + ssls
) {
23 public void test() throws Exception
{
24 final Object
[] rec
= new Object
[1];
26 Server server
= new Server(this.getName(), 0, ssl
) {
28 protected Object
onRequest(ConnectActionServer action
,
29 Version clientVersion
, Object data
)
35 assertEquals("A port should have been assigned", true,
36 server
.getPort() > 0);
39 server
.setTraceHandler(new TraceHandler(true, true, true));
44 new ConnectActionClient(null, server
.getPort(), ssl
) {
46 public void action(Version serverVersion
)
55 assertNotNull("The client action was not run", rec
[0]);
56 assertEquals(true, (boolean) ((Boolean
) rec
[0]));
60 series
.addTest(new TestCase("Simple exchange " + ssls
) {
61 final Object
[] sent
= new Object
[1];
62 final Object
[] recd
= new Object
[1];
63 final Exception
[] err
= new Exception
[1];
66 public void test() throws Exception
{
67 Server server
= new Server(this.getName(), 0, ssl
) {
69 protected Object
onRequest(ConnectActionServer action
,
70 Version clientVersion
, Object data
)
77 protected void onError(Exception e
) {
86 new ConnectActionClient(null, server
.getPort(), ssl
) {
88 public void action(Version serverVersion
)
90 recd
[0] = send("ping");
98 fail("An exception was thrown: " + err
[0].getMessage());
101 assertEquals("ping", sent
[0]);
102 assertEquals("pong", recd
[0]);
106 series
.addTest(new TestCase("Multiple exchanges " + ssls
) {
107 final Object
[] sent
= new Object
[3];
108 final Object
[] recd
= new Object
[3];
109 final Exception
[] err
= new Exception
[1];
112 public void test() throws Exception
{
113 Server server
= new Server(this.getName(), 0, ssl
) {
115 protected Object
onRequest(ConnectActionServer action
,
116 Version clientVersion
, Object data
)
120 sent
[1] = action
.flush();
125 protected void onError(Exception e
) {
134 new ConnectActionClient(null, server
.getPort(), ssl
) {
136 public void action(Version serverVersion
)
138 recd
[0] = send("ping");
139 recd
[1] = send("ping2");
146 if (err
[0] != null) {
147 fail("An exception was thrown: " + err
[0].getMessage());
150 assertEquals("ping", sent
[0]);
151 assertEquals("pong", recd
[0]);
152 assertEquals("ping2", sent
[1]);
153 assertEquals("pong2", recd
[1]);
157 series
.addTest(new TestCase("Multiple call from client " + ssls
) {
158 final Object
[] sent
= new Object
[3];
159 final Object
[] recd
= new Object
[3];
160 final Exception
[] err
= new Exception
[1];
163 public void test() throws Exception
{
164 Server server
= new Server(this.getName(), 0, ssl
) {
166 protected Object
onRequest(ConnectActionServer action
,
167 Version clientVersion
, Object data
)
169 sent
[(Integer
) data
] = data
;
170 return ((Integer
) data
) * 2;
174 protected void onError(Exception e
) {
183 new ConnectActionClient(null, server
.getPort(), ssl
) {
185 public void action(Version serverVersion
)
187 for (int i
= 0; i
< 3; i
++) {
196 if (err
[0] != null) {
197 fail("An exception was thrown: " + err
[0].getMessage());
200 assertEquals(0, sent
[0]);
201 assertEquals(0, recd
[0]);
202 assertEquals(1, sent
[1]);
203 assertEquals(2, recd
[1]);
204 assertEquals(2, sent
[2]);
205 assertEquals(4, recd
[2]);
212 public SerialTest(String
[] args
) {
213 super("Serial test", args
);
215 addSeries(createServerTestCases(args
, false));
217 addSeries(createServerTestCases(args
, true));
219 addTest(new TestCase("Simple class Import/Export") {
221 public void test() throws Exception
{
222 Data data
= new Data(42);
223 String encoded
= new Exporter().append(data
).toString(false);
224 Object redata
= new Importer().read(encoded
).getValue();
225 String reencoded
= new Exporter().append(redata
)
228 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
229 reencoded
.replaceAll("@[0-9]*", "@REF"));
233 addTest(new TestCase("Import/Export with nested objects") {
235 public void test() throws Exception
{
236 Data data
= new DataObject(new Data(21));
237 String encoded
= new Exporter().append(data
).toString(false);
238 Object redata
= new Importer().read(encoded
).getValue();
239 String reencoded
= new Exporter().append(redata
)
242 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
243 reencoded
.replaceAll("@[0-9]*", "@REF"));
247 addTest(new TestCase("Import/Export with nested objects forming a loop") {
249 public void test() throws Exception
{
250 DataLoop data
= new DataLoop("looping");
251 data
.next
= new DataLoop("level 2");
252 data
.next
.next
= data
;
254 String encoded
= new Exporter().append(data
).toString(false);
255 Object redata
= new Importer().read(encoded
).getValue();
256 String reencoded
= new Exporter().append(redata
)
259 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
260 reencoded
.replaceAll("@[0-9]*", "@REF"));
264 addTest(new TestCase("Array in Object Import/Export") {
266 public void test() throws Exception
{
267 Object data
= new DataArray();// new String[] { "un", "deux" };
268 String encoded
= new Exporter().append(data
).toString(false);
269 Object redata
= new Importer().read(encoded
).getValue();
270 String reencoded
= new Exporter().append(redata
)
273 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
274 reencoded
.replaceAll("@[0-9]*", "@REF"));
278 addTest(new TestCase("Array Import/Export") {
280 public void test() throws Exception
{
281 Object data
= new String
[] { "un", "deux" };
282 String encoded
= new Exporter().append(data
).toString(false);
283 Object redata
= new Importer().read(encoded
).getValue();
284 String reencoded
= new Exporter().append(redata
)
287 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
288 reencoded
.replaceAll("@[0-9]*", "@REF"));
292 addTest(new TestCase("Enum Import/Export") {
294 public void test() throws Exception
{
295 Object data
= EnumToSend
.FANFAN
;
296 String encoded
= new Exporter().append(data
).toString(false);
297 Object redata
= new Importer().read(encoded
).getValue();
298 String reencoded
= new Exporter().append(redata
)
301 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
302 reencoded
.replaceAll("@[0-9]*", "@REF"));
308 public String
[] data
= new String
[] { "un", "deux" };
311 @SuppressWarnings("unused")
318 public Data(int value
) {
323 @SuppressWarnings("unused")
324 class DataObject
extends Data
{
327 @SuppressWarnings("synthetic-access")
328 private DataObject() {
331 @SuppressWarnings("synthetic-access")
332 public DataObject(Data data
) {
337 @SuppressWarnings("unused")
338 class DataLoop
extends Data
{
339 public DataLoop next
;
340 private String value
;
342 @SuppressWarnings("synthetic-access")
346 @SuppressWarnings("synthetic-access")
347 public DataLoop(String value
) {