001    /*
002     * $Id: TimeStatusTest.java 3297 2010-08-26 19:09:03Z kredel $
003     */
004    
005    package edu.jas.kern;
006    
007    
008    import java.util.concurrent.Callable;
009    
010    import junit.framework.Test;
011    import junit.framework.TestCase;
012    import junit.framework.TestSuite;
013    
014    import org.apache.log4j.BasicConfigurator;
015    
016    
017    /**
018     * TimeStatus tests with JUnit.
019     * @author Heinz Kredel
020     */
021    public 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    
126    class 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    }