Package er.quartzscheduler.foundation

Source Code of er.quartzscheduler.foundation.ERQSJobSupervisorTest

package er.quartzscheduler.foundation;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.List;
import java.util.Set;

import org.junit.Test;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;

import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;

import er.quartzscheduler.util.ERQSSchedulerFP4Test;

public class ERQSJobSupervisorTest {

  @Test
  public void testBuildTriggerName() throws SchedulerException
  {
    ERQSJobSupervisor js = new ERQSJobSupervisor();
    String name = js.buildTriggerName("name");
    assertEquals(name, "name" + ERQSJobSupervisor.TRIGGER_SUFFIX);
  }

  @Test
  public void testBuildGroup() throws SchedulerException
  {
    ERQSJobSupervisor js = new ERQSJobSupervisor();
    String group = js.buildGroup("group");
    assertEquals(group, ERQSJobSupervisor.GROUP_NAME_PREFIX + "group");
    group = js.buildGroup(null);
    assertEquals(group, ERQSJobSupervisor.GROUP_NAME_PREFIX + Scheduler.DEFAULT_GROUP);
  }

  @Test
  public void testIsJobDescriptionValid() throws SchedulerException
  {
    ERQSJobSupervisor js = new ERQSJobSupervisor();
    ERQSJobDescription4Test jd = new ERQSJobDescription4Test();
    jd.setClassPath("er.quartzscheduler.foundation.ERQSJobSupervisor");
    jd.setName(null);
    js.isJobDescriptionValid(jd);
    assertFalse(js.isJobDescriptionValid(jd));
    jd = new ERQSJobDescription4Test();
    jd.setClassPath("er.quartzscheduler.foundation.ERQSJobSupervisor");
    jd.setGroup(null);
    assertTrue(js.isJobDescriptionValid(jd));
    jd = new ERQSJobDescription4Test();
    jd.setClassPath("er.quartzscheduler.foundation.ERQSJobSupervisor");
    jd.setCronExpression(null); // A null cron expression is valid
    assertTrue(js.isJobDescriptionValid(jd));
    jd = new ERQSJobDescription4Test();
    jd.setClassPath(null);
    assertFalse(js.isJobDescriptionValid(jd));
  }

  @Test
  public void testGetClassString() throws SchedulerException
  {
    ERQSJobSupervisor js = new ERQSJobSupervisor();
    Class<? extends ERQSJob> aClass = (Class<? extends ERQSJob>) js.getClass("er.quartzscheduler.foundation.ERQSJobSupervisor");
    assertEquals(ERQSJobSupervisor.class, aClass);
  }

  @Test
  public void testBuildJobDetail() throws SchedulerException
  {
    ERQSJobExecutionContext4Test jec = new ERQSJobExecutionContext4Test(true);
    ERQSSchedulerFP4Test fp = new ERQSSchedulerFP4Test();
    jec.setSchedulerFP(fp);

    ERQSJobSupervisor js = new ERQSJobSupervisor();
    js.execute(jec);
   
    ERQSJobDescription4Test jd = new ERQSJobDescription4Test();
    jd.setIsEnterpriseObject(false);
    jd.setClassPath("er.quartzscheduler.foundation.ERQSJobSupervisor");
    jd.setCronExpression("0 0 12 * * ?");
    JobDetail job = js.buildJobDetail(jd);
    assertNotNull(job);
  }

  @Test
  public void testBuildTrigger() throws SchedulerException
  {
    ERQSJobExecutionContext4Test jec = new ERQSJobExecutionContext4Test(true);
    ERQSSchedulerFP4Test fp = new ERQSSchedulerFP4Test();
    jec.setSchedulerFP(fp);

    ERQSJobSupervisor js = new ERQSJobSupervisor();
    js.execute(jec);
   
    ERQSJobDescription4Test jd = new ERQSJobDescription4Test();
    jd.setIsEnterpriseObject(false);
    jd.setClassPath("er.quartzscheduler.foundation.ERQSJobSupervisor");
    jd.setCronExpression("0 0 12 * * ?");
    JobDetail job = js.buildJobDetail(jd);
    Trigger t = js.buildTrigger(jd.name, jd.group, jd.cronExpression(), new JobDataMap(), job);
    assertNotNull(t);
  }

  @Test
  public void testExecute() throws SchedulerException
  {
    ERQSJobExecutionContext4Test jec = new ERQSJobExecutionContext4Test(true);
    ERQSSchedulerFP4Test fp = new ERQSSchedulerFP4Test();
    jec.setSchedulerFP(fp);
 
    ERQSJobSupervisor js = new ERQSJobSupervisor();
    js.execute(jec);
    assertNotNull(js.getSchedulerFPInstance());
    assertNotNull(js.getJobContext());
  }

  @Test
  public void testBuildTriggerForJob() throws SchedulerException
  {
    ERQSJobExecutionContext4Test jec = new ERQSJobExecutionContext4Test(true);
    ERQSSchedulerFP4Test fp = new ERQSSchedulerFP4Test();
    jec.setSchedulerFP(fp);

    ERQSJobSupervisor js = new ERQSJobSupervisor();
    js.execute(jec);
   
    ERQSJobDescription4Test jd = new ERQSJobDescription4Test();
    // We use a NSDictionary because there is a constructor easy to use
    jd.setJobInfos(new NSDictionary<String, Object>("Value", "key"));
    jd.setIsEnterpriseObject(false);
    jd.setClassPath("er.quartzscheduler.foundation.ERQSJobSupervisor");
    jd.setCronExpression("0 0 12 * * ?");
    JobDetail job = js.buildJobDetail(jd);
    assertEquals(job.getJobDataMap().getString("key"), "Value");
   
    Trigger t = js.buildTriggerForJob(jd, job);
    assertNotNull(t);
  }

  /**
   * We need to test add and remove in the same test because when the scheduler is created, it's a singleton that remains in
   * memory until the last test is executed.
   *
   * @throws SchedulerException
   */
  @Test
  public void testAddAndRemoveJob2Scheduler() throws SchedulerException
  {
    ERQSJobExecutionContext4Test jec = new ERQSJobExecutionContext4Test(true);
    ERQSSchedulerFP4Test fp = new ERQSSchedulerFP4Test();
    jec.setSchedulerFP(fp);
 
    ERQSJobSupervisor js = new ERQSJobSupervisor();
    js.execute(jec);
    ERQSJobDescription4Test jd = new ERQSJobDescription4Test();
    jd.setClassPath("er.quartzscheduler.foundation.ERQSExtendedAbstractJob4Test");
    jd.setCronExpression("0 0 12 * * ?");
    jd.setIsEnterpriseObject(false);
    js.addJob2Scheduler(jd);
    JobKey aJobKey = new JobKey(ERQSJobDescription4Test.DEF_JOB_NAME,  ERQSJobSupervisor.GROUP_NAME_PREFIX + ERQSJobDescription4Test.DEF_GROUP_NAME);
    JobDetail job = fp.getScheduler().getJobDetail(aJobKey);
    assertNotNull(job);
   
    Set<JobKey> aSet = js.getScheduledJobKeys();
    assertTrue(aSet.size() == 1);
   
    ERQSJobDescription4Test newJd = new ERQSJobDescription4Test();
    newJd.setName("newName");
    NSArray<ERQSJobDescription> newJobsList = new NSArray<ERQSJobDescription>(newJd);
    // As the the new list of jobs doesn't contain the previous one, it must be removed.
    js.removeObsoleteJobs(newJobsList);
    aSet = js.getScheduledJobKeys();
    assertTrue(aSet.size() == 0);
  }

  /**
   * We need to test add and remove in the same test because when the scheduler is created, it's a singleton that remains in
   * memory until the last test is executed.<p>
   * Not the best option.
   *
   * @throws SchedulerException
   */
  @Test
  public void testJobs2AddOrModify() throws SchedulerException
  {
    ERQSJobExecutionContext4Test jec = new ERQSJobExecutionContext4Test(true);
    ERQSSchedulerFP4Test fp = new ERQSSchedulerFP4Test();
    jec.setSchedulerFP(fp);
 
    ERQSJobSupervisor js = new ERQSJobSupervisor();
    js.execute(jec);
    ERQSJobDescription4Test jd1 = new ERQSJobDescription4Test();
    jd1.setName("jd1");
    jd1.setClassPath("er.quartzscheduler.foundation.ERQSExtendedAbstractJob4Test");
    jd1.setCronExpression("0 0 12 * * ?");
    jd1.setIsEnterpriseObject(false);
 
    ERQSJobDescription4Test jd2 = new ERQSJobDescription4Test();
    jd2.setName("jd2");
    jd2.setClassPath("er.quartzscheduler.foundation.ERQSExtendedAbstractJob4Test");
    jd2.setCronExpression("0 0 12 * * ?");
    jd2.setIsEnterpriseObject(false);
    NSArray<ERQSJobDescription> jds = new NSArray<ERQSJobDescription>(new ERQSJobDescription4Test[] {jd1, jd2});
    js.addOrModifyJobs(jds);
    Set<JobKey> aSet = js.getScheduledJobKeys();
    assertTrue(aSet.size() == 2);
    jd2.setCronExpression("0 0 6 * * ?");
    JobKey jobKey4jd2 = js.getJobKeyForJobDescription(jd2);
 
    JobDetail job4jd2 = fp.getScheduler().getJobDetail(jobKey4jd2);
    js.modifyJob(jd2, job4jd2);
    List<? extends Trigger> triggers = fp.getScheduler().getTriggersOfJob(jobKey4jd2);
    assertNotNull(triggers);
    assertTrue(triggers.size() == 1);
    CronTrigger aTrigger = (CronTrigger)triggers.get(0);
    assertEquals(aTrigger.getCronExpression(), "0 0 6 * * ?");
    jd2.setClassPath("er.quartzscheduler.foundation.ERQSJobSupervisor");
    js.modifyJob(jd2, job4jd2);
    job4jd2 = fp.getScheduler().getJobDetail(jobKey4jd2);
    assertEquals("er.quartzscheduler.foundation.ERQSJobSupervisor", job4jd2.getJobClass().getName());   
  }

}
TOP

Related Classes of er.quartzscheduler.foundation.ERQSJobSupervisorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.