001 /*
002 * $Id: ExecutableServerTest.java 1263 2007-07-29 10:21:40Z kredel $
003 */
004
005 package edu.jas.util;
006
007 import java.io.IOException;
008
009 import junit.framework.Test;
010 import junit.framework.TestCase;
011 import junit.framework.TestSuite;
012
013 import org.apache.log4j.BasicConfigurator;
014 import org.apache.log4j.Logger;
015
016 //import edu.unima.ky.parallel.ChannelFactory;
017 //import edu.unima.ky.parallel.SocketChannel;
018
019
020 /**
021 * ExecutableServer tests with JUnit.
022 * @author Heinz Kredel
023 */
024
025 public class ExecutableServerTest extends TestCase {
026
027 /**
028 * main.
029 */
030 public static void main (String[] args) {
031 BasicConfigurator.configure();
032 junit.textui.TestRunner.run( suite() );
033 }
034
035 /**
036 * Constructs a <CODE>ExecutableServerTest</CODE> object.
037 * @param name String.
038 */
039 public ExecutableServerTest(String name) {
040 super(name);
041 }
042
043 /**
044 * suite.
045 */
046 public static Test suite() {
047 TestSuite suite= new TestSuite(ExecutableServerTest.class);
048 return suite;
049 }
050
051 private static final String host = "localhost";
052 private static final int port = ChannelFactory.DEFAULT_PORT;
053
054 private ExecutableServer es;
055 private ChannelFactory cf;
056
057 protected void setUp() {
058 es = new ExecutableServer(port);
059 es.init();
060 cf = new ChannelFactory();
061 }
062
063 protected void tearDown() {
064 es.terminate();
065 es = null;
066 cf.terminate();
067 cf = null;
068 }
069
070
071 /**
072 * Tests if the ExecutableServer could be started and terminated.
073 */
074 public void testExecutableServer1() {
075 assertTrue("should never fail", true );
076 }
077
078
079 /**
080 * Tests if the ExecutableServer can execute a RemoteExecutable.
081 */
082 public void testExecutableServer2() {
083 RemoteExecutable e1 = new Executable("2");
084 try {
085 SocketChannel sc = cf.getChannel(host,port);
086 sc.send( e1 );
087 Object o = sc.receive();
088 assertTrue("o:String", o instanceof String);
089 assertEquals("o==done", (String)o, ExecutableServer.DONE );
090 sc.close();
091 } catch (IOException e) {
092 e.printStackTrace();
093 fail("IOException");
094 } catch (ClassNotFoundException e) {
095 e.printStackTrace();
096 fail("ClassNotFoundException");
097 }
098 }
099
100
101 /**
102 * Tests if the ExecutableServer can execute more RemoteExecutable.
103 */
104 public void testExecutableServer3() {
105 RemoteExecutable e1 = new Executable("3");
106 int numloops = 1; // can be changed in ExecutableServer.run()
107 Object o;
108 try {
109 SocketChannel sc = cf.getChannel(host,port);
110 for (int i = 0; i < numloops; i++ ) {
111 sc.send( e1 );
112 o = sc.receive();
113 assertTrue("o:String", o instanceof String);
114 assertEquals("o==done", (String)o, ExecutableServer.DONE );
115 }
116 sc.close();
117 } catch (IOException e) {
118 e.printStackTrace();
119 fail("IOException");
120 } catch (ClassNotFoundException e) {
121 e.printStackTrace();
122 fail("ClassNotFoundException");
123 }
124 }
125
126
127 /**
128 * Tests if the ExecutableServer can execute a RemoteExecutable.
129 */
130 public void testExecutableServer4() {
131 RemoteExecutable e1 = null;
132 SocketChannel sc = null;
133 Object o;
134 try {
135 for (int i = 0; i < 4; i++ ) {
136 e1 = new Executable("4-"+i);
137 sc = cf.getChannel(host,port);
138
139 sc.send( e1 );
140 o = sc.receive();
141 assertTrue("o:String", o instanceof String);
142 assertEquals("o==done", (String)o, ExecutableServer.DONE );
143
144 e1 = null;
145 sc.close();
146 sc = null;
147 }
148 } catch (IOException e) {
149 e.printStackTrace();
150 fail("IOException");
151 } catch (ClassNotFoundException e) {
152 e.printStackTrace();
153 fail("ClassNotFoundException");
154 }
155 }
156
157 }
158
159
160 /**
161 * Unit Test Class which implements interface RemoteExecutable.
162 */
163
164 class Executable implements RemoteExecutable {
165
166 private static final Logger logger = Logger.getLogger(Executable.class);
167
168 private String param = null;
169
170 /**
171 * Executable.
172 * @param param String.
173 */
174 public Executable(String param) {
175 this.param = param;
176 }
177 /**
178 * run.
179 */
180 public void run() {
181 logger.debug(param + " has been run");
182 }
183
184 }