1 package com.atlassian.scheduler.core.status;
2
3 import com.atlassian.scheduler.JobRunner;
4 import com.atlassian.scheduler.config.JobId;
5 import com.atlassian.scheduler.config.JobRunnerKey;
6 import com.atlassian.scheduler.core.AbstractSchedulerService;
7 import com.atlassian.scheduler.core.util.ParameterMapSerializer;
8 import com.atlassian.scheduler.status.JobDetails;
9 import org.junit.Before;
10 import org.junit.Rule;
11 import org.junit.Test;
12 import org.mockito.Mock;
13 import org.mockito.junit.MockitoJUnit;
14 import org.mockito.junit.MockitoRule;
15
16 import java.util.Date;
17
18 import static com.atlassian.scheduler.config.RunMode.RUN_LOCALLY;
19 import static com.atlassian.scheduler.config.RunMode.RUN_ONCE_PER_CLUSTER;
20 import static com.atlassian.scheduler.config.Schedule.runOnce;
21 import static com.atlassian.scheduler.core.Constants.BYTES_DEADF00D;
22 import static com.atlassian.scheduler.core.Constants.BYTES_PARAMETERS;
23 import static com.atlassian.scheduler.core.Constants.EMPTY_MAP;
24 import static com.atlassian.scheduler.core.Constants.JOB_ID;
25 import static com.atlassian.scheduler.core.Constants.KEY;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertFalse;
28 import static org.junit.Assert.assertNull;
29 import static org.junit.Assert.assertTrue;
30 import static org.mockito.Mockito.mock;
31 import static org.mockito.Mockito.when;
32
33
34
35
36 @SuppressWarnings({"ConstantConditions", "ResultOfObjectAllocationIgnored"})
37 public class LazyJobDetailsTest {
38 @Rule
39 public MockitoRule mockitoRule = MockitoJUnit.rule();
40
41 @Mock
42 private AbstractSchedulerService schedulerService;
43
44 @Before
45 public void setUp() {
46 when(schedulerService.getParameterMapSerializer()).thenReturn(new ParameterMapSerializer());
47 }
48
49 @Test(expected = IllegalArgumentException.class)
50 public void testSchedulerServiceNull() {
51 new LazyJobDetails(null, JOB_ID, KEY, RUN_LOCALLY, runOnce(null), new Date(), BYTES_PARAMETERS);
52 }
53
54 @Test(expected = IllegalArgumentException.class)
55 public void testJobIdNull() {
56 new LazyJobDetails(schedulerService, null, KEY, RUN_LOCALLY, runOnce(null), new Date(), BYTES_PARAMETERS);
57 }
58
59 @Test(expected = IllegalArgumentException.class)
60 public void testJobRunnerKeyNull() {
61 new LazyJobDetails(schedulerService, JOB_ID, null, RUN_LOCALLY, runOnce(null), new Date(), BYTES_PARAMETERS);
62 }
63
64 @Test(expected = IllegalArgumentException.class)
65 public void testRunModeNull() {
66 new LazyJobDetails(schedulerService, JOB_ID, KEY, null, runOnce(null), new Date(), BYTES_PARAMETERS);
67 }
68
69 @Test(expected = IllegalArgumentException.class)
70 public void testScheduleNull() {
71 new LazyJobDetails(schedulerService, JOB_ID, KEY, RUN_LOCALLY, null, new Date(), BYTES_PARAMETERS);
72 }
73
74 @Test
75 public void testValues1() {
76 final Date nextRunTime = new Date();
77 final Date expectedNextRunTime = new Date(nextRunTime.getTime());
78
79 when(schedulerService.getJobRunner(KEY)).thenReturn(mock(JobRunner.class));
80
81 final JobDetails jobDetails = new LazyJobDetails(schedulerService, JOB_ID, KEY, RUN_LOCALLY, runOnce(null),
82 nextRunTime, null);
83
84 assertEquals(JOB_ID, jobDetails.getJobId());
85 assertEquals(KEY, jobDetails.getJobRunnerKey());
86 assertEquals(RUN_LOCALLY, jobDetails.getRunMode());
87 assertEquals(runOnce(null), jobDetails.getSchedule());
88
89 assertTrue("Should be runnable", jobDetails.isRunnable());
90 assertEquals(EMPTY_MAP, jobDetails.getParameters());
91
92 nextRunTime.setTime(42L);
93 assertEquals(expectedNextRunTime, jobDetails.getNextRunTime());
94 jobDetails.getNextRunTime().setTime(42L);
95 assertEquals(expectedNextRunTime, jobDetails.getNextRunTime());
96 }
97
98 @Test
99 public void testValues2() {
100 when(schedulerService.getJobRunner(JobRunnerKey.of("z"))).thenReturn(mock(JobRunner.class));
101
102 final JobDetails jobDetails = new LazyJobDetails(schedulerService, JobId.of("x"), JobRunnerKey.of("z"),
103 RUN_ONCE_PER_CLUSTER, runOnce(new Date(42L)), null, BYTES_DEADF00D);
104
105 assertEquals(JobId.of("x"), jobDetails.getJobId());
106 assertEquals(JobRunnerKey.of("z"), jobDetails.getJobRunnerKey());
107 assertEquals(RUN_ONCE_PER_CLUSTER, jobDetails.getRunMode());
108 assertEquals(runOnce(new Date(42L)), jobDetails.getSchedule());
109 assertNull(jobDetails.getNextRunTime());
110
111 assertFalse("Should not be runnable", jobDetails.isRunnable());
112 }
113 }