Mercurial > hg > RemoteEditor > REPSessionManager
comparison test/editortest/TestSessionManager2.java @ 414:784a4d67e6a5
(no commit message)
author | one |
---|---|
date | Tue, 09 Dec 2008 15:44:28 +0900 |
parents | |
children | b7f42fc75a36 |
comparison
equal
deleted
inserted
replaced
413:1cdbdeedc5b7 | 414:784a4d67e6a5 |
---|---|
1 package test.editortest; | |
2 | |
3 import java.io.IOException; | |
4 | |
5 import rep.SessionManager; | |
6 import rep.channel.REPLogger; | |
7 import rep.channel.REPServerSocketChannel; | |
8 import rep.gui.SessionManagerEvent; | |
9 import rep.gui.SessionManagerGUI; | |
10 import test.sematest.TestGUI; | |
11 | |
12 | |
13 public class TestSessionManager2 { | |
14 | |
15 static public REPLogger logger = REPLogger.singleton(); | |
16 public int masterPort = 8766; | |
17 public String host = "localhost"; | |
18 public SessionManager sessionManagers[]; | |
19 public SessionManager slaveSessionManagers[]; | |
20 public TestEditor2 editors[]; | |
21 | |
22 /* | |
23 * All test is performed in localhost, so all session manager | |
24 * should have differenct port number each other. | |
25 */ | |
26 | |
27 /* | |
28 * Test Pattern List | |
29 * Connect port for each editor | |
30 * Master/client flag for each editor | |
31 * Editor or slave session manager must be started by | |
32 * master session managers using syncExec. | |
33 */ | |
34 public int editorPort[] = {masterPort,masterPort,masterPort}; | |
35 public boolean editorMaster[] = {true,false,false,false}; | |
36 private SessionManagerEvent ev1[] = { | |
37 new SessionManagerEvent() { | |
38 // executed before first select(); | |
39 public void exec(SessionManager manager) { | |
40 for(TestEditor2 editor:editors) { | |
41 editor.start(); | |
42 } | |
43 int i = sessionManagers.length; | |
44 for(SessionManager slave:slaveSessionManagers) { | |
45 i = startSessionManager(slave,i,masterPort + i); | |
46 } | |
47 } | |
48 }}; | |
49 | |
50 /* | |
51 * Create all editors, master session managers and slave session | |
52 * managers with specified port. All instances are not started yet. | |
53 */ | |
54 | |
55 public TestSessionManager2(int sm, int ss, int e) { | |
56 sessionManagers = new SessionManager[sm]; | |
57 slaveSessionManagers = new SessionManager[ss]; | |
58 editors = new TestEditor2[e]; | |
59 for(int i=0;i<sm;i++) { | |
60 sessionManagers[i] = new SessionManager(); | |
61 } | |
62 for(int i=0;i<ss;i++) { | |
63 slaveSessionManagers[i] = new SessionManager(); | |
64 } | |
65 for(int i=0;i<e;i++) { | |
66 int port = editorPort[i%editorPort.length]; | |
67 boolean master = editorMaster[i%editorMaster.length]; | |
68 // TestEditor extends Thread | |
69 editors[i] = new TestEditor2("Editor"+i,host,port,master); | |
70 } | |
71 } | |
72 | |
73 /* | |
74 * start session manager. sm.init(port,guit) is a mainloop, so | |
75 * we need Thread here. | |
76 */ | |
77 public int startSessionManager(final SessionManager sm,int i,int port) { | |
78 final SessionManagerGUI gui = new TestGUI(sm); | |
79 final int port1 = port; | |
80 logger.writeLog("TestSessionManager.startSessionManager() : start SessionManager"); | |
81 // syncExec does not wake selector, do this before run(). | |
82 sm.setReceivePort(port1); | |
83 setSMEvent(sm,i); | |
84 Runnable start = new Runnable() { | |
85 public void run() { | |
86 try { | |
87 sm.init(port1,gui); | |
88 } catch (IOException e) { | |
89 } catch (InterruptedException e) { | |
90 } | |
91 } | |
92 }; | |
93 new Thread(start).start(); | |
94 return i+1; | |
95 } | |
96 | |
97 | |
98 public void setSMEvent(SessionManager s,int i) { | |
99 if (i<ev1.length) { | |
100 s.syncExec(ev1[i]); | |
101 } | |
102 return ; | |
103 } | |
104 | |
105 protected void startTest() { | |
106 int i = 0; | |
107 for(SessionManager master:sessionManagers) { | |
108 i = startSessionManager(master,i, masterPort + i); | |
109 } | |
110 } | |
111 | |
112 public static void main(String[] args){ | |
113 /* | |
114 * set simulation mode | |
115 * isSimulation=true thread base simulation for PathFinder | |
116 * isSimulation=false socket based communication mode | |
117 */ | |
118 REPServerSocketChannel.isSimulation = false; | |
119 //Editor.noMergeMode = true; | |
120 // At least 3 TestEditors are required. | |
121 TestSessionManager2 test = new TestSessionManager2(1, 0, 3); | |
122 logger.setLogLevel(5); | |
123 test.startTest(); | |
124 } | |
125 | |
126 | |
127 } |