Mercurial > hg > RemoteEditor > REPSessionManager
annotate test/sematest/TestInterManagerSession.java @ 385:1fca50ce3508
first-working-version
author | one@firefly.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Mon, 10 Nov 2008 22:18:14 +0900 |
parents | 4b87f89b3afd |
children | 2cf5392b2a9f |
rev | line source |
---|---|
334 | 1 package test.sematest; |
2 | |
3 | |
342 | 4 import java.util.LinkedList; |
5 | |
6 import rep.REP; | |
7 import rep.REPCommand; | |
334 | 8 import rep.SessionManager; |
9 import rep.channel.REPServerSocketChannel; | |
382
4b87f89b3afd
REP Session Manager (Java version)
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
378
diff
changeset
|
10 import rep.gui.SessionManagerEvent; |
334 | 11 |
12 public class TestInterManagerSession extends TestSessionManager { | |
13 | |
14 /* | |
15 * All test is performed in localhost, so all session manager | |
16 * should have differenct port number each other. | |
17 * Test Pattern List | |
18 * Connect port for each editor | |
19 * Master/client flag for each editor | |
20 * Editor or slave session manager must be started by | |
21 * master session managers using syncExec. | |
22 */ | |
23 | |
335 | 24 public int slavePort[] = {masterPort,masterPort,masterPort}; |
25 public int editorPort[] = {masterPort,masterPort+1,masterPort+2}; | |
342 | 26 public boolean editorMaster[] = {true,false,false,false}; |
27 private LinkedList<REPCommand> editorStartCmds; | |
28 | |
335 | 29 private SessionManagerEvent ev2[] = { |
334 | 30 new SessionManagerEvent() { |
31 public void exec(SessionManager manager) { | |
32 int i = sessionManagers.length; | |
33 for(SessionManager slave:slaveSessionManagers) { | |
336 | 34 if (slave.getParentPort()==masterPort) { |
35 logger.writeLog("Start slave "+slave); | |
334 | 36 i = startSessionManager(slave,i,masterPort + i); |
336 | 37 } |
334 | 38 } |
39 } | |
40 }, | |
41 new SessionManagerEvent() { | |
42 public void exec(SessionManager manager) { | |
378 | 43 manager.connectSessionManager(host); |
334 | 44 } |
45 }, | |
46 new SessionManagerEvent() { | |
364 | 47 public void exec(SessionManager manager) { |
48 // try to make a loop | |
49 if (false) { | |
378 | 50 sessionManagers[0].connectSessionManager(host, |
364 | 51 manager.getPort()); |
52 } | |
378 | 53 manager.connectSessionManager(host); |
365
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
54 manager.execAfterConnect( |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
55 new SessionManagerEvent() { |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
56 public void exec(SessionManager manager) { |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
57 for(SessionManager m:sessionManagers) { |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
58 startEditor(m); |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
59 } |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
60 for(SessionManager m:slaveSessionManagers) { |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
61 startEditor(m); |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
62 } |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
63 editors[0].setCommand(editorStartCmds); |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
64 } |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
65 } |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
66 ); |
334 | 67 } |
365
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
68 |
334 | 69 } |
343 | 70 }; |
385 | 71 //private int inscnt=2; |
342 | 72 |
365
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
73 private void startEditor(SessionManager m) { |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
74 for(TestEditor editor:editors) { |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
75 if(editor.getPort()==m.getPort()) { |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
76 logger.writeLog("Start client "+editor); |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
77 editor.start(); |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
78 } |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
79 } |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
80 } |
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
81 |
334 | 82 /* |
83 * Create all editors, master session managers and slave session | |
84 * managers with specified port. All instances are not started yet. | |
85 */ | |
343 | 86 |
334 | 87 public TestInterManagerSession(int sm, int ss, int e) { |
88 super(sm,ss,e); | |
343 | 89 |
334 | 90 sessionManagers = new SessionManager[sm]; |
91 slaveSessionManagers = new SessionManager[ss]; | |
92 editors = new TestEditor[e]; | |
93 for(int i=0;i<sm;i++) { | |
94 sessionManagers[i] = new SessionManager(); | |
95 } | |
96 for(int i=0;i<ss;i++) { | |
97 int port = slavePort[i%slavePort.length]; | |
98 slaveSessionManagers[i] = new SessionManager(); | |
99 slaveSessionManagers[i].setParentPort(port); | |
100 } | |
101 for(int i=0;i<e;i++) { | |
102 int port = editorPort[i%editorPort.length]; | |
103 boolean master = editorMaster[i%editorMaster.length]; | |
104 // TestEditor extends Thread | |
373 | 105 LinkedList<REPCommand>cmds = new LinkedList<REPCommand>(); |
106 cmds.add(new REPCommand(REP.SMCMD_JOIN,0,0,0,0,"")); | |
385 | 107 //if (inscnt-->0) cmds.add(new REPCommand(REP.REPCMD_INSERT,0,0,0,0,"m0")); |
334 | 108 editors[i] = new TestEditor("Editor"+i,host,port,master); |
385 | 109 //editors[i].setCommand(cmds); |
334 | 110 } |
343 | 111 setupEditor0(); |
112 } | |
113 | |
114 private void setupEditor0() { | |
115 /* | |
116 * do not startup Editor0 until SessionManagers are ready. | |
117 * Define pending command and set null command for now. | |
118 */ | |
342 | 119 LinkedList<REPCommand>cmds = new LinkedList<REPCommand>(); |
364 | 120 //cmds.add(new REPCommand(REP.SMCMD_JOIN,0,0,0,0,"Editor0-file")); |
121 cmds.add(new REPCommand(REP.SMCMD_PUT,0,0,0,0,"Editor0-file")); | |
385 | 122 cmds.add(new REPCommand(REP.REPCMD_INSERT,0,0,0,0,"m0")); |
123 cmds.add(new REPCommand(REP.REPCMD_DELETE,0,0,0,0,"m0")); | |
342 | 124 editorStartCmds = cmds; |
125 LinkedList<REPCommand>nullcmds = new LinkedList<REPCommand>(); | |
126 editors[0].setCommand(nullcmds); | |
334 | 127 } |
128 | |
335 | 129 @Override |
130 public void setSMEvent(SessionManager s,int i) { | |
131 if (i<ev2.length) { | |
132 s.syncExec(ev2[i]); | |
133 } | |
134 return ; | |
135 } | |
334 | 136 |
336 | 137 @Override |
138 protected void startTest() { | |
139 int i = 0; | |
140 for(SessionManager master:sessionManagers) { | |
365
c432755c3555
distributed session debug continue... SELECT/SELECT_ACK loop
kono
parents:
364
diff
changeset
|
141 logger.writeLog("Start master "+i+" "+master); |
336 | 142 i = startSessionManager(master,i, masterPort + i); |
143 } | |
144 } | |
145 | |
334 | 146 public static void main(String[] args){ |
147 /* | |
148 * set simulation mode | |
149 * isSimulation=true thread base simulation for PathFinder | |
150 * isSimulation=false socket based communication mode | |
151 */ | |
152 REPServerSocketChannel.isSimulation = true; | |
153 // At least 3 TestEditors are required. | |
335 | 154 TestInterManagerSession test = new TestInterManagerSession(1, 2, 3); |
334 | 155 logger.setLogLevel(5); |
156 test.startTest(); | |
157 } | |
158 | |
159 | |
160 } |