View Javadoc

1   package com.atlassian.scheduler.core;
2   
3   import com.atlassian.scheduler.config.JobConfig;
4   import com.atlassian.scheduler.config.JobId;
5   import com.atlassian.scheduler.config.JobRunnerKey;
6   import com.atlassian.scheduler.config.Schedule;
7   import com.atlassian.scheduler.core.impl.MemoryRunDetailsDao;
8   import com.atlassian.scheduler.status.JobDetails;
9   import com.google.common.collect.ImmutableList;
10  import com.google.common.collect.ImmutableSet;
11  import org.hamcrest.Matchers;
12  
13  import javax.annotation.Nonnull;
14  import javax.annotation.Nullable;
15  import java.util.Arrays;
16  import java.util.Date;
17  import java.util.List;
18  import java.util.Set;
19  import java.util.concurrent.atomic.AtomicInteger;
20  
21  import static java.util.concurrent.TimeUnit.MILLISECONDS;
22  import static org.junit.Assert.assertThat;
23  
24  /**
25   * A test fixture for the {@code AbstractSchedulerService}.
26   *
27   * @since v1.6.0
28   */
29  class SchedulerServiceFixture extends AbstractSchedulerService {
30      private static final long HACK_NANO_STEP = MILLISECONDS.toNanos(30L);
31  
32      final AtomicInteger startImplCalls = new AtomicInteger();
33      final AtomicInteger standbyImplCalls = new AtomicInteger();
34      final AtomicInteger shutdownImplCalls = new AtomicInteger();
35  
36      private volatile boolean hackAwaitNanos;
37  
38      SchedulerServiceFixture() {
39          super(new MemoryRunDetailsDao());
40      }
41  
42      @Override
43      protected void startImpl() {
44          startImplCalls.incrementAndGet();
45      }
46  
47      @Override
48      protected void standbyImpl() {
49          standbyImplCalls.incrementAndGet();
50      }
51  
52      @Override
53      protected void shutdownImpl() {
54          shutdownImplCalls.incrementAndGet();
55      }
56  
57      @Nonnull
58      @Override
59      public Set<JobRunnerKey> getJobRunnerKeysForAllScheduledJobs() {
60          return ImmutableSet.of();
61      }
62  
63      @Override
64      public void scheduleJob(JobId jobId, JobConfig jobConfig) {
65      }
66  
67      @Override
68      public void unscheduleJob(JobId jobId) {
69      }
70  
71      @Nullable
72      @Override
73      public Date calculateNextRunTime(Schedule schedule) {
74          return null;
75      }
76  
77      @Override
78      public JobDetails getJobDetails(JobId jobId) {
79          return null;
80      }
81  
82      @Nonnull
83      @Override
84      public List<JobDetails> getJobsByJobRunnerKey(JobRunnerKey jobRunnerKey) {
85          return ImmutableList.of();
86      }
87  
88      @Override
89      long awaitNanos(long nanosLeft) throws InterruptedException {
90          if (hackAwaitNanos) {
91              return nanosLeft - HACK_NANO_STEP;
92          }
93          return super.awaitNanos(nanosLeft);
94      }
95  
96      void hackAwaitNanos() {
97          hackAwaitNanos = true;
98      }
99  
100     void assertState(int expectedStartCount, int expectedStandbyCount, int expectedShutdownCount, State state) {
101         assertThat("assertState(start, standby, shutdown, state)",
102                 Arrays.<Object>asList(startImplCalls.get(), standbyImplCalls.get(), shutdownImplCalls.get(), getState()),
103                 Matchers.<Object>contains(expectedStartCount, expectedStandbyCount, expectedShutdownCount, state));
104     }
105 
106 }