001    /*
002     * $Id: DistThreadPoolTest.java 3280 2010-08-22 11:44:49Z kredel $
003     */
004    
005    package edu.jas.util;
006    
007    import junit.framework.Test;
008    import junit.framework.TestCase;
009    import junit.framework.TestSuite;
010    
011    import 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    
022    public 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     */
177    class 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     */
190    class DistSlowWorker implements RemoteExecutable {
191        public void run() { 
192            try {
193                Thread.sleep(10);
194            } catch (InterruptedException e ) {
195            }
196        }
197    }