001/*
002 * $Id: DistThreadPoolTest.java 3789 2011-10-01 18:54:43Z kredel $
003 */
004
005package edu.jas.util;
006
007import junit.framework.Test;
008import junit.framework.TestCase;
009import junit.framework.TestSuite;
010
011import org.apache.log4j.BasicConfigurator;
012
013//import edu.unima.ky.parallel.ChannelFactory;
014
015
016/**
017 * DistThreadPool tests with JUnit. 
018 * @author Akitoshi Yoshida
019 * @author Heinz Kredel
020 */
021
022public class DistThreadPoolTest extends TestCase {
023
024
025/**
026 * main.
027 */
028   public static void main (String[] args) {
029       BasicConfigurator.configure();
030       junit.textui.TestRunner.run( suite() );
031   }
032
033
034/**
035 * Constructs a <CODE>DistThreadPoolTest</CODE> object.
036 * @param name String.
037 */
038   public DistThreadPoolTest(String name) {
039          super(name);
040   }
041
042
043/**
044 */ 
045 public static Test suite() {
046     TestSuite suite= new TestSuite(DistThreadPoolTest.class);
047     return suite;
048   }
049
050
051   //private static final String host = "localhost";
052   private static final int port = ChannelFactory.DEFAULT_PORT;
053   //private static final String mfile = "machines.test";
054
055
056   private ExecutableServer es;
057
058
059   private DistThreadPool pool;
060
061
062   static final int JOBS = 10; // number of jobs to start
063
064
065   protected void setUp() {
066     es = new ExecutableServer(port);
067     es.init();
068   }
069
070
071   protected void tearDown() {
072     pool.terminate();
073     es.terminate();
074   }
075
076
077/**
078 * Tests if the created DistThreadPool is empty.
079 */
080 public void testDistThreadPool1() {
081     pool = new DistThreadPool(0);
082     assertTrue( "not empty pool ", pool.getNumber() == 0 );
083 }
084
085
086/**
087 * Tests if the created DistThreadPool is non empty.
088 */
089 public void testDistThreadPool2() {
090     pool = new DistThreadPool(1);
091     assertTrue( "# empty pool ", pool.getNumber() == 1 );
092     pool.terminate();
093
094     pool = new DistThreadPool();
095     assertTrue( "# empty pool ", pool.getNumber() == DistThreadPool.DEFAULT_SIZE );
096     pool.terminate();
097
098     pool = new DistThreadPool(10);
099     assertTrue( "# empty pool ", pool.getNumber() == 10 );
100     pool.terminate();
101 }
102
103
104/**
105 * Tests if the created DistThreadPool has no jobs.
106 */
107 public void testDistThreadPool3() {
108     pool = new DistThreadPool();
109     assertFalse( "no jobs ", pool.hasJobs() );
110     assertFalse( "more than 0 jobs ", pool.hasJobs(0) );
111     pool.terminate();
112 }
113
114
115/**
116 * Tests if the created DistThreadPool has jobs.
117 */
118 public void testDistThreadPool4() {
119     pool = new DistThreadPool();
120     assertFalse( "no jobs ", pool.hasJobs() );
121     for (int i = 0; i < JOBS*pool.getNumber(); i++ ) {
122         pool.addJob( new DistFastWorker() );
123     }
124     boolean j = pool.hasJobs();
125     assertTrue( "more than 0 jobs ", (j | true) ); // stupid
126     pool.terminate();
127     assertFalse( "no jobs ", pool.hasJobs() );
128 }
129
130
131/**
132 * Tests if the created DistThreadPool has many jobs.
133 */
134 public void testDistThreadPool5() {
135     pool = new DistThreadPool();
136     assertFalse( "no jobs ", pool.hasJobs() );
137     for (int i = 0; i < JOBS*pool.getNumber(); i++ ) {
138         pool.addJob( new DistSlowWorker() );
139     }
140     assertTrue( "more than 10 jobs ", pool.hasJobs(JOBS) );
141     pool.terminate();
142     assertFalse( "no jobs ", pool.hasJobs() );
143 }
144
145
146/**
147 * Tests if the created DistThreadPool has correct strategy.
148 */
149 public void testDistThreadPool6() {
150     pool = new DistThreadPool(StrategyEnumeration.LIFO);
151     assertTrue( "FIFO strategy ", 
152          pool.getStrategy() == StrategyEnumeration.LIFO );
153   }
154
155
156/**
157 * Tests if the created DistThreadPool has jobs and correct strategy.
158 */
159 public void testDistThreadPool7() {
160     pool = new DistThreadPool(StrategyEnumeration.LIFO);
161     assertFalse( "no jobs ", pool.hasJobs() );
162     for (int i = 0; i < JOBS*pool.getNumber(); i++ ) {
163         pool.addJob( new DistFastWorker() );
164     }
165     boolean j = pool.hasJobs();
166     assertTrue( "more than 0 jobs ", (j | true) ); // stupid
167     pool.terminate();
168     assertFalse( "no jobs ", pool.hasJobs() );
169 }
170
171}
172
173
174/**
175 * Utility class for DistThreadPool Test.
176 */
177class DistFastWorker implements RemoteExecutable {
178    public void run() { 
179        try {
180            Thread.sleep(0);
181        } catch (InterruptedException e ) {
182        }
183    }
184}
185
186
187/**
188 * Utility class for DistThreadPool Test.
189 */
190class DistSlowWorker implements RemoteExecutable {
191    public void run() { 
192        try {
193            Thread.sleep(10);
194        } catch (InterruptedException e ) {
195        }
196    }
197}