1
2
3
4
5
6
7 package org.sourceforge.jvb3d.Network;
8
9 import java.net.InetAddress;
10 import java.net.InetSocketAddress;
11
12 import junit.framework.TestCase;
13
14 /***
15 * @author Develop
16 *
17 * TODO To change the template for this generated type comment go to Window -
18 * Preferences - Java - Code Style - Code Templates
19 */
20 public class ClientManagerTest extends TestCase {
21 ReceivedPacketBuffer packetBuffer;
22
23 ClientManager clientManager;
24
25 TestClientFactory clientFactory = null;
26
27 TestServerFacade serverFacade = null;
28
29
30
31
32 protected void setUp() throws Exception {
33 super.setUp();
34 NetworkServerFacadeHolder.setNetworkFacade(new TestServerFacade());
35 packetBuffer = new ReceivedPacketBuffer();
36 clientManager = new ClientManager();
37 serverFacade = (TestServerFacade) NetworkServerFacadeHolder
38 .getNetworkFacade();
39 clientFactory = (TestClientFactory) NetworkServerFacadeHolder
40 .getNetworkFacade().getClientFactory();
41 }
42
43
44
45
46 protected void tearDown() throws Exception {
47 packetBuffer = null;
48 clientManager = null;
49 super.tearDown();
50 }
51
52 /***
53 * testuje ClientManager.update TODO testy update
54 *
55 * @throws Exception
56 */
57 public void testUpdate() throws Exception {
58
59
60 packetBuffer.addObserver(clientManager);
61
62 JoinPacket testPacket = new JoinPacket();
63 testPacket.setSourceAddress(new InetSocketAddress(InetAddress.getByName("localhost"), 2000));
64 assertEquals(clientManager.getClientCount(), 0);
65 packetBuffer.addPacket(testPacket);
66
67 packetBuffer.notifyObservers();
68
69 assertEquals(clientManager.getClientCount(), 1);
70
71
72
73
74
75 ConnectPacket connectPacket = new ConnectPacket();
76 connectPacket.setSourceAddress(new InetSocketAddress(InetAddress.getByName("localhost"), 2000));
77 packetBuffer.addPacket(connectPacket);
78
79 packetBuffer.notifyObservers();
80
81 assertEquals(clientManager.getClientCount(), 1);
82
83
84 }
85
86 /***
87 * sprawdza, jak zachowuje siê ClientManager, gdy otrzyma pakiet JoinPacket: -
88 * od klienta na localhost - 2 raz od tego samego klienta - od innego
89 * klienta
90 *
91 * @throws Exception
92 * jeœli coœ posz³o nie tak
93 */
94 public void testProcessJoinPacket() throws Exception {
95 TestClientData newClient;
96 packetBuffer.addObserver(clientManager);
97
98 JoinPacket testPacket = new JoinPacket();
99 testPacket.setSourceAddress(new InetSocketAddress(InetAddress.getByName("localhost"), 2000));
100 assertEquals(clientManager.getClientCount(), 0);
101 packetBuffer.addPacket(testPacket);
102
103 packetBuffer.notifyObservers();
104
105 assertEquals(clientManager.getClientCount(), 1);
106
107 newClient = clientFactory.getLastClient();
108
109
110
111
112 assertEquals(newClient.getClientAddress(), new InetSocketAddress(InetAddress.getByName("localhost"), 2000));
113
114 packetBuffer.addPacket(testPacket);
115 packetBuffer.notifyObservers();
116 assertEquals(clientManager.getClientCount(), 1);
117
118
119 testPacket.setSourceAddress(new InetSocketAddress(InetAddress.getByName("192.168.9.23"), 2000));
120
121
122
123
124 packetBuffer.addPacket(testPacket);
125 packetBuffer.notifyObservers();
126 assertEquals(clientManager.getClientCount(), 2);
127 newClient = clientFactory.getLastClient();
128 assertEquals(newClient.getClientAddress(), new InetSocketAddress(InetAddress.getByName("192.168.9.23"), 2000));
129
130 packetBuffer.addPacket(testPacket);
131 packetBuffer.notifyObservers();
132 assertEquals(clientManager.getClientCount(), 2);
133
134
135 newClient = clientFactory.getLastClient();
136 assertEquals(newClient.getClientAddress(),
137 new InetSocketAddress(InetAddress.getByName("192.168.9.23"), 2000));
138 }
139
140 /***
141 * sprawdza metodê update ClientManagera. - dodaje klienta na localhost -
142 * wysy³a mu dwa poprawne pakiety - wysy³a mu pakiet z ni¿szym numerem
143 * sekwencji - wysy³a pakiet od nieistniej¹cego klienta - dodaje drugiego
144 * klienta - wysy³a do drugiego klienta poprawny pakiet - wysy³a do drugiego
145 * klienta niepoprawny pakiet
146 *
147 * @throws Exception
148 * TODO ka¿de update inny tekst
149 */
150 public void testProcessUpdatePacket() throws Exception {
151 TestClientData clientData;
152
153
154 packetBuffer.addObserver(clientManager);
155
156 JoinPacket joinPacket = new JoinPacket();
157 joinPacket.setSourceAddress(new InetSocketAddress("localhost", 2000));
158 assertEquals("Iloœæ klientów na starcie ró¿na od 0", clientManager
159 .getClientCount(), 0);
160 packetBuffer.addPacket(joinPacket);
161
162 packetBuffer.notifyObservers();
163
164 UpdatePacket updatePacket = new UpdatePacket();
165 updatePacket.setSourceAddress(new InetSocketAddress("localhost", 2000));
166 updatePacket.setUpdateData("update".getBytes());
167 updatePacket.setSeqNumber(1);
168 packetBuffer.addPacket(updatePacket);
169
170 packetBuffer.notifyObservers();
171
172 clientData = clientFactory.getClientAt(new InetSocketAddress("localhost", 2000));
173 assertNotNull("Nie ma klienta na localhost", clientData);
174
175 assertEquals("Ró¿na zawartoœæ pola update przed i po wys³aniu",
176 new String(clientData.getLastUpdate()), "update");
177 assertEquals("B³edny pakiet przes³any przez fasadê", new String(serverFacade
178 .getLastUpdate().getUpdateData()), "update");
179
180
181 updatePacket.setSourceAddress(new InetSocketAddress("localhost", 2000));
182 updatePacket.setUpdateData("update".getBytes());
183 updatePacket.setSeqNumber(2);
184 packetBuffer.addPacket(updatePacket);
185
186 packetBuffer.notifyObservers();
187
188 assertEquals(
189 "Ró¿na zawartoœæ pola update przed i po wys³aniu 2 pakietu",
190 new String(clientData.getLastUpdate()), "update");
191 assertEquals("B³edny pakiet przes³any przez fasadê", new String(serverFacade
192 .getLastUpdate().getUpdateData()), "update");
193
194
195 updatePacket.setSourceAddress(new InetSocketAddress("localhost", 2000));
196 updatePacket.setUpdateData("update".getBytes());
197 updatePacket.setSeqNumber(1);
198 packetBuffer.addPacket(updatePacket);
199
200 packetBuffer.notifyObservers();
201
202 updatePacket.setSourceAddress(new InetSocketAddress("192.168.9.23", 2000));
203 updatePacket.setUpdateData("update".getBytes());
204 updatePacket.setSeqNumber(4);
205 packetBuffer.addPacket(updatePacket);
206
207 packetBuffer.notifyObservers();
208
209
210 joinPacket = new JoinPacket();
211 joinPacket.setSourceAddress(new InetSocketAddress("192.168.9.23", 2000));
212 assertEquals("Z³a iloœæ klientów", clientManager.getClientCount(), 1);
213 packetBuffer.addPacket(joinPacket);
214
215 packetBuffer.notifyObservers();
216
217 clientData = clientFactory.getClientAt(new InetSocketAddress("192.168.9.23", 2000));
218 assertNotNull("Nie ma klienta na localhost", clientData);
219
220 updatePacket.setSourceAddress(new InetSocketAddress("192.168.9.23", 2000));
221 updatePacket.setUpdateData("update".getBytes());
222 updatePacket.setSeqNumber(4);
223 packetBuffer.addPacket(updatePacket);
224
225 packetBuffer.notifyObservers();
226
227 assertEquals("Ró¿na zawartoœæ pola update przed i po wys³aniu",
228 new String(clientData.getLastUpdate()), "update");
229 assertEquals("B³edny pakiet przes³any przez fasadê", new String(serverFacade
230 .getLastUpdate().getUpdateData()), "update");
231
232 updatePacket.setSourceAddress(new InetSocketAddress("192.168.9.23", 2000));
233 updatePacket.setUpdateData("update".getBytes());
234 updatePacket.setSeqNumber(1);
235 packetBuffer.addPacket(updatePacket);
236
237 packetBuffer.notifyObservers();
238 }
239
240 /***
241 * sprawdza wysy³anie pakietu update przez ClientManagera. - wysy³a update
242 * gdy nie ma po³¹czonych klientów - dodaje klienta i wysy³a update - dodaje
243 * kolejnego klienta i wysy³a update - czeka a¿ minie czas timeoutu
244 * klientów, i wysy³a update - wysy³a update by sprawdziæ, czy klient
245 * zosta³ usuniêty - wysy³a update
246 *
247 * @throws Exception
248 */
249 public void testSendUpdate() throws Exception {
250 packetBuffer.addObserver(clientManager);
251
252 clientManager.sendUpdate("update".getBytes());
253
254 JoinPacket joinPacket = new JoinPacket();
255 joinPacket.setSourceAddress(new InetSocketAddress(InetAddress.getByName("localhost"), 2000));
256 assertEquals("Iloœæ klientów na starcie ró¿na od 0", clientManager
257 .getClientCount(), 0);
258 packetBuffer.addPacket(joinPacket);
259 packetBuffer.notifyObservers();
260
261 TestClientData client = clientFactory.getLastClient();
262 clientManager.sendUpdate("update".getBytes());
263 assertEquals("Niepoprawne dane wys³ane do klienta 1", new String(client.getLastUpdate()), "update");
264
265 joinPacket = new JoinPacket();
266 joinPacket.setSourceAddress(new InetSocketAddress("192.168.9.23", 2000));
267 packetBuffer.addPacket(joinPacket);
268 packetBuffer.notifyObservers();
269
270 clientManager.sendUpdate("update2".getBytes());
271
272 assertEquals("Niepoprawne dane wys³ane do klienta 1", new String(clientFactory.getClientAt(new InetSocketAddress("localhost", 2000)).getLastUpdate()), "update2");
273 assertEquals("Niepoprawne dane wys³ane do klienta 2", new String(clientFactory.getClientAt(new InetSocketAddress("192.168.9.23", 2000)).getLastUpdate()), "update2");
274
275 Thread.sleep(1500);
276
277 UpdatePacket updatePacket = new UpdatePacket();
278 updatePacket.setSourceAddress(new InetSocketAddress(InetAddress.getByName("localhost"), 2000));
279 updatePacket.setUpdateData("update".getBytes());
280 updatePacket.setSeqNumber(1);
281 packetBuffer.addPacket(updatePacket);
282 packetBuffer.notifyObservers();
283
284 clientManager.sendUpdate("update3".getBytes());
285
286 assertEquals("Nie wykryto timeout klienta", serverFacade.lastDisconnectedAvatar, "avatar1");
287
288 clientManager.sendUpdate("update3".getBytes());
289
290 assertEquals("Niepoprawne dane wys³ane do klienta 1", new String(clientFactory.getClientAt(new InetSocketAddress("localhost", 2000)).getLastUpdate()), "update3");
291 assertFalse("Wys³ano update do klienta który mia³ byc usuniêty", new String(clientFactory.getClientAt(new InetSocketAddress("192.168.9.23", 2000)).getLastUpdate()).equals("update3"));
292 }
293 }