1   /*
2    * Created on 2004-12-09
3    *
4    * TODO To change the template for this generated file go to
5    * Window - Preferences - Java - Code Style - Code Templates
6    */
7   package org.sourceforge.jvb3d.Network;
8   
9   import java.net.InetAddress;
10  import java.net.InetSocketAddress;
11  import java.util.logging.Level;
12  import java.util.logging.Logger;
13  
14  import junit.framework.TestCase;
15  
16  /***
17   * @author Łukasz Krzyżak
18   * 
19   * TODO To change the template for this generated type comment go to Window -
20   * Preferences - Java - Code Style - Code Templates
21   */
22  public class ClientDataTest extends TestCase {
23  	private static final int receiverPort = NetworkClientFacade.clientport;
24  
25  	/*
26  	 * @see TestCase#setUp()
27  	 */
28  	protected void setUp() throws Exception {
29  		super.setUp();
30  		Logger.global.setLevel(Level.ALL);
31  		NetworkServerFacadeHolder.setNetworkFacade(new TestServerFacade());
32  	}
33  
34  	/*
35  	 * @see TestCase#tearDown()
36  	 */
37  	protected void tearDown() throws Exception {
38  		super.tearDown();
39  	}
40  
41  	public void testClientData() throws Exception {
42  		NetworkReceiver receiver = new NetworkReceiver(receiverPort);
43  		ReceivedPacketBuffer packetBuffer = new ReceivedPacketBuffer();
44  		TestObserver observer = new TestObserver();
45  		packetBuffer.addObserver(observer);
46  		receiver.connectToBuffer(packetBuffer);
47  		receiver.setTimeout(0);
48  		receiver.start();
49  
50  		ClientData client = new ClientData(new InetSocketAddress("localhost",
51  				receiverPort));
52  		assertEquals("Niezgadzają się adresy klienta", new InetSocketAddress(
53  				"localhost", receiverPort), client.getClientAddress());
54  		ConnectPacket packet = null;
55  		int j = 0;
56  		while ((packet = (ConnectPacket) observer.getPacket()) == null
57  				&& j++ < 10)
58  			Thread.sleep(100);
59  		assertEquals("Niepoprawne dane odebrane z ConnectPacket", packet
60  				.getAvatarId(), "avatar0");
61  		
62  		receiver.finish();
63  		receiver.terminate();
64  	}
65  
66  	public void testGetAvatarID() {
67  		try {
68  			ClientData client = new ClientData(new InetSocketAddress(
69  					"localhost", receiverPort));
70  			assertNotNull(client.getAvatarID());
71  		} catch (Exception e) {
72  			e.printStackTrace();
73  		}
74  	}
75  
76  	public void testValidatePacket() throws Exception {
77  		ClientData client = new ClientData(new InetSocketAddress("localhost", receiverPort));
78  		UpdatePacket update = new UpdatePacket();
79  		update.setSeqNumber(1);
80  		assertTrue("Odrzucono poprawny pakiet - SEQ 1", client
81  				.validatePacket(update));
82  		update.setSeqNumber(2);
83  		assertTrue("Odrzucono poprawny pakiet - SEQ 2", client
84  				.validatePacket(update));
85  		assertFalse("Przyjęto błędny pakiet - SEQ 2 po SEQ 2", client
86  				.validatePacket(update));
87  		update.setSeqNumber(1);
88  		assertFalse("Przyjęto błędny pakiet - SEQ 1 po SEQ 2", client
89  				.validatePacket(update));
90  		update.setSeqNumber(2);
91  		assertFalse("Przyjęto błędny pakiet - SEQ 2 po SEQ 2", client
92  				.validatePacket(update));
93  		update.setSeqNumber(3);
94  		assertTrue("Odrzucono poprawny pakiet - SEQ 3 po SEQ 2", client
95  				.validatePacket(update));
96  	}
97  
98  	public void testSendUpdate() throws Exception {
99  		NetworkReceiver receiver = new NetworkReceiver(receiverPort);
100 		ReceivedPacketBuffer recvBuffer = new ReceivedPacketBuffer();
101 		receiver.connectToBuffer(recvBuffer);
102 
103 		TestObserver observer = new TestObserver();
104 		recvBuffer.addObserver(observer);
105 
106 		ClientData clientData = new ClientData(new InetSocketAddress("localhost", receiverPort));
107 		receiver.start();
108 
109 		clientData.sendUpdate("update".getBytes());
110 		Thread.sleep(100);
111 
112 		UpdatePacket packet = null;
113 		while ((packet = (UpdatePacket) observer.getPacket()) == null) Thread.sleep(100);
114 		assertEquals("Otrzymano inne dane niż wysłano", new String(packet.getUpdateData()),
115 				"update");
116 		assertEquals("Nieprawidłowy numer SEQ otrzymanego pakietu", packet
117 				.getSeqNumber(), 1);
118 		clientData.sendUpdate("update1".getBytes());
119 		clientData.sendUpdate("update2".getBytes());
120 
121 		while ((packet = (UpdatePacket) observer.getPacket()) == null) Thread.sleep(100);
122 		assertEquals("Otrzymano inne dane niż wysłano", new String(packet.getUpdateData()),
123 				"update2");
124 		assertEquals("Nieprawidłowy numer SEQ otrzymanego pakietu", packet
125 				.getSeqNumber(), 3);
126 
127 		Thread.sleep(1000);
128 		try {
129 			clientData.sendUpdate("update_fail".getBytes());
130 			fail("Nie wykryto timeouta");
131 		} catch (TimeoutException e) {
132 
133 		}
134 		receiver.finish();
135 		receiver.terminate();
136 	}
137 }