001    package org.apache.turbine.services.schedule;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *   http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import junit.framework.Test;
023    import junit.framework.TestCase;
024    import junit.framework.TestSuite;
025    
026    import org.apache.commons.configuration.BaseConfiguration;
027    import org.apache.commons.configuration.Configuration;
028    
029    import org.apache.turbine.modules.scheduledjob.SimpleJob;
030    import org.apache.turbine.services.ServiceManager;
031    import org.apache.turbine.services.TurbineServices;
032    //import org.apache.turbine.test.BaseTestCase;
033    
034    /**
035     * Unit testing for the non-persistent implementation of the scheduler service.
036     *
037     * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
038     * @version $Id: TurbineNonPersistentSchedulerServiceTest.java 615328 2008-01-25 20:25:05Z tv $
039     */
040    public class TurbineNonPersistentSchedulerServiceTest extends TestCase
041    {
042        private static final String PREFIX = "services." + ScheduleService.SERVICE_NAME + '.';
043    
044        public TurbineNonPersistentSchedulerServiceTest(String name)
045                throws Exception
046        {
047            super(name);
048    
049            ServiceManager serviceManager = TurbineServices.getInstance();
050            serviceManager.setApplicationRoot(".");
051    
052            Configuration cfg = new BaseConfiguration();
053            cfg.setProperty(PREFIX + "classname", TurbineNonPersistentSchedulerService.class.getName());
054    
055            cfg.setProperty(PREFIX + "scheduler.jobs", "SimpleJob");
056            cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.ID", "1");
057            cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.SECOND", "10");
058            cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.MINUTE", "-1");
059            cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.HOUR", "-1");
060            cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.WEEK_DAY", "-1");
061            cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.DAY_OF_MONTH", "-1");
062            cfg.setProperty(PREFIX + "enabled", "true");
063    
064            serviceManager.setConfiguration(cfg);
065    
066            try
067            {
068                serviceManager.init();
069            }
070            catch (Exception e)
071            {
072                e.printStackTrace();
073                fail();
074            }
075        }
076    
077        public static Test suite()
078        {
079            return new TestSuite(TurbineNonPersistentSchedulerServiceTest.class);
080        }
081    
082        /**
083         * Tests the ability to enable and disable the service.
084         */
085        public void testEnableDisable()
086        {
087            try
088            {
089                TurbineScheduler.startScheduler();
090                assertEquals(true, TurbineScheduler.isEnabled());
091    
092                TurbineScheduler.stopScheduler();
093                assertEquals(false, TurbineScheduler.isEnabled());
094            }
095            catch (Exception e)
096            {
097                e.printStackTrace();
098                fail();
099            }
100        }
101    
102        /**
103         * Tests the ability to add and remove a job.  A list of jobs will be obtained from
104         * the service to determine if the operation were successful.
105         */
106        public void testAddRemoveJob()
107        {
108            try
109            {
110                // get the current job count for later comparison
111                int jobCount = TurbineScheduler.listJobs().size();
112    
113                // Add a new job entry
114                            JobEntry je = new JobEntry();
115                je.setJobId(jobCount + 1);
116                je.setSecond(0);
117                je.setMinute(1);
118                je.setHour(-1);
119                je.setDayOfMonth(-1);
120                je.setWeekDay(-1);
121                je.setTask("SimpleJob");
122    
123                TurbineScheduler.addJob(je);
124                assertEquals(jobCount + 1, TurbineScheduler.listJobs().size());
125    
126                TurbineScheduler.removeJob(je);
127                assertEquals(jobCount, TurbineScheduler.listJobs().size());
128    
129            }
130            catch (Exception e)
131            {
132                e.printStackTrace();
133                fail();
134            }
135        }
136    
137        /**
138         * Tests the ability to retrieve the job added during initialization.
139         */
140        public void testGetJob()
141        {
142            try
143            {
144                            JobEntry je = (JobEntry)TurbineScheduler.getJob(1);
145                assertEquals(je.getJobId(), 1);
146                assertEquals(je.getSecond(), 10);
147                assertEquals(je.getMinute(), -1);
148                assertEquals(je.getHour(), -1);
149                assertEquals(je.getDayOfMonth(), -1);
150                assertEquals(je.getWeekDay(), -1);
151                assertEquals(je.getTask(), "SimpleJob");
152            }
153            catch (Exception e)
154            {
155                e.printStackTrace();
156                fail();
157            }
158        }
159    
160        /** Test to make sure a job actually runs.  Currently not work.
161         * @TODO Must get testRunningJob to work.
162         *
163         */
164        public void OFFtestRunningJob()
165        {
166            try
167            {
168               int beforeCount = SimpleJob.getCounter();
169               Thread.sleep(120000);
170               int afterCount = SimpleJob.getCounter();
171               assertTrue(beforeCount < afterCount);
172    
173            }
174            catch (Exception e)
175            {
176                e.printStackTrace();
177                fail();
178            }
179        }
180    
181    }