blob: 8ef5d132bc53d9a99906da9adf5295a77d7907d5 [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.services.cron.CronSchedule;
import org.apache.tapestry5.ioc.services.cron.IntervalSchedule
import org.apache.tapestry5.ioc.services.cron.PeriodicExecutor
import spock.lang.Issue;
import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit
import java.util.concurrent.locks.ReentrantLock;
class PeriodicExecutorSpec extends AbstractRegistrySpecification {
def "execution intervals"() {
buildRegistry()
def countDownLatch = new CountDownLatch(5);
def schedule = new IntervalSchedule(10)
def job = getService(PeriodicExecutor).addJob(schedule, "count incrementer", { countDownLatch.countDown(); })
countDownLatch.await 30, TimeUnit.SECONDS
cleanup:
job && job.cancel()
}
@Issue('https://issues.apache.org/jira/browse/TAP5-2455')
def "One-shot job in the past is not executed"() {
setup:
buildRegistry()
def schedule = new CronSchedule('0 0 0 1 1 ? 2014')
def jobExecuted = Boolean.FALSE
when:
def job = getService(PeriodicExecutor).addJob(schedule, "Job in the past", { jobExecuted = Boolean.TRUE; lock.notifyAll() })
synchronized (jobExecuted) {
jobExecuted.wait(2000l)
}
then:
!jobExecuted
cleanup:
if (job && !job.isCanceled()){
job.cancel()
}
}
}