1   /*
2    * Created on 2004-12-04
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 junit.framework.TestCase;
10  import java.net.InetAddress;
11  import java.net.InetSocketAddress;
12  import java.net.SocketAddress;
13  import java.util.NoSuchElementException;
14  
15  
16  /***
17   * @author £ukasz Krzy¿ak
18   *
19   * TODO To change the template for this generated type comment go to
20   * Window - Preferences - Java - Code Style - Code Templates
21   */
22  public class ReceivedPacketBufferTest extends TestCase {
23  
24  	static final int datagramCount = 10;
25  	JoinPacket[] sendDatagrams;
26  	JoinPacket[] recvDatagrams;
27  	
28  	ReceivedPacketBuffer recvPacketBuffer;
29  	
30  	TestObserver testObserver;
31  	TestSender testSender;
32  	/*
33  	 * @see TestCase#setUp()
34  	 */
35  	protected void setUp() throws Exception {
36  		super.setUp();
37  		sendDatagrams = new JoinPacket[datagramCount];
38  		recvDatagrams = new JoinPacket[datagramCount];
39  		
40  		for(int i=0; i<datagramCount; i++) {
41  			byte buf[] = new byte[100];
42  			byte address[] = new byte[4];
43  			address[0] = (byte)192; address[1] = (byte)168; address[2] = 1; address[3] = (byte)i;
44  			recvDatagrams[i] = new JoinPacket();
45  			recvDatagrams[i].setSourceAddress(new InetSocketAddress(InetAddress.getByAddress(address), 2000));
46  			sendDatagrams[i] = new JoinPacket();
47  			sendDatagrams[i].setSourceAddress(new InetSocketAddress(InetAddress.getByAddress(address), 2000));
48  		}
49  		
50  		recvPacketBuffer = new ReceivedPacketBuffer();
51  		testSender = new TestSender(recvPacketBuffer);
52  		testObserver = new TestObserver();
53  	}
54  
55  	/*
56  	 * @see TestCase#tearDown()
57  	 */
58  	protected void tearDown() throws Exception {
59  		recvDatagrams = null;
60  		sendDatagrams = null;
61  		super.tearDown();
62  	}
63  
64  	public void testAddPacket() {
65  		for(int i=0; i < datagramCount; i++) {
66  			assertEquals(recvPacketBuffer.getPacketCount(), i);
67  			recvPacketBuffer.addPacket(sendDatagrams[i]);
68  			assertEquals(recvPacketBuffer.getPacketCount(), i+1);
69  		}
70  	}
71  
72  	public void testGetNextPacket() {
73  		for(int i=0; i < datagramCount; i++)
74  			recvPacketBuffer.addPacket(sendDatagrams[i]);
75  		assertEquals(recvPacketBuffer.getPacketCount(), datagramCount);
76  		
77  		for(int i=0; i < datagramCount; i++) {
78  			assertEquals(recvPacketBuffer.getPacketCount(), datagramCount-i);
79  			recvDatagrams[i] = (JoinPacket)recvPacketBuffer.getNextPacket();
80  			InetSocketAddress dataFromDatagram = (InetSocketAddress)recvDatagrams[i].getSourceAddress();
81  			byte address[] = new byte[4];
82  			address[0] = (byte)192; address[1] = (byte)168; address[2] = 1; address[3] = (byte)i;
83  			assertEquals(dataFromDatagram.getAddress().getHostAddress(), "192.168.1."+i);
84  		}
85  		assertEquals(recvPacketBuffer.getPacketCount(), 0);
86  		
87  		try {
88  			recvPacketBuffer.getNextPacket();
89              fail("Should raise a NoSuchElementException");
90  
91          } catch(NoSuchElementException success) {
92              // successful test
93          }
94  	}
95  	
96  	public void testNotifyObservers() {
97  		recvPacketBuffer.addObserver(testObserver);
98  		testSender.start();
99  		JoinPacket packet = null;
100 		try {
101 			
102 			int j = 0;
103 			while ((packet = (JoinPacket)testObserver.getPacket()) == null
104 					&& j++ < 10)
105 				Thread.sleep(100);
106 		}
107 		catch(Exception e) {
108 			fail("InterruptedException thrown "+e);
109 		}
110 		InetSocketAddress dataFromDatagram = (InetSocketAddress)packet.getSourceAddress();
111 		assertEquals(dataFromDatagram.getAddress().getHostAddress(), "127.0.0.1");
112 	}
113 
114 }