1 /* ====================================================================
2 * License:
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * 3. The end-user documentation included with the redistribution,
17 * if any, must include the following acknowledgment:
18 * "This product includes software developed by
19 * Robert Half International (http://www.rhi.com/)."
20 * Alternately, this acknowledgment may appear in the software itself,
21 * if and wherever such third-party acknowledgments normally appear.
22 *
23 * 4. The names "Parc", "RHI", and "Robert Half International" must
24 * not be used to endorse or promote products derived from this
25 * software without prior written permission. For written
26 * permission, please contact pete.mckinstry@rhi.com.
27 *
28 * 5. Products derived from this software may not be called "PARC",
29 * nor may "PARC" appear in their name, without prior written
30 * permission of Robert Half International.
31 *
32 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
33 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
34 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
36 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
37 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
38 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
39 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
40 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
41 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
42 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
43 * SUCH DAMAGE.
44 * ====================================================================
45 *
46 */
47 package com.rhi.architecture.threads;
48
49 import junit.framework.Test;
50 import junit.framework.TestCase;
51 import junit.framework.TestSuite;
52
53 /***
54 * ThreadPoolTest
55 *
56 * @author Pete McKinstry
57 * @version 1.0
58 */
59 public class ThreadPoolTest extends TestCase {
60
61 ThreadPool pool;
62
63 /***
64 * Constructor for ThreadPoolTest.
65 * @param name
66 */
67 public ThreadPoolTest(String name) {
68 super(name);
69 }
70
71 /***
72 * setup
73 * @throws Exception
74 */
75 protected void setUp() throws Exception {
76 super.setUp();
77 pool = new ThreadPoolImpl(2);
78 }
79
80 /***
81 * tear down
82 * @throws Exception
83 */
84 protected void tearDown() throws Exception {
85 super.tearDown();
86 pool.close();
87 }
88
89 /***
90 * Method testOneWorker.
91 * @throws Exception
92 */
93 public void testOneWorker() throws Exception {
94 TestRunnable simpleRunnable = new TestRunnable();
95 pool.execute(simpleRunnable);
96 // wait for the thread to run... (consciously not using join())
97 Thread.sleep(250);
98 // check results.
99 assertTrue("Run not called.", simpleRunnable.runCalled);
100 }
101
102 /***
103 * Method testJoinWithTwoWorkers.
104 * @throws Exception
105 */
106 public void testJoinWithTwoWorkers() throws Exception {
107 TestRunnable runner1 = new TestRunnable();
108 pool.execute(runner1);
109 TestRunnable runner2 = new TestRunnable();
110 pool.execute(runner2);
111 // wait for the thread to run...
112 pool.join();
113 // check results.
114 assertTrue("Run not called.", runner1.runCalled);
115 assertTrue("Run not called.", runner2.runCalled);
116 }
117
118 /***
119 * Method testWithToManyWorkers.
120 * @throws Exception
121 */
122 public void testWithToManyWorkers() throws Exception {
123 TestRunnable runner1 = new TestRunnable();
124 TestRunnable runner2 = new TestRunnable();
125 TestRunnable runner3 = new TestRunnable();
126
127 try {
128 pool.execute(runner1);
129 pool.execute(runner2);
130 pool.execute(runner3);
131 }
132 catch (RuntimeException e) {
133 return;
134 }
135 fail("pool.execute() should have failed. To many Runnables for size.");
136
137 }
138
139 /***
140 * Method testJoinWithNoWorkers.
141 * @throws Exception
142 */
143 public void testJoinWithNoWorkers() throws Exception {
144 pool.join(); // should return immediately.
145 }
146
147 /***
148 * Suite method.
149 * @return Test
150 */
151 public static Test suite() {
152 return new TestSuite(ThreadPoolTest.class);
153 }
154
155 /***
156 * Convenience method
157 * @param args[] - cmdline args
158 */
159 public static void main(String args[]) {
160 junit.textui.TestRunner.run(suite());
161 }
162
163 class TestRunnable implements Runnable {
164 boolean runCalled = false;
165
166 /***
167 * @see java.lang.Runnable#run()
168 */
169 public void run() {
170 this.runCalled = true;
171 }
172
173 }
174 }
This page was automatically generated by Maven