[jboss-cvs] jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test ...
Peter Muir
peter at bleepbleep.org.uk
Mon Oct 15 09:32:14 EDT 2007
User: pmuir
Date: 07/10/15 09:32:14
Added: examples/quartz/src/org/jboss/seam/example/quartz/test
CronTest.java AsynchronousTest.java testng.xml
TestPaymentController.java EventsTest.java
NthBusinessDayTest.java TransactionStatus.java
TestPaymentProcessor.java AccountTest.java
OnceTest.java BaseData.xml RepeatingTest.java
Log:
Tests for quartz example
Revision Changes Path
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/CronTest.java
Index: CronTest.java
===================================================================
package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.example.quartz.Payment.Frequency.EVERY_SECOND;
import java.math.BigDecimal;
import org.jboss.seam.async.QuartzTriggerHandle;
import org.jboss.seam.example.quartz.Account;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.example.quartz.Payment.Frequency;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.testng.annotations.Test;
/**
* @author Pete Muir
*
*/
public class CronTest extends DBUnitSeamTest
{
private QuartzTriggerHandle quartzTriggerHandle;
private Long paymentId;
private static final Frequency REPEATING = EVERY_SECOND;
@Override
protected void prepareDBUnitOperations() {
beforeTestOperations.add(
new DataSetOperation("org/jboss/seam/example/quartz/test/BaseData.xml")
);
}
@Test
public void scheduleCron() throws Exception
{
try
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("110.00"));
setValue("#{newPayment.paymentCron}", "*/2 * * * * ?" );
}
@Override
protected void invokeApplication() throws Exception
{
// schedule a the repeating job and immediately pause it
// this allows you to carefully control how long the timer
// runs for
assert "persisted".equals(invokeMethod("#{paymentHome.saveAndScheduleCron}"));
Payment payment = (Payment) getValue("#{newPayment}");
quartzTriggerHandle = payment.getQuartzTriggerHandle();
quartzTriggerHandle.pause();
}
@Override
protected void renderResponse() throws Exception
{
// Check the job exists
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("IRS");
assert payment.getAmount().equals(new BigDecimal("110.00"));
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
assert payment.getActive();
}
}.run();
// Start the triggerHandle, wait a lot shorter than the job takes
// At this point the job should have executed once exactly
quartzTriggerHandle.resume();
pause((long) (REPEATING.getInterval() * 0.1));
quartzTriggerHandle.pause();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert "*/2 * * * * ?".equals(payment.getPaymentCron());
assert new BigDecimal("891.46").equals(account.getBalance());
}
}.run();
// Start the triggerHandle, wait until some short time after the
// job triggers once
quartzTriggerHandle.resume();
pause(2000l);
quartzTriggerHandle.pause();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
// Job should have run twice
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert "*/2 * * * * ?".equals(payment.getPaymentCron());
assert payment.getLastPaid() != null;
assert new BigDecimal("781.46").equals(account.getBalance());
paymentId = payment.getId();
}
}.run();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
setParameter("paymentId", paymentId.toString());
}
@Override
protected void invokeApplication() throws Exception
{
// Resume the job, then cancel it
quartzTriggerHandle.resume();
invokeMethod("#{paymentHome.cancel}");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert !payment.getActive();
assert payment.getLastPaid() != null;
assert new BigDecimal("781.46").equals(account.getBalance());
}
}.run();
// Wait until some short time after another execution would
// have occurred to check it really stops
pause(2000l);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert new BigDecimal("781.46").equals(account.getBalance());
}
}.run();
}
finally
{
if (quartzTriggerHandle != null)
{
quartzTriggerHandle.cancel();
}
}
}
@Test
public void scheduleCronWithStartAndEndTime() throws Exception
{
try
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("110.00"));
setValue("#{newPayment.paymentCron}", "*/2 * * * * ?" );
}
@Override
protected void invokeApplication() throws Exception
{
// schedule a the repeating job and immediately pause it
// this allows you to carefully control how long the timer
// runs for
Payment payment = (Payment) getValue("#{newPayment}");
payment.setPaymentDate(new java.sql.Timestamp( System.currentTimeMillis() + REPEATING.getInterval()));
payment.setPaymentEndDate(new java.sql.Timestamp( (long) (System.currentTimeMillis() + (REPEATING.getInterval() * 4.5))));
assert "persisted".equals(invokeMethod("#{paymentHome.saveAndScheduleCron}"));
quartzTriggerHandle = payment.getQuartzTriggerHandle();
quartzTriggerHandle.pause();
}
@Override
protected void renderResponse() throws Exception
{
// Check the job exists
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("IRS");
assert payment.getAmount().equals(new BigDecimal("110.00"));
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
assert payment.getActive();
}
}.run();
// Start the triggerHandle, wait a lot shorter than the job takes
// At this point the job should have executed once exactly
quartzTriggerHandle.resume();
pause((long) (REPEATING.getInterval() * 0.1));
quartzTriggerHandle.pause();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert "*/2 * * * * ?".equals(payment.getPaymentCron());
assert new BigDecimal("1001.46").equals(account.getBalance());
}
}.run();
// Start the triggerHandle, wait until some short time after the initial
// expiration
quartzTriggerHandle.resume();
pause(REPEATING.getInterval());
quartzTriggerHandle.pause();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
// Job should have run twice
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert "*/2 * * * * ?".equals(payment.getPaymentCron());
assert payment.getLastPaid() != null;
assert new BigDecimal("891.46").equals(account.getBalance());
paymentId = payment.getId();
}
}.run();
// Start the triggerHandle, wait until some short time after the
// job triggers once
quartzTriggerHandle.resume();
pause(2000l);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
// Job should have run twice
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert "*/2 * * * * ?".equals(payment.getPaymentCron());
assert payment.getLastPaid() != null;
assert new BigDecimal("781.46").equals(account.getBalance());
paymentId = payment.getId();
}
}.run();
// Wait until some short time after another execution would
// have occurred to check it really stops
pause(2000l);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert new BigDecimal("781.46").equals(account.getBalance());
}
}.run();
}
finally
{
if (quartzTriggerHandle != null)
{
quartzTriggerHandle.cancel();
}
}
}
private void pause(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
}
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/AsynchronousTest.java
Index: AsynchronousTest.java
===================================================================
package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.example.quartz.Payment.Frequency.ONCE;
import java.math.BigDecimal;
import org.jboss.seam.example.quartz.Account;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.testng.annotations.Test;
/**
*
* @author Pete Muir
*
*/
// Actually this doesn't happen in the example, but lets test it here to keep
// all quartz tests in one place
public class AsynchronousTest extends DBUnitSeamTest
{
@Override
protected void prepareDBUnitOperations() {
beforeTestOperations.add(
new DataSetOperation("org/jboss/seam/example/quartz/test/BaseData.xml")
);
}
@Test
public void testAsynchronous() throws Exception
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("100.00"));
setValue("#{newPayment.paymentFrequency}", ONCE);
}
@Override
protected void invokeApplication() throws Exception
{
invokeMethod("#{paymentHome.scheduleAndSaveAsynchronously}");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
}
}.run();
// Wait, let quartz execute the async method which schedules the job
// for immediate execution
pause(50);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("100.00").equals(payment.getAmount());
//assert !payment.getActive();
//assert payment.getLastPaid() != null;
assert new BigDecimal("901.46").equals(account.getBalance());
}
}.run();
}
private void pause(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
}
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/testng.xml
Index: testng.xml
===================================================================
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="Quartz Example" verbose="2" parallel="false">
<test name="Quartz Example">
<parameter name="datasourceJndiName" value="java:/DefaultDS"/>
<classes>
<class name="org.jboss.seam.example.quartz.test.AccountTest" />
<class name="org.jboss.seam.example.quartz.test.CronTest" />
<class name="org.jboss.seam.example.quartz.test.NthBusinessDayTest" />
<class name="org.jboss.seam.example.quartz.test.OnceTest" />
<class name="org.jboss.seam.example.quartz.test.RepeatingTest" />
<class name="org.jboss.seam.example.quartz.test.AsynchronousTest" />
<class name="org.jboss.seam.example.quartz.test.EventsTest" />
</classes>
</test>
</suite>
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/TestPaymentController.java
Index: TestPaymentController.java
===================================================================
package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.annotations.Install.MOCK;
import java.sql.Timestamp;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.async.QuartzTriggerHandle;
import org.jboss.seam.async.Schedule;
import org.jboss.seam.async.TimerSchedule;
import org.jboss.seam.core.Events;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.example.quartz.PaymentController;
import org.jboss.seam.log.Log;
/**
* @author Pete Muir
*
*/
@Name("paymentHome")
@Install(precedence=MOCK)
public class TestPaymentController extends PaymentController
{
@In TestPaymentProcessor processor;
@Logger Log log;
public String scheduleAndSaveAsynchronously()
{
String result = persist();
Payment payment = getInstance();
log.info("scheduling instance #0", payment);
QuartzTriggerHandle handle = processor.schedulePayment(payment.getPaymentDate(),
payment.getPaymentFrequency().getInterval(),
payment.getPaymentEndDate(),
payment);
payment.setQuartzTriggerHandle( handle );
return result;
}
public void scheduleAndSaveUsingAsynchronousEvent()
{
persist();
Events.instance().raiseAsynchronousEvent("org.jboss.seam.example.quartz.test.scheduleAndSave", getInstance());
}
public void scheduleAndSaveUsingTimedEvent()
{
persist();
// A simple once-only which exprires in 1000ms
Schedule schedule = new TimerSchedule( new Timestamp( System.currentTimeMillis() + 1000l ) );
Events.instance().raiseTimedEvent("org.jboss.seam.example.quartz.test.scheduleAndSave", schedule, getInstance());
}
public void scheduleAndSaveWithTransactionEvents()
{
TransactionStatus.clear();
Events.instance().raiseTransactionSuccessEvent("org.jboss.seam.example.quartz.test.transactionSuccess", getInstance());
Events.instance().raiseTransactionCompletionEvent("org.jboss.seam.example.quartz.test.transactionCompletion", getInstance());
try
{
super.saveAndSchedule();
}
catch (Exception e)
{
e.printStackTrace();
}
}
@Override
public Class<Payment> getEntityClass()
{
return Payment.class;
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/EventsTest.java
Index: EventsTest.java
===================================================================
package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.example.quartz.Payment.Frequency.ONCE;
import java.math.BigDecimal;
import org.jboss.seam.example.quartz.Account;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.testng.annotations.Test;
/**
*
* @author Pete Muir
*
*/
// Actually this doesn't happen in the example, but lets test it here to keep
// all quartz tests in one place
public class EventsTest extends DBUnitSeamTest
{
@Override
protected void prepareDBUnitOperations() {
beforeTestOperations.add(
new DataSetOperation("org/jboss/seam/example/quartz/test/BaseData.xml")
);
}
@Test
public void testAsynchronousEvent() throws Exception
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("110.00"));
setValue("#{newPayment.paymentFrequency}", ONCE);
}
@Override
protected void invokeApplication() throws Exception
{
invokeMethod("#{paymentHome.scheduleAndSaveUsingAsynchronousEvent}");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
}
}.run();
// Wait, let quartz execute the async method which schedules the job
// for immediate execution
pause(50);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
System.out.println("running renderResponse");
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
//assert !payment.getActive();
//assert payment.getLastPaid() != null;
assert new BigDecimal("891.46").equals(account.getBalance());
}
}.run();
}
@Test
public void testTransactionSuccessEvents() throws Exception
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("110.00"));
setValue("#{newPayment.paymentFrequency}", ONCE);
}
@Override
protected void invokeApplication() throws Exception
{
invokeMethod("#{paymentHome.scheduleAndSaveWithTransactionEvents}");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
}
}.run();
// Wait, let quartz execute the async method which schedules the job
// for immediate execution
pause(50);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
System.out.println("running renderResponse");
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
//assert !payment.getActive();
//assert payment.getLastPaid() != null;
assert new BigDecimal("891.46").equals(account.getBalance());
assert (Boolean) getValue("#{transactionStatus.transactionCompleted}");
assert (Boolean) getValue("#{transactionStatus.transactionSucceded}");
assert payment.getId().equals(getValue("#{transactionStatus.id}"));
}
}.run();
}
@Test
public void testTimedEvent() throws Exception
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("120.00"));
setValue("#{newPayment.paymentFrequency}", ONCE);
}
@Override
protected void invokeApplication() throws Exception
{
invokeMethod("#{paymentHome.scheduleAndSaveUsingTimedEvent}");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
}
}.run();
// Wait, let quartz execute the async method which schedules the job
// for immediate execution
pause(1000l);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
System.out.println("running renderResponse");
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("120.00").equals(payment.getAmount());
//assert !payment.getActive();
//assert payment.getLastPaid() != null;
assert new BigDecimal("881.46").equals(account.getBalance());
}
}.run();
}
private void pause(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
}
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/NthBusinessDayTest.java
Index: NthBusinessDayTest.java
===================================================================
package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.async.NthBusinessDay.BusinessDayIntervalType.WEEKLY;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Date;
import org.jboss.seam.async.QuartzTriggerHandle;
import org.jboss.seam.example.quartz.Account;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.testng.annotations.Test;
/**
*
* @author Pete Muir
*
*/
public class NthBusinessDayTest
extends DBUnitSeamTest
{
private QuartzTriggerHandle quartzTriggerHandle;
@Override
protected void prepareDBUnitOperations() {
beforeTestOperations.add(
new DataSetOperation("org/jboss/seam/example/quartz/test/BaseData.xml")
);
}
@Test
public void scheduleNthBusinessDay() throws Exception
{
try
{
new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("100.00"));
setValue("#{newPayment.paymentNthBusinessDay.interval}", WEEKLY);
}
@Override
protected void invokeApplication() throws Exception
{
assert "persisted".equals(invokeMethod("#{paymentHome.saveAndScheduleNthBusinessDay}"));
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("IRS");
assert payment.getAmount().equals(new BigDecimal("100.00"));
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
quartzTriggerHandle = payment.getQuartzTriggerHandle();
}
}.run();
// test that the payment is around
new FacesRequest("/search.xhtml") {
@Override
protected void beforeRequest() {
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception {
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
}
}.run();
}
finally
{
// Always cancel the job
if (quartzTriggerHandle != null)
{
quartzTriggerHandle.cancel();
quartzTriggerHandle = null;
}
}
}
// Can't do much here until we deal with business days better.
// Could provide an Test version of NthBusinessDays that has deterministic
// behaviour
@Test
public void scheduleNthBusinessDayWithStartAndEnd() throws Exception
{
final Date startDate = new Timestamp(System.currentTimeMillis() + 1000);
final Date endDate = new Timestamp(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 7);
try
{
new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("100.00"));
setValue("#{newPayment.paymentNthBusinessDay.interval}", WEEKLY);
setValue("#{newPayment.paymentDate}", startDate);
setValue("#{newPayment.paymentEndDate}", endDate);
}
@Override
protected void invokeApplication() throws Exception
{
assert "persisted".equals(invokeMethod("#{paymentHome.saveAndScheduleNthBusinessDay}"));
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("IRS");
assert payment.getAmount().equals(new BigDecimal("100.00"));
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
quartzTriggerHandle = payment.getQuartzTriggerHandle();
}
}.run();
// test that the payment is around
new FacesRequest("/search.xhtml") {
@Override
protected void beforeRequest() {
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception {
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
assert account.getPayments().get(0).getPaymentDate().equals(startDate);
assert account.getPayments().get(0).getPaymentEndDate().equals(endDate);
}
}.run();
}
finally
{
// Always cancel the job
if (quartzTriggerHandle != null)
{
quartzTriggerHandle.cancel();
quartzTriggerHandle = null;
}
}
}
@Test
public void scheduleNthBusinessDayWithStart() throws Exception
{
final Date startDate = new Timestamp(System.currentTimeMillis() + 1000);
try
{
new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("100.00"));
setValue("#{newPayment.paymentNthBusinessDay.interval}", WEEKLY);
setValue("#{newPayment.paymentDate}", startDate);
}
@Override
protected void invokeApplication() throws Exception
{
assert "persisted".equals(invokeMethod("#{paymentHome.saveAndScheduleNthBusinessDay}"));
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("IRS");
assert payment.getAmount().equals(new BigDecimal("100.00"));
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
quartzTriggerHandle = payment.getQuartzTriggerHandle();
}
}.run();
// test that the payment is around
new FacesRequest("/search.xhtml") {
@Override
protected void beforeRequest() {
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception {
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
assert account.getPayments().get(0).getPaymentDate().equals(startDate);
}
}.run();
}
finally
{
// Always cancel the job
if (quartzTriggerHandle != null)
{
quartzTriggerHandle.cancel();
quartzTriggerHandle = null;
}
}
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/TransactionStatus.java
Index: TransactionStatus.java
===================================================================
package org.jboss.seam.example.quartz.test;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.Contexts;
/**
* @author Pete Muir
*
*/
@Name("transactionStatus")
@Scope(ScopeType.APPLICATION)
@AutoCreate
public class TransactionStatus
{
private Object id;
private boolean transactionSucceded;
private boolean transactionCompleted;
/**
* @return the transactionSuccess
*/
public boolean getTransactionSucceded()
{
return this.transactionSucceded;
}
/**
* @param transactionSuccess the transactionSuccess to set
*/
public void setTransactionSucceded(boolean transactionSuccess)
{
this.transactionSucceded = transactionSuccess;
}
/**
* @return the transactionCompleted
*/
public boolean getTransactionCompleted()
{
return this.transactionCompleted;
}
/**
* @param transactionCompleted the transactionCompleted to set
*/
public void setTransactionCompleted(boolean transactionCompleted)
{
this.transactionCompleted = transactionCompleted;
}
public static void clear()
{
Contexts.getApplicationContext().remove("transactionStatus");
}
public static TransactionStatus instance()
{
return (TransactionStatus) Component.getInstance("transactionStatus");
}
/**
* @return the id
*/
public Object getId()
{
return this.id;
}
/**
* @param id the id to set
*/
public void setId(Object id)
{
this.id = id;
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/TestPaymentProcessor.java
Index: TestPaymentProcessor.java
===================================================================
package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.annotations.Install.MOCK;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.EntityManager;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Observer;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.annotations.async.Asynchronous;
import org.jboss.seam.annotations.async.Expiration;
import org.jboss.seam.annotations.async.FinalExpiration;
import org.jboss.seam.annotations.async.IntervalBusinessDay;
import org.jboss.seam.async.NthBusinessDay;
import org.jboss.seam.async.QuartzTriggerHandle;
import org.jboss.seam.core.Events;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.example.quartz.PaymentProcessor;
import org.jboss.seam.log.Log;
/**
* @author Pete Muir
*
*/
@Name("processor")
@Install(precedence=MOCK)
@AutoCreate
public class TestPaymentProcessor extends PaymentProcessor
{
@In
EntityManager entityManager;
@Logger Log log;
@Asynchronous
@Transactional
public QuartzTriggerHandle schedulePaymentAsynchronously(Payment payment)
{
payment = entityManager.merge(payment);
log.info("[#0] Processing cron payment #1", System.currentTimeMillis(), payment.getId());
if (payment.getActive()) {
BigDecimal balance = payment.getAccount().adjustBalance(payment.getAmount().negate());
log.info(":: balance is now #0", balance);
payment.setLastPaid(new Date());
}
return null;
}
@Observer("org.jboss.seam.example.quartz.test.scheduleAndSave")
@Transactional
public QuartzTriggerHandle schedulePayment(Payment payment)
{
payment = entityManager.merge(payment);
log.error("[#0] Processing cron payment #1", System.currentTimeMillis(), payment.getId());
if (payment.getActive()) {
BigDecimal balance = payment.getAccount().adjustBalance(payment.getAmount().negate());
log.error(":: balance is now #0", balance);
payment.setLastPaid(new Date());
}
return null;
}
@Observer("org.jboss.seam.example.quartz.test.transactionSuccess")
@Transactional
public void observeTransactionSuccess(Payment payment)
{
TransactionStatus.instance().setTransactionSucceded(true);
TransactionStatus.instance().setId(payment.getId());
}
@Observer("org.jboss.seam.example.quartz.test.transactionCompletion")
@Transactional
public void observeTransactionCompletion(Payment payment)
{
TransactionStatus.instance().setTransactionCompleted(true);
TransactionStatus.instance().setId(payment.getId());
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/AccountTest.java
Index: AccountTest.java
===================================================================
package org.jboss.seam.example.quartz.test;
import java.util.List;
import org.jboss.seam.example.quartz.Account;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.testng.annotations.Test;
/**
*
* @author Pete Muir
*
*/
public class AccountTest
extends DBUnitSeamTest
{
@Override
protected void prepareDBUnitOperations() {
beforeTestOperations.add(
new DataSetOperation("org/jboss/seam/example/quartz/test/BaseData.xml")
);
}
@Test
public void listAccounts() throws Exception
{
new FacesRequest("/search.xhtml")
{
@Override
@SuppressWarnings("unchecked")
protected void renderResponse() throws Exception
{
List<Account> accounts = (List<Account>) getValue("#{accounts.resultList}");
assert accounts.size() == 5;
}
}.run();
}
@Test
public void selectAccount() throws Exception
{
String id = new FacesRequest("/search.xhtml")
{
@Override
@SuppressWarnings("unchecked")
protected void renderResponse() throws Exception
{
assert !((Boolean)getValue("#{accountHome.idDefined}"));
}
}.run();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean) getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 0;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("Somebody");
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
}
}.run();
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/OnceTest.java
Index: OnceTest.java
===================================================================
package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.example.quartz.Payment.Frequency.ONCE;
import java.math.BigDecimal;
import org.jboss.seam.async.QuartzTriggerHandle;
import org.jboss.seam.example.quartz.Account;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.testng.annotations.Test;
/**
*
* @author Pete Muir
*
*/
public class OnceTest extends DBUnitSeamTest
{
private QuartzTriggerHandle quartzTriggerHandle;
@Override
protected void prepareDBUnitOperations() {
beforeTestOperations.add(
new DataSetOperation("org/jboss/seam/example/quartz/test/BaseData.xml")
);
}
@Test
public void scheduleOnce() throws Exception
{
try
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("100.00"));
setValue("#{newPayment.paymentFrequency}", ONCE);
}
@Override
protected void invokeApplication() throws Exception
{
assert "persisted".equals(invokeMethod("#{paymentHome.saveAndSchedule}"));
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("IRS");
assert payment.getAmount().equals(new BigDecimal("100.00"));
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
quartzTriggerHandle = payment.getQuartzTriggerHandle();
}
}.run();
// Wait, let quartz execute the job (async but straight away)
pause(50);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("100.00").equals(payment.getAmount());
assert !payment.getActive();
assert ONCE.equals(payment.getPaymentFrequency());
assert payment.getLastPaid() != null;
assert new BigDecimal("901.46").equals(account.getBalance());
}
}.run();
}
finally
{
// Always cancel the job
if (quartzTriggerHandle != null)
{
quartzTriggerHandle.cancel();
quartzTriggerHandle = null;
}
}
}
private void pause(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
}
}
}
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/BaseData.xml
Index: BaseData.xml
===================================================================
<?xml version="1.0"?>
<dataset>
<ACCOUNT
id="1"
accountNumber="23001"
balance="1001.46"
/>
<ACCOUNT
id="2"
accountNumber="23002"
balance="1002.46"
/>
<ACCOUNT
id="3"
accountNumber="23003"
balance="1003.46"
/>
<ACCOUNT
id="4"
accountNumber="23004"
balance="1004.46"
/>
<ACCOUNT
id="5"
accountNumber="23005"
balance="1005.46"
/>
<!-- This causes the payment table to be cleaned every time -->
<PAYMENT />
</dataset>
1.1 date: 2007/10/15 13:32:14; author: pmuir; state: Exp;jboss-seam/examples/quartz/src/org/jboss/seam/example/quartz/test/RepeatingTest.java
Index: RepeatingTest.java
===================================================================
package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.example.quartz.Payment.Frequency.EVERY_SECOND;
import java.math.BigDecimal;
import org.jboss.seam.async.QuartzTriggerHandle;
import org.jboss.seam.example.quartz.Account;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.example.quartz.Payment.Frequency;
import org.jboss.seam.mock.DBUnitSeamTest;
import org.testng.annotations.Test;
/**
*
* @author Pete Muir
*
*/
public class RepeatingTest
extends DBUnitSeamTest
{
private QuartzTriggerHandle quartzTriggerHandle;
private Long paymentId;
private static final Frequency REPEATING = EVERY_SECOND;
@Override
protected void prepareDBUnitOperations() {
beforeTestOperations.add(
new DataSetOperation("org/jboss/seam/example/quartz/test/BaseData.xml")
);
}
@Test
public void scheduleRepeating() throws Exception
{
try
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("110.00"));
setValue("#{newPayment.paymentFrequency}", REPEATING );
}
@Override
protected void invokeApplication() throws Exception
{
// schedule a the repeating job and immediately pause it
// this allows you to carefully control how long the timer
// runs for
assert "persisted".equals(invokeMethod("#{paymentHome.saveAndSchedule}"));
Payment payment = (Payment) getValue("#{newPayment}");
quartzTriggerHandle = payment.getQuartzTriggerHandle();
quartzTriggerHandle.pause();
}
@Override
protected void renderResponse() throws Exception
{
// Check the job exists
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("IRS");
assert payment.getAmount().equals(new BigDecimal("110.00"));
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
assert payment.getActive();
}
}.run();
// Start the triggerHandle, wait a lot shorter than the job takes
// At this point the job should have executed once exactly
quartzTriggerHandle.resume();
pause((long) (REPEATING.getInterval() * 0.1));
quartzTriggerHandle.pause();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert REPEATING.equals(payment.getPaymentFrequency());
assert new BigDecimal("891.46").equals(account.getBalance());
}
}.run();
// Start the triggerHandle, wait until some short time after the
// job triggers once
quartzTriggerHandle.resume();
pause(REPEATING.getInterval());
quartzTriggerHandle.pause();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
// Job should have run twice
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert REPEATING.equals(payment.getPaymentFrequency());
assert payment.getLastPaid() != null;
assert new BigDecimal("781.46").equals(account.getBalance());
paymentId = payment.getId();
}
}.run();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
setParameter("paymentId", paymentId.toString());
}
@Override
protected void invokeApplication() throws Exception
{
// Resume the job, then cancel it
quartzTriggerHandle.resume();
invokeMethod("#{paymentHome.cancel}");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert !payment.getActive();
assert payment.getLastPaid() != null;
assert new BigDecimal("781.46").equals(account.getBalance());
}
}.run();
// Wait until some short time after another execution would
// have occurred to check it really stops
pause((long) (REPEATING.getInterval() * 1.05));
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert new BigDecimal("781.46").equals(account.getBalance());
}
}.run();
}
finally
{
if (quartzTriggerHandle != null)
{
quartzTriggerHandle.cancel();
}
}
}
@Test
public void scheduleRepeatingWithStartAndEndTime() throws Exception
{
try
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("110.00"));
setValue("#{newPayment.paymentFrequency}", REPEATING );
}
@Override
protected void invokeApplication() throws Exception
{
// schedule a the repeating job and immediately pause it
// this allows you to carefully control how long the timer
// runs for
Payment payment = (Payment) getValue("#{newPayment}");
payment.setPaymentDate(new java.sql.Timestamp( System.currentTimeMillis() + REPEATING.getInterval()));
payment.setPaymentEndDate(new java.sql.Timestamp( (long) (System.currentTimeMillis() + (REPEATING.getInterval() * 2.5))));
assert "persisted".equals(invokeMethod("#{paymentHome.saveAndSchedule}"));
quartzTriggerHandle = payment.getQuartzTriggerHandle();
quartzTriggerHandle.pause();
}
@Override
protected void renderResponse() throws Exception
{
// Check the job exists
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = (Payment) getValue("#{newPayment}");
assert payment.getPayee().equals("IRS");
assert payment.getAmount().equals(new BigDecimal("110.00"));
assert payment.getAccount() != null;
assert payment.getAccount().getId() == 1;
assert payment.getActive();
}
}.run();
// Start the triggerHandle, wait a lot shorter than the job takes
// At this point the job should have executed zero times
quartzTriggerHandle.resume();
pause((long) (REPEATING.getInterval() * 0.1));
quartzTriggerHandle.pause();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert new BigDecimal("1001.46").equals(account.getBalance());
}
}.run();
// Start the triggerHandle, wait until some short time after the
// job triggers once
quartzTriggerHandle.resume();
pause(REPEATING.getInterval());
quartzTriggerHandle.pause();
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
// Job should have run twice
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert new BigDecimal("891.46").equals(account.getBalance());
paymentId = payment.getId();
}
}.run();
// Start the triggerHandle, wait until some short time after the
// job triggers once
quartzTriggerHandle.resume();
pause(REPEATING.getInterval());
// Thats the last job so need to pause
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
// Job should have run twice
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert new BigDecimal("781.46").equals(account.getBalance());
paymentId = payment.getId();
}
}.run();
// Start the triggerHandle, wait until some short time after the
// job would trigger again - we should be way beyond the expiry now
pause(REPEATING.getInterval());
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
assert payment.getActive();
assert payment.getLastPaid() != null;
assert new BigDecimal("781.46").equals(account.getBalance());
}
}.run();
}
finally
{
if (quartzTriggerHandle != null)
{
quartzTriggerHandle.cancel();
}
}
}
private void pause(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
}
}
}
More information about the jboss-cvs-commits
mailing list