1 package be
.nikiroo
.utils
.test
;
3 import be
.nikiroo
.utils
.Version
;
4 import be
.nikiroo
.utils
.serial
.ConnectActionClient
;
5 import be
.nikiroo
.utils
.serial
.ConnectActionServer
;
6 import be
.nikiroo
.utils
.serial
.Exporter
;
7 import be
.nikiroo
.utils
.serial
.Importer
;
8 import be
.nikiroo
.utils
.serial
.Server
;
10 class SerialTest
extends TestLauncher
{
11 @SuppressWarnings("unused")
12 private void not_used() {
13 // TODO: test Server ; but this will at least help dependency checking
15 Server server
= new Server(0, false) {
17 protected Object
onRequest(ConnectActionServer action
,
18 Version clientVersion
, Object data
) throws Exception
{
22 } catch (Exception e
) {
26 private SerialTest() {
27 super("Serial test", null);
30 private TestCase
[] createServerTestCases(final boolean ssl
) {
31 final String ssls
= (ssl ?
"(ssl)" : "(plain text)");
32 return new TestCase
[] {
33 new TestCase("Client/Server simple connection " + ssls
) {
35 public void test() throws Exception
{
36 final Object
[] rec
= new Object
[1];
38 Server server
= new Server("testy", 0, ssl
) {
40 protected Object
onRequest(
41 ConnectActionServer action
,
42 Version clientVersion
, Object data
)
48 assertEquals("A port should have been assigned", true,
49 server
.getPort() > 0);
54 new ConnectActionClient(null, server
.getPort(), ssl
) {
56 public void action(Version serverVersion
)
65 assertNotNull("The client action was not run", rec
[0]);
66 assertEquals(true, (boolean) ((Boolean
) rec
[0]));
69 new TestCase("Client/Server simple exchange " + ssls
) {
70 final Object
[] rec
= new Object
[3];
73 public void test() throws Exception
{
74 Server server
= new Server("testy", 0, ssl
) {
76 protected Object
onRequest(
77 ConnectActionServer action
,
78 Version clientVersion
, Object data
)
85 protected void onError(Exception e
) {
91 assertEquals("A port should have been assigned", true,
92 server
.getPort() > 0);
97 new ConnectActionClient(null, server
.getPort(), ssl
) {
99 public void action(Version serverVersion
)
101 rec
[1] = send("ping");
108 if (rec
[2] != null) {
109 fail("An exception was thrown: "
110 + ((Exception
) rec
[2]).getMessage());
113 assertEquals("ping", rec
[0]);
114 assertEquals("pong", rec
[1]);
117 new TestCase("Client/Server multiple exchanges " + ssls
) {
118 final Object
[] sent
= new Object
[3];
119 final Object
[] recd
= new Object
[3];
120 final Exception
[] err
= new Exception
[1];
123 public void test() throws Exception
{
124 Server server
= new Server("testy", 0, ssl
) {
126 protected Object
onRequest(
127 ConnectActionServer action
,
128 Version clientVersion
, Object data
)
132 sent
[1] = action
.flush();
137 protected void onError(Exception e
) {
146 new ConnectActionClient(null, server
.getPort(), ssl
) {
148 public void action(Version serverVersion
)
150 recd
[0] = send("ping");
151 recd
[1] = send("ping2");
158 if (err
[0] != null) {
159 fail("An exception was thrown: "
160 + err
[0].getMessage());
163 assertEquals("ping", sent
[0]);
164 assertEquals("pong", recd
[0]);
165 assertEquals("ping2", sent
[1]);
166 assertEquals("pong2", recd
[1]);
169 new TestCase("Client/Server multiple call from client " + ssls
) {
170 final Object
[] sent
= new Object
[3];
171 final Object
[] recd
= new Object
[3];
172 final Exception
[] err
= new Exception
[1];
175 public void test() throws Exception
{
176 Server server
= new Server("testy", 0, ssl
) {
178 protected Object
onRequest(
179 ConnectActionServer action
,
180 Version clientVersion
, Object data
)
182 sent
[(Integer
) data
] = data
;
183 return ((Integer
) data
) * 2;
187 protected void onError(Exception e
) {
196 new ConnectActionClient(null, server
.getPort(), ssl
) {
198 public void action(Version serverVersion
)
200 for (int i
= 0; i
< 3; i
++) {
209 if (err
[0] != null) {
210 fail("An exception was thrown: "
211 + err
[0].getMessage());
214 assertEquals(0, sent
[0]);
215 assertEquals(0, recd
[0]);
216 assertEquals(1, sent
[1]);
217 assertEquals(2, recd
[1]);
218 assertEquals(2, sent
[2]);
219 assertEquals(4, recd
[2]);
225 public SerialTest(String
[] args
) {
226 super("Serial test", args
);
228 for (TestCase test
: createServerTestCases(false)) {
232 for (TestCase test
: createServerTestCases(true)) {
236 addTest(new TestCase("Simple class Import/Export") {
238 public void test() throws Exception
{
239 Data data
= new Data(42);
240 String encoded
= new Exporter().append(data
).toString(false);
241 Object redata
= new Importer().read(encoded
).getValue();
242 String reencoded
= new Exporter().append(redata
)
245 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
246 reencoded
.replaceAll("@[0-9]*", "@REF"));
250 addTest(new TestCase("Import/Export with nested objects") {
252 public void test() throws Exception
{
253 Data data
= new DataObject(new Data(21));
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("Import/Export with nested objects forming a loop") {
266 public void test() throws Exception
{
267 DataLoop data
= new DataLoop("looping");
268 data
.next
= new DataLoop("level 2");
269 data
.next
.next
= data
;
271 String encoded
= new Exporter().append(data
).toString(false);
272 Object redata
= new Importer().read(encoded
).getValue();
273 String reencoded
= new Exporter().append(redata
)
276 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
277 reencoded
.replaceAll("@[0-9]*", "@REF"));
281 addTest(new TestCase("Array in Object Import/Export") {
283 public void test() throws Exception
{
284 Object data
= new DataArray();// new String[] { "un", "deux" };
285 String encoded
= new Exporter().append(data
).toString(false);
286 Object redata
= new Importer().read(encoded
).getValue();
287 String reencoded
= new Exporter().append(redata
)
290 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
291 reencoded
.replaceAll("@[0-9]*", "@REF"));
295 addTest(new TestCase("Array Import/Export") {
297 public void test() throws Exception
{
298 Object data
= new String
[] { "un", "deux" };
299 String encoded
= new Exporter().append(data
).toString(false);
300 Object redata
= new Importer().read(encoded
).getValue();
301 String reencoded
= new Exporter().append(redata
)
304 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
305 reencoded
.replaceAll("@[0-9]*", "@REF"));
309 addTest(new TestCase("Enum Import/Export") {
311 public void test() throws Exception
{
312 Object data
= EnumToSend
.FANFAN
;
313 String encoded
= new Exporter().append(data
).toString(false);
314 Object redata
= new Importer().read(encoded
).getValue();
315 String reencoded
= new Exporter().append(redata
)
318 assertEquals(encoded
.replaceAll("@[0-9]*", "@REF"),
319 reencoded
.replaceAll("@[0-9]*", "@REF"));
325 public String
[] data
= new String
[] { "un", "deux" };
328 @SuppressWarnings("unused")
335 public Data(int value
) {
340 @SuppressWarnings("unused")
341 class DataObject
extends Data
{
344 @SuppressWarnings("synthetic-access")
345 private DataObject() {
348 @SuppressWarnings("synthetic-access")
349 public DataObject(Data data
) {
354 @SuppressWarnings("unused")
355 class DataLoop
extends Data
{
356 public DataLoop next
;
357 private String value
;
359 @SuppressWarnings("synthetic-access")
363 @SuppressWarnings("synthetic-access")
364 public DataLoop(String value
) {