1   /*
2    * Created on 2004-12-22
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.awt.GraphicsConfiguration;
10  import java.net.InetSocketAddress;
11  
12  import javax.media.j3d.Canvas3D;
13  
14  import org.sourceforge.jvb3d.Model.IModelNetwork;
15  import org.sourceforge.jvb3d.Model.Model;
16  
17  import com.sun.j3d.utils.universe.SimpleUniverse;
18  
19  import junit.framework.TestCase;
20  
21  /***
22   * @author Develop
23   * 
24   * TODO To change the template for this generated type comment go to Window -
25   * Preferences - Java - Code Style - Code Templates
26   */
27  public class ClientFacadeTest extends TestCase {
28  	static IModelNetwork modelInterface;
29  	
30  	class TestClient extends Thread {
31  		NetworkClientFacade networkFacade;
32  
33  		boolean terminated = false;
34  		
35  		String avatar;
36  
37  		TestClient() {
38  			NetworkClientFacadeHolder.setNetworkFacade(new ClientFacade());
39  			networkFacade = NetworkClientFacadeHolder.getNetworkFacade();
40  			networkFacade.setModelInterface(modelInterface);
41  		}
42  
43  		/***
44  		 * stawia klienta i wysyła do serwera update avatara uzytkownika
45  		 */
46  		public void run() {
47  			try {
48  				avatar = networkFacade.join(new InetSocketAddress(
49  						"localhost", 4000));
50  				assertEquals("Otrzymano zły ID klienta od serwera", avatar, "0");
51  				networkFacade.sendUpdate("0");
52  				terminated = true;
53  			} catch (Exception e) {
54  				e.printStackTrace();
55  			}
56  		}
57  	}
58  
59  	class TestServer extends Thread {
60  		NetworkServerFacade networkFacade;
61  
62  		boolean terminated = false;
63  
64  		TestServer() {
65  			NetworkServerFacadeHolder.setNetworkFacade(new ServerFacade());
66  			networkFacade = NetworkServerFacadeHolder.getNetworkFacade();
67  			networkFacade.setModelInterface(modelInterface);
68  		}
69  
70  		/***
71  		 * stawia serwer, nasłuchuje klienta, po połączeniu czeka 300 ms, i wysyła update wszystkich obiektów
72  		 */
73  		public void run() {
74  			try {
75  				networkFacade.start(4000);
76  				Thread.sleep(300);
77  				networkFacade.sendAllUpdate();
78  				Thread.sleep(700);
79  				terminated = true;
80  			} catch (Exception e) {
81  				e.printStackTrace();
82  			}
83  		}
84  	}
85  	
86  	protected void setUp() throws Exception {
87  		super.setUp();
88  		GraphicsConfiguration config =
89  	           SimpleUniverse.getPreferredConfiguration();
90  
91  	    Canvas3D canvas3D = new Canvas3D(config);
92  	    //modelInterface = new TestModel(new Model(canvas3D,"test"));
93  	    modelInterface = new Model(canvas3D,false);
94  	}
95  
96  	/*
97  	 * @see TestCase#tearDown()
98  	 */
99  	protected void tearDown() throws Exception {
100 		modelInterface = null;
101 		super.tearDown();
102 	}
103 	
104 	/***
105 	 * uruchamia test klienta i serwera
106 	 * @throws Exception jeśli coś pójdzie źle
107 	 */
108 	public void testJoin() throws Exception {
109 		TestClient client = new TestClient();
110 		TestServer server = new TestServer();
111 		server.start();
112 		client.start();
113 		int i=0;
114 		while (i++<10 && !client.terminated && !server.terminated)
115 			Thread.sleep(1000);
116 		assertTrue("Klient bądź serwer nie zakończyły działania", i != 10);
117 	}
118 }