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);