001/*
002 * $Id: ExecutableServerTest.java 4074 2012-07-28 10:04:58Z kredel $
003 */
004
005package edu.jas.util;
006
007import java.io.IOException;
008
009import junit.framework.Test;
010import junit.framework.TestCase;
011import junit.framework.TestSuite;
012
013import org.apache.log4j.BasicConfigurator;
014import 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
025public 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
164class 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    /**
179     * run.
180     */
181    public void run() {
182        logger.debug(this + " has been run");
183    }
184
185    /**
186     * toString.
187     */
188    public String toString() {
189        return "Executable(" + param + ")";
190    }
191
192}