View Javadoc

1   package com.atlassian.scheduler.core.status;
2   
3   import com.atlassian.scheduler.JobRunner;
4   import com.atlassian.scheduler.config.JobRunnerKey;
5   import com.atlassian.scheduler.config.Schedule;
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.Test;
10  
11  import javax.annotation.Nonnull;
12  import javax.annotation.Nullable;
13  import java.util.Date;
14  
15  import static com.atlassian.scheduler.config.RunMode.RUN_LOCALLY;
16  import static com.atlassian.scheduler.config.RunMode.RUN_ONCE_PER_CLUSTER;
17  import static com.atlassian.scheduler.config.Schedule.forInterval;
18  import static com.atlassian.scheduler.config.Schedule.runOnce;
19  import static com.atlassian.scheduler.core.Constants.BYTES_DEADF00D;
20  import static com.atlassian.scheduler.core.Constants.BYTES_PARAMETERS;
21  import static com.atlassian.scheduler.core.Constants.JOB_ID;
22  import static com.atlassian.scheduler.core.Constants.KEY;
23  import static com.atlassian.scheduler.core.Constants.PARAMETERS;
24  import static org.hamcrest.Matchers.is;
25  import static org.hamcrest.Matchers.nullValue;
26  import static org.junit.Assert.assertSame;
27  import static org.junit.Assert.assertThat;
28  import static org.mockito.Mockito.mock;
29  import static org.mockito.Mockito.when;
30  
31  /**
32   * @since v1.0
33   */
34  @SuppressWarnings({"ResultOfObjectAllocationIgnored", "ConstantConditions"})
35  public class AbstractJobDetailsFactoryTest {
36      @Test(expected = IllegalArgumentException.class)
37      public void testSchedulerServiceIsNull() {
38          new Fixture(null, 1L, KEY, runOnce(null), new Date(), null);
39      }
40  
41      @Test(expected = IllegalArgumentException.class)
42      public void testJobIdNull() {
43          new Fixture(service(), 1L, KEY, runOnce(null), new Date(), null)
44                  .buildJobDetails(null, 1L, RUN_LOCALLY);
45      }
46  
47      @Test(expected = IllegalArgumentException.class)
48      public void testJobDataNull() {
49          new Fixture(service(), null, KEY, runOnce(null), new Date(), null)
50                  .buildJobDetails(JOB_ID, null, RUN_LOCALLY);
51      }
52  
53      @Test(expected = IllegalArgumentException.class)
54      public void testRunModeNull() {
55          new Fixture(service(), null, KEY, runOnce(null), new Date(), null)
56                  .buildJobDetails(JOB_ID, 1L, null);
57      }
58  
59      @Test(expected = IllegalArgumentException.class)
60      public void testJobRunnerKeyNull() {
61          new Fixture(service(), 1L, null, runOnce(null), new Date(), null)
62                  .buildJobDetails(JOB_ID, 1L, RUN_LOCALLY);
63      }
64  
65      @Test(expected = IllegalArgumentException.class)
66      public void testScheduleNull() {
67          new Fixture(service(), 1L, KEY, null, new Date(), null)
68                  .buildJobDetails(JOB_ID, 1L, RUN_LOCALLY);
69      }
70  
71      @Test
72      public void testNoJobRunner() {
73          final AbstractSchedulerService service = service();
74          final Date now = new Date();
75          final Fixture fixture = new Fixture(service, 1L, KEY, runOnce(now), null, null);
76          final JobDetails jobDetails = fixture.buildJobDetails(JOB_ID, 1L, RUN_LOCALLY);
77  
78          assertThat(jobDetails.getJobId(), is(JOB_ID));
79          assertThat(jobDetails.getJobRunnerKey(), is(KEY));
80          assertThat(jobDetails.getNextRunTime(), nullValue());
81          assertThat(jobDetails.getRunMode(), is(RUN_LOCALLY));
82          assertThat(jobDetails.getSchedule(), is(runOnce(now)));
83          assertThat(jobDetails.isRunnable(), is(false));
84      }
85  
86      @Test
87      public void testJobRunnerClassLoaderFails() {
88          final AbstractSchedulerService service = service();
89          final Date now = new Date();
90          final Fixture fixture = new Fixture(service, 2L, KEY, runOnce(now), null, BYTES_DEADF00D);
91          when(service.getJobRunner(KEY)).thenReturn(mock(JobRunner.class));
92  
93          final JobDetails jobDetails = fixture.buildJobDetails(JOB_ID, 2L, RUN_LOCALLY);
94  
95          assertThat(jobDetails.getJobId(), is(JOB_ID));
96          assertThat(jobDetails.getJobRunnerKey(), is(KEY));
97          assertThat(jobDetails.getNextRunTime(), nullValue());
98          assertThat(jobDetails.getRunMode(), is(RUN_LOCALLY));
99          assertThat(jobDetails.getSchedule(), is(runOnce(now)));
100         assertThat(jobDetails.isRunnable(), is(false));
101     }
102 
103     @Test
104     public void testValues() {
105         final AbstractSchedulerService service = service();
106         final Date now = new Date();
107         final Fixture fixture = new Fixture(service, 3L, KEY, forInterval(60000L, now), null, BYTES_PARAMETERS);
108         when(service.getJobRunner(KEY)).thenReturn(mock(JobRunner.class));
109 
110         final JobDetails jobDetails = fixture.buildJobDetails(JOB_ID, 3L, RUN_ONCE_PER_CLUSTER);
111 
112         assertThat(jobDetails.getJobId(), is(JOB_ID));
113         assertThat(jobDetails.getJobRunnerKey(), is(KEY));
114         assertThat(jobDetails.getNextRunTime(), nullValue());
115         assertThat(jobDetails.getRunMode(), is(RUN_ONCE_PER_CLUSTER));
116         assertThat(jobDetails.getSchedule(), is(forInterval(60000L, now)));
117         assertThat(jobDetails.isRunnable(), is(true));
118         assertThat(jobDetails.getParameters(), is(PARAMETERS));
119     }
120 
121     static AbstractSchedulerService service() {
122         final AbstractSchedulerService schedulerService = mock(AbstractSchedulerService.class);
123         when(schedulerService.getParameterMapSerializer()).thenReturn(new ParameterMapSerializer());
124         return schedulerService;
125     }
126 
127     @SuppressWarnings({"AssignmentToDateFieldFromParameter", "AssignmentToCollectionOrArrayFieldFromParameter"})
128     static class Fixture extends AbstractJobDetailsFactory<Long> {
129         private final Long expected;
130         private final JobRunnerKey jobRunnerKey;
131         private final Schedule schedule;
132         private final Date nextRunTime;
133         private final byte[] parameters;
134 
135         public Fixture(AbstractSchedulerService schedulerService, Long expected, JobRunnerKey jobRunnerKey,
136                        Schedule schedule, Date nextRunTime, byte[] parameters) {
137             super(schedulerService);
138             this.expected = expected;
139             this.jobRunnerKey = jobRunnerKey;
140             this.schedule = schedule;
141             this.nextRunTime = nextRunTime;
142             this.parameters = parameters;
143         }
144 
145         @Nonnull
146         @Override
147         protected JobRunnerKey getJobRunnerKey(Long jobData) {
148             assertSame(expected, jobData);
149             return jobRunnerKey;
150         }
151 
152         @Nonnull
153         @Override
154         protected Schedule getSchedule(Long jobData) {
155             assertSame(expected, jobData);
156             return schedule;
157         }
158 
159         @Nullable
160         @Override
161         protected Date getNextRunTime(Long jobData) {
162             assertSame(expected, jobData);
163             return nextRunTime;
164         }
165 
166         @Nullable
167         @Override
168         protected byte[] getSerializedParameters(Long jobData) {
169             assertSame(expected, jobData);
170             return parameters;
171         }
172     }
173 }
174 
175 
176