1 //
2 // Copyright (c) 2003, Caltha - Gajda, Krzewski, Mach, Potempski Sp.J.
3 // All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without modification,
6 // are permitted provided that the following conditions are met:
7 //
8 // * Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 // * Neither the name of the Caltha - Gajda, Krzewski, Mach, Potempski Sp.J.
14 // nor the names of its contributors may be used to endorse or promote products
15 // derived from this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 // IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
21 // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23 // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 // POSSIBILITY OF SUCH DAMAGE.
27 //
28 package org.objectledge.threads;
29
30 import junit.framework.TestCase;
31
32 import org.jcontainer.dna.Configuration;
33 import org.jcontainer.dna.Logger;
34 import org.jcontainer.dna.impl.DefaultConfiguration;
35 import org.jcontainer.dna.impl.Log4JLogger;
36 import org.objectledge.context.Context;
37 import org.objectledge.pipeline.Valve;
38
39 /***
40 *
41 * @author <a href="mailto:rafal@caltha.pl">Rafal Krzewski</a>
42 * @version $Id: ThreadPoolTest.java,v 1.3 2004/02/02 16:06:36 fil Exp $
43 */
44 public class ThreadPoolTest extends TestCase
45 {
46
47 /***
48 * Constructor for ThreadPoolTest.
49 * @param arg0
50 */
51 public ThreadPoolTest(String arg0)
52 {
53 super(arg0);
54 }
55
56 public void testDaemon()
57 throws InterruptedException
58 {
59 Context context = new Context();
60 Valve cleanup = null;
61 Configuration config = new DefaultConfiguration("config", "", "/config");
62 Logger log = new Log4JLogger(org.apache.log4j.Logger.getLogger(getClass()));
63 ThreadPool pool = new ThreadPool(cleanup, context, config, log);
64 pool.runDaemon(new TestTask());
65 Thread.sleep(100);
66 pool.stop();
67 }
68
69 public void testWorker()
70 throws Exception
71 {
72 Context context = new Context();
73 Valve cleanup = null;
74 Configuration config = new DefaultConfiguration("config", "", "/config");
75 Logger log = new Log4JLogger(org.apache.log4j.Logger.getLogger(getClass()));
76 ThreadPool pool = new ThreadPool(cleanup, context, config, log);
77 pool.runWorker(new TestTask());
78 Thread.sleep(100);
79 pool.stop();
80 }
81
82 private class TestTask
83 extends Task
84 {
85 public synchronized void process(Context context)
86 {
87 try
88 {
89 context.setAttribute("started", "yes");
90 this.wait();
91 }
92 catch(InterruptedException e)
93 {
94 context.setAttribute("interrupted", "yes");
95 return;
96 }
97 }
98 }
99 }