1 /***
2 * Jetrix TetriNET Server
3 * Copyright (C) 2001-2003 Emmanuel Bourg
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 */
19
20 package net.jetrix.protocols;
21
22 import static net.jetrix.protocols.TetrinetProtocol.*;
23
24 import java.io.*;
25 import java.util.*;
26
27 import junit.framework.*;
28 import net.jetrix.*;
29 import net.jetrix.messages.channel.*;
30
31 /***
32 * JUnit TestCase for the class net.jetrix.protocols.TetrinetProtocolTest
33 *
34 * @author Emmanuel Bourg
35 * @version $Revision: 863 $, $Date: 2010-08-20 12:26:25 +0200 (ven., 20 août 2010) $
36 */
37 public class TetrinetProtocolTest extends TestCase
38 {
39 private Protocol protocol;
40 private Locale locale;
41
42 public void setUp()
43 {
44 protocol = new TetrinetProtocol();
45 locale = new Locale("fr");
46 }
47
48 public void testTranslatePline()
49 {
50 PlineMessage message = new PlineMessage();
51 message.setSlot(1);
52 message.setText("Hello Jetrix!");
53 assertEquals("pline 1 Hello Jetrix!", protocol.translate(message, locale));
54 }
55
56 public void testGetMessagePline()
57 {
58 String raw = "pline 1 hello world!";
59 Message message = protocol.getMessage(raw);
60
61 assertNotNull("message not parsed", message);
62 assertEquals("message class", PlineMessage.class, message.getClass());
63
64 PlineMessage pline = (PlineMessage) message;
65 assertEquals("slot", 1, pline.getSlot());
66 assertEquals("text", "hello world!", pline.getText(Locale.ENGLISH));
67 }
68
69 public void testGetMessageCommand()
70 {
71 String raw = "pline 1 /move 1 2";
72 Message message = protocol.getMessage(raw);
73
74 assertNotNull("message not parsed", message);
75 assertEquals("message class", CommandMessage.class, message.getClass());
76
77 CommandMessage command = (CommandMessage) message;
78 assertEquals("slot", 1, command.getSlot());
79 assertEquals("command", "move", command.getCommand());
80 assertEquals("text", "1 2", command.getText(Locale.ENGLISH));
81 assertEquals("parameter count", 2, command.getParameterCount());
82 assertEquals("1st parameter", "1", command.getParameter(0));
83 assertEquals("2nd parameter", "2", command.getParameter(1));
84 }
85
86 public void testTranslatePlineAct()
87 {
88 PlineActMessage message = new PlineActMessage();
89 message.setSlot(1);
90 message.setText("feels faster");
91 assertEquals("plineact 1 feels faster", protocol.translate(message, locale));
92 }
93
94 public void testGetMessagePlineAct()
95 {
96 String raw = "plineact 1 says hello world!";
97 Message message = protocol.getMessage(raw);
98
99 assertNotNull("message not parsed", message);
100 assertEquals("message class", PlineActMessage.class, message.getClass());
101
102 PlineActMessage plineact = (PlineActMessage) message;
103 assertEquals("slot", 1, plineact.getSlot());
104 assertEquals("text", "says hello world!", plineact.getText(Locale.ENGLISH));
105 }
106
107 public void testTranslateGmsg()
108 {
109 GmsgMessage message = new GmsgMessage();
110 message.setText("<Smanux> hello world!");
111 assertEquals("gmsg <Smanux> hello world!", protocol.translate(message, locale));
112 }
113
114 public void testGetMessageGmsg()
115 {
116 String raw = "gmsg <Smanux> Hello world!";
117 Message message = protocol.getMessage(raw);
118
119 assertNotNull("message not parsed", message);
120 assertEquals("message class", GmsgMessage.class, message.getClass());
121
122 GmsgMessage gmsg = (GmsgMessage) message;
123 assertEquals("slot", 0, gmsg.getSlot());
124 assertEquals("text", "<Smanux> Hello world!", gmsg.getText(Locale.ENGLISH));
125 }
126
127 public void testTranslatePlayerJoin()
128 {
129 JoinMessage message = new JoinMessage();
130 message.setSlot(1);
131 message.setName("Smanux");
132 assertEquals("playerjoin 1 Smanux", protocol.translate(message, locale));
133 }
134
135 public void testGetMessagePlayerJoin()
136 {
137 String raw = "playerjoin 1 Smanux";
138 Message message = protocol.getMessage(raw);
139
140 assertNotNull("message not parsed", message);
141 assertEquals("message class", JoinMessage.class, message.getClass());
142
143 JoinMessage playerjoin = (JoinMessage) message;
144 assertEquals("slot", 1, playerjoin.getSlot());
145 assertEquals("name", "Smanux", playerjoin.getName());
146 }
147
148 public void testTranslateTeam1()
149 {
150 TeamMessage msg1 = new TeamMessage();
151 msg1.setSlot(1);
152 msg1.setName("LFJR");
153 assertEquals("team 1 LFJR", protocol.translate(msg1, locale));
154 }
155
156 public void testTranslateTeam2()
157 {
158 TeamMessage msg2 = new TeamMessage();
159 msg2.setSlot(1);
160 assertEquals("team 1 ", protocol.translate(msg2, locale));
161 }
162
163 public void testGetMessageTeam1()
164 {
165 String raw = "team 1 LFJR";
166 Message message = protocol.getMessage(raw);
167
168 assertNotNull("message not parsed", message);
169 assertEquals("message class", TeamMessage.class, message.getClass());
170
171 TeamMessage team = (TeamMessage) message;
172 assertEquals("slot", 1, team.getSlot());
173 assertEquals("name", "LFJR", team.getName());
174 }
175
176 public void testGetMessageTeam2()
177 {
178 String raw = "team 1";
179 Message message = protocol.getMessage(raw);
180
181 assertNotNull("message not parsed", message);
182 assertEquals("message class", TeamMessage.class, message.getClass());
183
184 TeamMessage team = (TeamMessage) message;
185 assertEquals("slot", 1, team.getSlot());
186 assertEquals("name", null, team.getName());
187 }
188
189 public void testGetMessageTeam3()
190 {
191
192 String raw = "team 1 L F J R";
193 Message message = protocol.getMessage(raw);
194
195 assertNotNull("message not parsed", message);
196 assertEquals("message class", TeamMessage.class, message.getClass());
197
198 TeamMessage team = (TeamMessage) message;
199 assertEquals("slot", 1, team.getSlot());
200 assertEquals("name", "L F J R", team.getName());
201 }
202
203 public void testGetMessageTeam4()
204 {
205
206 String raw = "team 1 LFJR ";
207 Message message = protocol.getMessage(raw);
208
209 assertNotNull("message not parsed", message);
210 assertEquals("message class", TeamMessage.class, message.getClass());
211
212 TeamMessage team = (TeamMessage) message;
213 assertEquals("slot", 1, team.getSlot());
214 assertEquals("name", "LFJR", team.getName());
215 }
216
217 public void testTranslatePlayerLeave()
218 {
219 LeaveMessage message = new LeaveMessage();
220 message.setSlot(1);
221 assertEquals("playerleave 1", protocol.translate(message, locale));
222 }
223
224 public void testGetMessagePlayerLeave()
225 {
226 String raw = "playerleave 1";
227 Message message = protocol.getMessage(raw);
228
229 assertNotNull("message not parsed", message);
230 assertEquals("message class", LeaveMessage.class, message.getClass());
231
232 LeaveMessage leave = (LeaveMessage) message;
233 assertEquals("slot", 1, leave.getSlot());
234 }
235
236 public void testTranslatePlayerNum()
237 {
238 PlayerNumMessage message = new PlayerNumMessage(1);
239 assertEquals("playernum 1", protocol.translate(message, locale));
240 }
241
242 public void testTranslateEndGame()
243 {
244 EndGameMessage message = new EndGameMessage();
245 assertEquals("endgame", protocol.translate(message, locale));
246 }
247
248 public void testTranslatePlayerLost()
249 {
250 PlayerLostMessage message = new PlayerLostMessage();
251 message.setSlot(1);
252 assertEquals("playerlost 1", protocol.translate(message, locale));
253 }
254
255 public void testTranslateField()
256 {
257 FieldMessage message = new FieldMessage();
258 message.setSlot(1);
259 message.setField("XYZABCD");
260 assertEquals("f 1 XYZABCD", protocol.translate(message, locale));
261 }
262
263 public void testGetMessageField()
264 {
265 String raw = "f 1 XYZABCD";
266 Message message = protocol.getMessage(raw);
267
268 assertNotNull("message not parsed", message);
269 assertEquals("message class", FieldMessage.class, message.getClass());
270
271 FieldMessage field = (FieldMessage) message;
272 assertEquals("slot", 1, field.getSlot());
273 assertEquals("field", "XYZABCD", field.getField());
274 }
275
276 public void testTranslateLevel()
277 {
278 LevelMessage message = new LevelMessage();
279 message.setSlot(1);
280 message.setLevel(50);
281 assertEquals("lvl 1 50", protocol.translate(message, locale));
282 }
283
284 public void testGetMessageLevel()
285 {
286 String raw = "lvl 1 50";
287 Message message = protocol.getMessage(raw);
288
289 assertNotNull("message not parsed", message);
290 assertEquals("message class", LevelMessage.class, message.getClass());
291
292 LevelMessage level = (LevelMessage) message;
293 assertEquals("slot", 1, level.getSlot());
294 assertEquals("level", 50, level.getLevel());
295 }
296
297 public void testEncode()
298 {
299 byte[] ip = {127, 0, 0, 1};
300 String nickname = "Smanux";
301 String version = "1.13";
302
303 assertEquals("80C210B3134A85CF71E46FD4C123A83D9E22A2F512769FE5", encode(nickname, version, ip, false));
304 }
305
306 public void testDecode()
307 {
308 String init = "80C210B3134A85CF71E46FD4C123A83D9E22A2F512769FE5";
309
310 assertEquals("decoded string", "tetrisstart Smanux 1.13", decode(init));
311 }
312
313 public void testEncodeDecode()
314 {
315 byte[] ip = {(byte) 195, (byte) 139, (byte) 204, (byte) 206};
316
317 String nickname = "Smanux";
318 String version = "1.13";
319
320 String init = encode(nickname, version, ip, false);
321
322 assertNotNull(init);
323
324 assertEquals("decoded", "tetrisstart Smanux 1.13", decode(init));
325 }
326
327 public void testLongMessage()
328 {
329 byte[] message = new byte[16 * 1024];
330 try
331 {
332 protocol.readLine(new ByteArrayInputStream(message, 0, message.length), "Cp1252");
333 fail("No exception raised on a 16K message");
334 }
335 catch (IOException e)
336 {
337
338 }
339 }
340
341 public void testSlowClient()
342 {
343 try
344 {
345 protocol.readLine(new InputStream() {
346 int i = 34;
347 public int read() throws IOException
348 {
349 try
350 {
351 Thread.sleep(1000);
352 }
353 catch (InterruptedException e)
354 {
355 }
356 return --i;
357 }
358 }, "Cp1252");
359 fail("No exception raised on extremely slow input");
360 }
361 catch (IOException e)
362 {
363
364 }
365 }
366 }