1 package com.atlassian.scheduler.core.status;
2
3 import com.atlassian.scheduler.SchedulerRuntimeException;
4 import com.atlassian.scheduler.config.JobId;
5 import com.atlassian.scheduler.config.JobRunnerKey;
6 import com.atlassian.scheduler.core.JobRunnerNotRegisteredException;
7 import com.atlassian.scheduler.status.JobDetails;
8 import org.junit.Test;
9
10 import java.io.Serializable;
11 import java.util.Date;
12 import java.util.Map;
13
14 import static com.atlassian.scheduler.config.RunMode.RUN_LOCALLY;
15 import static com.atlassian.scheduler.config.RunMode.RUN_ONCE_PER_CLUSTER;
16 import static com.atlassian.scheduler.config.Schedule.runOnce;
17 import static com.atlassian.scheduler.core.Constants.JOB_ID;
18 import static com.atlassian.scheduler.core.Constants.KEY;
19 import static org.junit.Assert.assertArrayEquals;
20 import static org.junit.Assert.assertEquals;
21 import static org.junit.Assert.assertFalse;
22 import static org.junit.Assert.assertNull;
23 import static org.junit.Assert.fail;
24
25
26
27
28 @SuppressWarnings({"ResultOfObjectAllocationIgnored", "CastToConcreteClass", "ConstantConditions"})
29 public class UnusableJobDetailsTest {
30 private static final byte[] RAW_PARAMETERS = new byte[]{1, 2, 3, 4};
31 private static final Throwable CAUSE = new Throwable("For test");
32
33 @Test(expected = IllegalArgumentException.class)
34 public void testJobIdNull() {
35 new UnusableJobDetails(null, KEY, RUN_LOCALLY, runOnce(null), new Date(), RAW_PARAMETERS, CAUSE);
36 }
37
38 @Test(expected = IllegalArgumentException.class)
39 public void testJobRunnerKeyNull() {
40 new UnusableJobDetails(JOB_ID, null, RUN_LOCALLY, runOnce(null), new Date(), RAW_PARAMETERS, CAUSE);
41 }
42
43 @Test(expected = IllegalArgumentException.class)
44 public void testRunModeNull() {
45 new UnusableJobDetails(JOB_ID, KEY, null, runOnce(null), new Date(), RAW_PARAMETERS, CAUSE);
46 }
47
48 @Test(expected = IllegalArgumentException.class)
49 public void testScheduleNull() {
50 new UnusableJobDetails(JOB_ID, KEY, RUN_LOCALLY, null, new Date(), RAW_PARAMETERS, CAUSE);
51 }
52
53 @Test
54 public void testGetParametersWithNoCauseProvided() {
55 final JobDetails jobDetails = new UnusableJobDetails(JOB_ID, KEY, RUN_LOCALLY, runOnce(null), null, null, null);
56 assertNull(((AbstractJobDetails) jobDetails).getRawParameters());
57 try {
58 final Map<String, Serializable> parameters = jobDetails.getParameters();
59 fail("Should throw SchedulerRuntimeException, but got: " + parameters);
60 } catch (SchedulerRuntimeException sre) {
61 final JobRunnerNotRegisteredException cause = (JobRunnerNotRegisteredException) sre.getCause();
62 assertEquals(KEY, cause.getJobRunnerKey());
63 }
64 }
65
66 @Test
67 public void testGetParametersWithCauseProvided() {
68 final JobDetails jobDetails = new UnusableJobDetails(JOB_ID, KEY, RUN_LOCALLY, runOnce(null), null, RAW_PARAMETERS, CAUSE);
69 assertArrayEquals(RAW_PARAMETERS, ((AbstractJobDetails) jobDetails).getRawParameters());
70 try {
71 final Map<String, Serializable> parameters = jobDetails.getParameters();
72 fail("Should throw SchedulerRuntimeException, but got: " + parameters);
73 } catch (SchedulerRuntimeException sre) {
74 assertEquals(CAUSE, sre.getCause());
75 }
76 }
77
78 @Test
79 public void testValues1() {
80 final Date nextRunTime = new Date();
81 final Date expectedNextRunTime = new Date(nextRunTime.getTime());
82
83 final JobDetails jobDetails = new UnusableJobDetails(JOB_ID, KEY, RUN_LOCALLY, runOnce(null), nextRunTime, RAW_PARAMETERS, null);
84 assertEquals(JOB_ID, jobDetails.getJobId());
85 assertEquals(KEY, jobDetails.getJobRunnerKey());
86 assertEquals(RUN_LOCALLY, jobDetails.getRunMode());
87 assertEquals(runOnce(null), jobDetails.getSchedule());
88 assertArrayEquals(RAW_PARAMETERS, ((AbstractJobDetails) jobDetails).getRawParameters());
89 assertFalse("Should not be runnable", jobDetails.isRunnable());
90
91 nextRunTime.setTime(42L);
92 assertEquals(expectedNextRunTime, jobDetails.getNextRunTime());
93 jobDetails.getNextRunTime().setTime(42L);
94 assertEquals(expectedNextRunTime, jobDetails.getNextRunTime());
95 }
96
97 @Test
98 public void testValues2() {
99 final JobDetails jobDetails = new UnusableJobDetails(JobId.of("x"), JobRunnerKey.of("z"), RUN_ONCE_PER_CLUSTER,
100 runOnce(new Date(42L)), null, null, CAUSE);
101 assertEquals(JobId.of("x"), jobDetails.getJobId());
102 assertEquals(JobRunnerKey.of("z"), jobDetails.getJobRunnerKey());
103 assertEquals(RUN_ONCE_PER_CLUSTER, jobDetails.getRunMode());
104 assertEquals(runOnce(new Date(42L)), jobDetails.getSchedule());
105 assertNull(jobDetails.getNextRunTime());
106 assertNull(((AbstractJobDetails) jobDetails).getRawParameters());
107 assertFalse("Should not be runnable", jobDetails.isRunnable());
108 }
109 }