001/*
002 * $Id: TimeStatusTest.java 3789 2011-10-01 18:54:43Z kredel $
003 */
004
005package edu.jas.kern;
006
007
008import java.util.concurrent.Callable;
009
010import junit.framework.Test;
011import junit.framework.TestCase;
012import junit.framework.TestSuite;
013
014import org.apache.log4j.BasicConfigurator;
015
016
017/**
018 * TimeStatus tests with JUnit.
019 * @author Heinz Kredel
020 */
021public class TimeStatusTest extends TestCase {
022
023
024    /**
025     * main.
026     */
027    public static void main(String[] args) {
028        BasicConfigurator.configure();
029        junit.textui.TestRunner.run(suite());
030    }
031
032
033    /**
034     * Constructs a <CODE>TimeStatusTest</CODE> object.
035     * @param name String.
036     */
037    public TimeStatusTest(String name) {
038        super(name);
039    }
040
041
042    /*
043     */
044    public static Test suite() {
045        TestSuite suite = new TestSuite(TimeStatusTest.class);
046        return suite;
047    }
048
049
050    @Override
051    protected void setUp() {
052    }
053
054
055    @Override
056    protected void tearDown() {
057        TimeStatus.setNotActive();
058        TimeStatus.setLimit(Long.MAX_VALUE);
059        TimeStatus.setCallBack((Callable<Boolean>) null);
060    }
061
062
063    /**
064     * Tests checkTime.
065     */
066    public void testCheckTime() {
067        TimeStatus.setActive();
068        assertTrue("is active ", TimeStatus.isActive());
069        TimeStatus.restart();
070        try {
071            TimeStatus.checkTime("test1");
072            // succeed
073        } catch (TimeExceededException e) {
074            fail("test1 " + e);
075        }
076
077        TimeStatus.setLimit(0L);
078        assertTrue("is active ", TimeStatus.isActive());
079        try {
080            Thread.sleep(10);
081            TimeStatus.checkTime("test2");
082            fail("test2 checkTime");
083        } catch (TimeExceededException e) {
084            // succeed
085        } catch (InterruptedException e) {
086            fail("test2 interrupt");
087        }
088    }
089
090
091    /**
092     * Tests call back.
093     */
094    public void testCallBack() {
095        TimeStatus.setActive();
096        TimeStatus.restart();
097        TimeStatus.setLimit(0L);
098        TimeStatus.setCallBack(new TSCallMock(true));
099        assertTrue("is active ", TimeStatus.isActive());
100
101        try {
102            Thread.sleep(10);
103            TimeStatus.checkTime("test3");
104            // succeed
105        } catch (TimeExceededException e) {
106            fail("test3 checkTime");
107        } catch (InterruptedException e) {
108            fail("test3 interrupt");
109        }
110
111        TimeStatus.setCallBack(new TSCallMock(false));
112        try {
113            Thread.sleep(10);
114            TimeStatus.checkTime("test4");
115            fail("test4 checkTime");
116        } catch (TimeExceededException e) {
117            // succeed
118        } catch (InterruptedException e) {
119            fail("test4 interrupt");
120        }
121    }
122
123}
124
125
126class TSCallMock implements Callable<Boolean> {
127
128
129    boolean flag = true;
130
131
132    public TSCallMock(boolean b) {
133        flag = b;
134    }
135
136
137    public Boolean call() {
138        return flag;
139    }
140
141}