mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged HEAD-BUG-FIX (Cloud33/4.3) to HEAD (Cloud33/4.3)
62935: Merged PLATFORM1 (Cloud33) to HEAD-BUG-FIX (Cloud33/4.3) 62854: ACE-403 Added configured delayed test TODO: Add property-configured startDelay git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@62990 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -2,7 +2,7 @@ package org.alfresco.util;
|
|||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
@@ -22,7 +22,7 @@ public class CronTriggerBeanTest {
|
|||||||
|
|
||||||
private ClassPathXmlApplicationContext ctx;
|
private ClassPathXmlApplicationContext ctx;
|
||||||
private Scheduler scheduler;
|
private Scheduler scheduler;
|
||||||
private static ArrayList<Long> dummyJobRuns;
|
private static Map<String, ArrayList<Long>> dummyJobRuns;
|
||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void setUpBeforeClass() throws Exception {
|
public static void setUpBeforeClass() throws Exception {
|
||||||
@@ -34,7 +34,7 @@ public class CronTriggerBeanTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
dummyJobRuns = new ArrayList<>();
|
dummyJobRuns = new HashMap<String, ArrayList<Long>>();
|
||||||
this.ctx = null;
|
this.ctx = null;
|
||||||
this.scheduler = null;
|
this.scheduler = null;
|
||||||
}
|
}
|
||||||
@@ -56,39 +56,43 @@ public class CronTriggerBeanTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCodedCronTriggerBean() throws Exception {
|
public void testCodedCronTriggerBean() throws Exception {
|
||||||
assertEquals(0, dummyJobRuns.size());
|
final String JOB_NAME = "codedCronJob";
|
||||||
|
List<Long> jobRuns = this.getRunList(JOB_NAME);
|
||||||
|
assertEquals(0, jobRuns.size());
|
||||||
scheduler = StdSchedulerFactory.getDefaultScheduler();
|
scheduler = StdSchedulerFactory.getDefaultScheduler();
|
||||||
scheduler.start();
|
scheduler.start();
|
||||||
CronTriggerBean ctBean = new CronTriggerBean();
|
CronTriggerBean ctBean = new CronTriggerBean();
|
||||||
ctBean.setBeanName("Dummy");
|
ctBean.setBeanName("Dummy");
|
||||||
ctBean.setCronExpression("0/1 * * * * ? *");
|
ctBean.setCronExpression("0/1 * * * * ? *");
|
||||||
ctBean.setEnabled(true);
|
ctBean.setEnabled(true);
|
||||||
JobDetail jobDetail = new JobDetail("DummyJob", "DefaultGroup", DummyJob.class);
|
JobDetail jobDetail = new JobDetail(JOB_NAME, "DefaultGroup", DummyJob.class);
|
||||||
ctBean.setJobDetail(jobDetail);
|
ctBean.setJobDetail(jobDetail);
|
||||||
ctBean.setScheduler(scheduler);
|
ctBean.setScheduler(scheduler);
|
||||||
ctBean.afterPropertiesSet();
|
ctBean.afterPropertiesSet();
|
||||||
|
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
int runs = dummyJobRuns.size();
|
int runs = jobRuns.size();
|
||||||
assertTrue(runs > 0);
|
assertTrue(runs > 0);
|
||||||
|
|
||||||
scheduler.shutdown();
|
scheduler.shutdown();
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
assertEquals(runs, dummyJobRuns.size());
|
assertEquals(runs, jobRuns.size());
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
assertEquals(runs, dummyJobRuns.size());
|
assertEquals(runs, jobRuns.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCodedDelayedCronTriggerBean() throws Exception {
|
public void testCodedDelayedCronTriggerBean() throws Exception {
|
||||||
assertEquals(0, dummyJobRuns.size());
|
final String JOB_NAME = "codedDelayedCronJob";
|
||||||
|
List<Long> jobRuns = this.getRunList(JOB_NAME);
|
||||||
|
assertEquals(0, jobRuns.size());
|
||||||
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
|
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
|
||||||
scheduler.start();
|
scheduler.start();
|
||||||
CronTriggerBean ctBean = new CronTriggerBean();
|
CronTriggerBean ctBean = new CronTriggerBean();
|
||||||
ctBean.setBeanName("Dummy");
|
ctBean.setBeanName("Dummy");
|
||||||
ctBean.setCronExpression("0/1 * * * * ? *");
|
ctBean.setCronExpression("0/1 * * * * ? *");
|
||||||
ctBean.setEnabled(true);
|
ctBean.setEnabled(true);
|
||||||
JobDetail jobDetail = new JobDetail("DummyJob", "DefaultGroup", DummyJob.class);
|
JobDetail jobDetail = new JobDetail(JOB_NAME, "DefaultGroup", DummyJob.class);
|
||||||
ctBean.setJobDetail(jobDetail);
|
ctBean.setJobDetail(jobDetail);
|
||||||
ctBean.setScheduler(scheduler);
|
ctBean.setScheduler(scheduler);
|
||||||
final long START_DELAY = 4000L;
|
final long START_DELAY = 4000L;
|
||||||
@@ -97,49 +101,95 @@ public class CronTriggerBeanTest {
|
|||||||
|
|
||||||
// It should not have run during the delay. Give a second precision leeway
|
// It should not have run during the delay. Give a second precision leeway
|
||||||
Thread.sleep(START_DELAY - 1000);
|
Thread.sleep(START_DELAY - 1000);
|
||||||
assertEquals(0, dummyJobRuns.size());
|
assertEquals(0, jobRuns.size());
|
||||||
// It should have had a chance to run after the delay
|
// It should have had a chance to run after the delay
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
int runs = dummyJobRuns.size();
|
int runs = jobRuns.size();
|
||||||
assertTrue(runs > 0);
|
assertTrue(runs > 0);
|
||||||
// It should not have run again after shutdown
|
// It should not have run again after shutdown
|
||||||
scheduler.shutdown();
|
scheduler.shutdown();
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
assertEquals(runs, dummyJobRuns.size());
|
assertEquals(runs, jobRuns.size());
|
||||||
// Indeed after another second, it should not have changed.
|
// Indeed after another second, it should not have changed.
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
assertEquals(runs, dummyJobRuns.size());
|
assertEquals(runs, jobRuns.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testConfiguredCronTriggerBean() throws BeansException,
|
public void testConfiguredDelayedCronTriggerBean() throws BeansException, Exception {
|
||||||
Exception {
|
final String JOB_NAME = "configuredDelayedCronJob";
|
||||||
assertEquals(0, dummyJobRuns.size());
|
List<Long> jobRuns = this.getRunList(JOB_NAME);
|
||||||
|
assertEquals(0, jobRuns.size());
|
||||||
ctx = new ClassPathXmlApplicationContext(
|
ctx = new ClassPathXmlApplicationContext(
|
||||||
"alfresco/scheduler-core-context.xml",
|
"alfresco/scheduler-core-context.xml",
|
||||||
"org/alfresco/util/test-scheduled-jobs-context.xml");
|
"org/alfresco/util/test-scheduled-jobs-context.xml");
|
||||||
CronTriggerBean ctBean = ctx.getBean(CronTriggerBean.class);
|
CronTriggerBean ctBean = ctx.getBean("cronTriggerBeanDelayed", CronTriggerBean.class);
|
||||||
scheduler = ctBean.getScheduler();
|
scheduler = ctBean.getScheduler();
|
||||||
scheduler.start();
|
scheduler.start();
|
||||||
|
|
||||||
|
// It should not have run during the delay. Give a second precision leeway
|
||||||
|
final long START_DELAY = ctBean.getStartDelay();
|
||||||
|
Thread.sleep(START_DELAY - 1000);
|
||||||
|
assertEquals(0, jobRuns.size());
|
||||||
|
|
||||||
// After the interval, there should be at least one run
|
// After the interval, there should be at least one run
|
||||||
final long INTERVAL = 2000L;
|
final long INTERVAL = 1000L;
|
||||||
Thread.sleep(INTERVAL);
|
Thread.sleep(INTERVAL);
|
||||||
int runs = dummyJobRuns.size();
|
int runs = jobRuns.size();
|
||||||
assertTrue(runs > 0);
|
assertTrue(runs > 0);
|
||||||
|
|
||||||
// When the context closes, the scheduler should close, thereby stopping the job
|
// When the context closes, the scheduler should close, thereby stopping the job
|
||||||
ctx.close();
|
ctx.close();
|
||||||
Thread.sleep(INTERVAL);
|
Thread.sleep(INTERVAL);
|
||||||
assertEquals(runs, dummyJobRuns.size());
|
assertEquals(runs, jobRuns.size());
|
||||||
Thread.sleep(INTERVAL);
|
Thread.sleep(INTERVAL);
|
||||||
assertEquals(runs, dummyJobRuns.size());
|
assertEquals(runs, jobRuns.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConfiguredCronTriggerBean() throws BeansException, Exception {
|
||||||
|
final String JOB_NAME = "configuredCronJob";
|
||||||
|
List<Long> jobRuns = this.getRunList(JOB_NAME);
|
||||||
|
assertEquals(0, jobRuns.size());
|
||||||
|
ctx = new ClassPathXmlApplicationContext(
|
||||||
|
"alfresco/scheduler-core-context.xml",
|
||||||
|
"org/alfresco/util/test-scheduled-jobs-context.xml");
|
||||||
|
CronTriggerBean ctBean = ctx.getBean("cronTriggerBean", CronTriggerBean.class);
|
||||||
|
scheduler = ctBean.getScheduler();
|
||||||
|
scheduler.start();
|
||||||
|
|
||||||
|
// After the interval, there should be at least one run
|
||||||
|
final long INTERVAL = 1000L;
|
||||||
|
Thread.sleep(INTERVAL);
|
||||||
|
int runs = jobRuns.size();
|
||||||
|
assertTrue(runs > 0);
|
||||||
|
|
||||||
|
// When the context closes, the scheduler should close, thereby stopping the job
|
||||||
|
ctx.close();
|
||||||
|
Thread.sleep(INTERVAL);
|
||||||
|
assertEquals(runs, jobRuns.size());
|
||||||
|
Thread.sleep(INTERVAL);
|
||||||
|
assertEquals(runs, jobRuns.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class DummyJob implements Job {
|
public static class DummyJob implements Job {
|
||||||
public void execute(JobExecutionContext context) throws JobExecutionException {
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||||
long now = System.currentTimeMillis();
|
long now = System.currentTimeMillis();
|
||||||
dummyJobRuns.add(now);
|
ArrayList<Long> runs = dummyJobRuns.get(context.getJobDetail().getName());
|
||||||
|
if (runs == null) {
|
||||||
|
runs = new ArrayList<Long>();
|
||||||
|
dummyJobRuns.put(context.getJobDetail().getName(), runs);
|
||||||
|
}
|
||||||
|
runs.add(now);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<Long> getRunList(String jobName) {
|
||||||
|
ArrayList<Long> runs = dummyJobRuns.get(jobName);
|
||||||
|
if (runs == null) {
|
||||||
|
runs = new ArrayList<Long>();
|
||||||
|
dummyJobRuns.put(jobName, runs);
|
||||||
|
}
|
||||||
|
return runs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,13 +3,21 @@
|
|||||||
|
|
||||||
<beans>
|
<beans>
|
||||||
|
|
||||||
|
<bean id="dummyJobTestDelayed" class="org.springframework.scheduling.quartz.JobDetailBean">
|
||||||
|
<property name="jobClass">
|
||||||
|
<value>org.alfresco.util.CronTriggerBeanTest$DummyJob</value>
|
||||||
|
</property>
|
||||||
|
<property name="name">
|
||||||
|
<value>configuredDelayedCronJob</value>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<bean id="dummyJobTest" class="org.springframework.scheduling.quartz.JobDetailBean">
|
<bean id="dummyJobTest" class="org.springframework.scheduling.quartz.JobDetailBean">
|
||||||
<property name="jobClass">
|
<property name="jobClass">
|
||||||
<value>org.alfresco.util.CronTriggerBeanTest$DummyJob</value>
|
<value>org.alfresco.util.CronTriggerBeanTest$DummyJob</value>
|
||||||
</property>
|
</property>
|
||||||
<property name="name">
|
<property name="name">
|
||||||
<value>dummy</value>
|
<value>configuredCronJob</value>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
@@ -45,12 +53,31 @@
|
|||||||
</property>
|
</property>
|
||||||
<!-- trigger at 3am each day -->
|
<!-- trigger at 3am each day -->
|
||||||
<property name="cronExpression">
|
<property name="cronExpression">
|
||||||
<value>0/2 * * * * ?</value>
|
<value>0/1 * * * * ?</value>
|
||||||
</property>
|
</property>
|
||||||
<property name="beanName">
|
<property name="beanName">
|
||||||
<value>dummyTriggerBean</value>
|
<value>dummyTriggerBean</value>
|
||||||
</property>
|
</property>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
|
||||||
</beans>
|
<bean id="cronTriggerBeanDelayed" class="org.alfresco.util.CronTriggerBean">
|
||||||
|
<property name="jobDetail">
|
||||||
|
<ref bean="dummyJobTestDelayed" />
|
||||||
|
</property>
|
||||||
|
<property name="scheduler">
|
||||||
|
<ref bean="schedulerFactory" />
|
||||||
|
</property>
|
||||||
|
<!-- trigger at 3am each day -->
|
||||||
|
<property name="cronExpression">
|
||||||
|
<value>0/1 * * * * ?</value>
|
||||||
|
</property>
|
||||||
|
<property name="beanName">
|
||||||
|
<value>dummyTriggerBeanDelayed</value>
|
||||||
|
</property>
|
||||||
|
<property name="startDelay">
|
||||||
|
<value>4000</value>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
</beans>
|
||||||
|
Reference in New Issue
Block a user