Mercurial > hg > RemoteEditor > REPSessionManager
changeset 334:4fae49280699
Test pattern for Inter-Session Manager communication
author | kono |
---|---|
date | Sun, 12 Oct 2008 14:38:58 +0900 |
parents | 99d8f73bc64e |
children | 5a78e73ecba5 |
files | Todo rep/CloseButtonEvent.java rep/ConnectButtonEvent.java rep/SelectButtonEvent.java rep/SessionManager.java rep/SessionManagerEvent.java rep/gui/RPanel.java test/sematest/TestEditor.java test/sematest/TestGUI.java test/sematest/TestInterManagerSession.java test/sematest/TestSessionManager.java |
diffstat | 11 files changed, 144 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/Todo Sun Oct 12 10:28:47 2008 +0900 +++ b/Todo Sun Oct 12 14:38:58 2008 +0900 @@ -1,3 +1,8 @@ +Sun Oct 12 10:33:36 JST 2008 + +Todo: +END_MERGEが繰り返し出てしまう(kono) + Sat Oct 11 22:28:49 JST 2008 Todo: @@ -5,6 +10,7 @@ Todo: Optimizerを使った場合のテスト (kono) +行番号0があるとだめらしい。 Todo: manager.remove(editor) の動作のタイミング、 channel closeの扱い (kono)
--- a/rep/CloseButtonEvent.java Sun Oct 12 10:28:47 2008 +0900 +++ b/rep/CloseButtonEvent.java Sun Oct 12 14:38:58 2008 +0900 @@ -14,7 +14,7 @@ return session; } - public void exec() { + public void exec(SessionManager manager) { listener.closeSession(this); }
--- a/rep/ConnectButtonEvent.java Sun Oct 12 10:28:47 2008 +0900 +++ b/rep/ConnectButtonEvent.java Sun Oct 12 14:38:58 2008 +0900 @@ -3,10 +3,8 @@ public class ConnectButtonEvent implements SessionManagerEvent{ private String host; - private SessionManager manager; - public ConnectButtonEvent(SessionManagerEventListener listener, String host) { - this.manager = (SessionManager)listener; + public ConnectButtonEvent(String host) { this.host = host; } @@ -14,7 +12,7 @@ return host; } - public void exec() { + public void exec(SessionManager manager) { manager.connectSession(host); }
--- a/rep/SelectButtonEvent.java Sun Oct 12 10:28:47 2008 +0900 +++ b/rep/SelectButtonEvent.java Sun Oct 12 14:38:58 2008 +0900 @@ -6,12 +6,10 @@ private int sid; private Forwarder editor; - private SessionManager manager; - public SelectButtonEvent(Forwarder editor, Session session, SessionManagerEventListener listener) { + public SelectButtonEvent(Forwarder editor, Session session) { this.editor = editor; this.sid = session.getSID(); - this.manager = (SessionManager)listener; } public int getSID() { @@ -22,7 +20,7 @@ return editor; } - public void exec() { + public void exec(SessionManager manager) { try { manager.selectSession(this); } catch (IOException e) {
--- a/rep/SessionManager.java Sun Oct 12 10:28:47 2008 +0900 +++ b/rep/SessionManager.java Sun Oct 12 14:38:58 2008 +0900 @@ -130,7 +130,7 @@ private boolean checkInputEvent() { SessionManagerEvent e; if((e = waitingEventQueue.poll())!=null){ - e.exec(); + e.exec(this); return true; } return false; @@ -497,8 +497,7 @@ } public void connectSession(String host) { - int port = DEFAULT_PORT; - port = parent_port; + int port = parent_port; InetSocketAddress addr = new InetSocketAddress(host, port); try { REPSocketChannel<REPCommand> sessionchannel = REPSocketChannel.<REPCommand>create(new REPCommandPacker()); @@ -629,4 +628,15 @@ //assert(false); } + public void setParentPort(int port) { + parent_port = port; + } + public int getParentPort() { + return parent_port; + } + + public int getPort() { + return receive_port; + } + }
--- a/rep/SessionManagerEvent.java Sun Oct 12 10:28:47 2008 +0900 +++ b/rep/SessionManagerEvent.java Sun Oct 12 14:38:58 2008 +0900 @@ -2,6 +2,6 @@ public interface SessionManagerEvent { - void exec(); + void exec(SessionManager manager); }
--- a/rep/gui/RPanel.java Sun Oct 12 10:28:47 2008 +0900 +++ b/rep/gui/RPanel.java Sun Oct 12 14:38:58 2008 +0900 @@ -108,13 +108,13 @@ public void actionPerformed(ActionEvent event) { if (event.getSource() == connectButton) { host = textField.getText(); - listener.buttonPressed(new ConnectButtonEvent(listener, host)); + listener.buttonPressed(new ConnectButtonEvent(host)); }else if(event.getSource() == selectButton){ //System.out.println("RPanel.actionPerformed() : editorSelectedRow = " + editor_table.getSelectedRow()); listener.buttonPressed( new SelectButtonEvent(editorList.get(editor_table.getSelectedRow()), - sessionList.get(session_table.getSelectedRow()), listener)); + sessionList.get(session_table.getSelectedRow()))); }else if(event.getSource() == closeButton){ listener.buttonPressed(new CloseButtonEvent(sessionList.get(session_table.getSelectedRow()), listener)); }
--- a/test/sematest/TestEditor.java Sun Oct 12 10:28:47 2008 +0900 +++ b/test/sematest/TestEditor.java Sun Oct 12 14:38:58 2008 +0900 @@ -40,7 +40,8 @@ public boolean detached=false; public boolean master=false; private int syncCounter=0; - private boolean hasInputLock=true; + private boolean hasInputLock=false; + private int port; public TestEditor(String name, String _host,int _port, boolean master){ @@ -49,6 +50,7 @@ String[] txts = { "aaa", "bbb", "ccc", "ddd", "eee", }; + port = _port; semaIP = new InetSocketAddress(_host, _port); ns = REPLogger.singleton(); this.name = name; @@ -71,6 +73,7 @@ public TestEditor(String name, String _host,int _port, boolean master, String[] txts,LinkedList<REPCommand> cmdList){ super(name); + port = _port; semaIP = new InetSocketAddress(_host, _port); ns = REPLogger.singleton(); this.name = name; @@ -307,4 +310,8 @@ sendCommand(nop); prevSeq = seq; } + + public int getPort() { + return port; + } }
--- a/test/sematest/TestGUI.java Sun Oct 12 10:28:47 2008 +0900 +++ b/test/sematest/TestGUI.java Sun Oct 12 14:38:58 2008 +0900 @@ -42,7 +42,7 @@ Session s = slist.get(count++ % slist.size()); for(Editor e :elist) { if (!e.hasSession()) { - SessionManagerEvent event = new SelectButtonEvent(e, s, manager); + SessionManagerEvent event = new SelectButtonEvent(e, s); ns.writeLog("Select session "+s.getSID()+" and editor "+i); manager.buttonPressed(event); s = slist.get(count++ % slist.size());
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/sematest/TestInterManagerSession.java Sun Oct 12 14:38:58 2008 +0900 @@ -0,0 +1,105 @@ +package test.sematest; + + +import rep.SessionManager; +import rep.SessionManagerEvent; +import rep.channel.REPServerSocketChannel; + +public class TestInterManagerSession extends TestSessionManager { + + /* + * All test is performed in localhost, so all session manager + * should have differenct port number each other. + * Test Pattern List + * Connect port for each editor + * Master/client flag for each editor + * Editor or slave session manager must be started by + * master session managers using syncExec. + */ + + int slavePort[] = {masterPort,masterPort,masterPort}; + int editorPort[] = {masterPort,masterPort+1,masterPort+2}; + boolean editorMaster[] = {true,false,false,false}; + SessionManagerEvent ev1[] = { + new SessionManagerEvent() { + // event for master + // executed before first select(); + public void exec(SessionManager manager) { + for(TestEditor editor:editors) { + if(editor.getPort()==masterPort) + editor.start(); + } + int i = sessionManagers.length; + for(SessionManager slave:slaveSessionManagers) { + if (slave.getParentPort()==masterPort) + i = startSessionManager(slave,i,masterPort + i); + } + } + }, + new SessionManagerEvent() { + // executed before first select(); + // event for slave + public void exec(SessionManager manager) { + manager.connectSession(host); + for(TestEditor editor:editors) { + if(editor.getPort()==masterPort+1) + editor.start(); + } + } + }, + new SessionManagerEvent() { + // executed before first select(); + // event for slave + public void exec(SessionManager manager) { + manager.connectSession(host); + for(TestEditor editor:editors) { + if(editor.getPort()==masterPort+2) + editor.start(); + } + } + } + }; + + /* + * Create all editors, master session managers and slave session + * managers with specified port. All instances are not started yet. + */ + + public TestInterManagerSession(int sm, int ss, int e) { + super(sm,ss,e); + + sessionManagers = new SessionManager[sm]; + slaveSessionManagers = new SessionManager[ss]; + editors = new TestEditor[e]; + for(int i=0;i<sm;i++) { + sessionManagers[i] = new SessionManager(); + } + for(int i=0;i<ss;i++) { + int port = slavePort[i%slavePort.length]; + slaveSessionManagers[i] = new SessionManager(); + slaveSessionManagers[i].setParentPort(port); + } + for(int i=0;i<e;i++) { + int port = editorPort[i%editorPort.length]; + boolean master = editorMaster[i%editorMaster.length]; + // TestEditor extends Thread + editors[i] = new TestEditor("Editor"+i,host,port,master); + } + } + + + public static void main(String[] args){ + /* + * set simulation mode + * isSimulation=true thread base simulation for PathFinder + * isSimulation=false socket based communication mode + */ + REPServerSocketChannel.isSimulation = true; + // At least 3 TestEditors are required. + TestInterManagerSession test = new TestInterManagerSession(1, 0, 3); + logger.setLogLevel(5); + test.startTest(); + } + + +}
--- a/test/sematest/TestSessionManager.java Sun Oct 12 10:28:47 2008 +0900 +++ b/test/sematest/TestSessionManager.java Sun Oct 12 14:38:58 2008 +0900 @@ -34,7 +34,7 @@ SessionManagerEvent ev1[] = { new SessionManagerEvent() { // executed before first select(); - public void exec() { + public void exec(SessionManager manager) { for(TestEditor editor:editors) { editor.start(); } @@ -72,7 +72,7 @@ * start session manager. sm.init(port,guit) is a mainloop, so * we need Thread here. */ - private int startSessionManager(final SessionManager sm,int i,int port) { + int startSessionManager(final SessionManager sm,int i,int port) { final SessionManagerGUI gui = new TestGUI(sm); final int port1 = port; logger.writeLog("TestSessionManager.startSessionManager() : start SessionManager"); @@ -93,7 +93,7 @@ } - private void startTest() { + protected void startTest() { int i = 0; for(SessionManager master:sessionManagers) { i = startSessionManager(master,i, masterPort + i);