@Test public void verifyErrorAsyncDailyJob() throws Exception { JobConfig.setClock(new TestClock()); JobScheduler jobScheduler = mock(JobScheduler.class); when(jobScheduler.schedule(any(JobInfo.class))).thenThrow(new RuntimeException("test")); when(context().getSystemService(Context.JOB_SCHEDULER_SERVICE)).thenReturn(jobScheduler); final AtomicReference<Exception> reference = new AtomicReference<>(); DailyJob.scheduleAsync(DummyJobs.createBuilder(DummyJobs.SuccessJob.class), 1000, 2000, new JobRequest.JobScheduledCallback() { @Override public void onJobScheduled(int jobId, @NonNull String tag, @Nullable Exception exception) { assertThat(jobId).isEqualTo(JOB_ID_ERROR); reference.set(exception); } }); waitUntilScheduled(); assertThat(reference.get()).isInstanceOf(RuntimeException.class); }
private void verifyScheduleInNextHour(Clock clock) { JobConfig.setClock(clock); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(clock.currentTimeMillis()); int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); long start = TimeUnit.HOURS.toMillis(hour + 1) + TimeUnit.MINUTES.toMillis(minute); long end = start + TimeUnit.HOURS.toMillis(1); DailyJob.schedule(DummyJobs.createBuilder(DummyJobs.SuccessJob.class), start, end); assertThat(manager().getAllJobRequests()).hasSize(1); JobRequest request = manager().getAllJobRequests().iterator().next(); assertThat(request.getStartMs()).isEqualTo(TimeUnit.HOURS.toMillis(1)); assertThat(request.getEndMs()).isEqualTo(TimeUnit.HOURS.toMillis(2)); }
@Test public void verifyJobIdAsyncDailyJob() throws Exception { JobConfig.setClock(new TestClock()); final AtomicInteger jobId = new AtomicInteger(-2); DailyJob.scheduleAsync(DummyJobs.createBuilder(DummyJobs.SuccessJob.class), 1000, 2000, new JobRequest.JobScheduledCallback() { @Override public void onJobScheduled(int id, @NonNull String tag, @Nullable Exception exception) { jobId.set(id); } }); waitUntilScheduled(); assertThat(manager().getJobRequest(jobId.get())).isNotNull(); }
private void verifyScheduleOverMidnight(Clock clock) { JobConfig.setClock(clock); long start = TimeUnit.HOURS.toMillis(24) - 1L; long end = 1L; DailyJob.schedule(DummyJobs.createBuilder(DummyJobs.SuccessJob.class), start, end); assertThat(manager().getAllJobRequests()).hasSize(1); JobRequest request = manager().getAllJobRequests().iterator().next(); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(clock.currentTimeMillis()); int hour = calendar.get(Calendar.HOUR_OF_DAY); long maxStart = TimeUnit.HOURS.toMillis(24 - hour); assertThat(request.getStartMs()).isLessThan(maxStart); assertThat(request.getEndMs()).isLessThan(maxStart + 3); }
private JobRequest verifyExecutionAndSuccessfulReschedule(Clock clock, long start, long end) { JobConfig.setClock(clock); int jobId = DailyJob.schedule(DummyJobs.createBuilder(DummyJobs.SuccessDailyJob.class), start, end); assertThat(jobId).isEqualTo(1); executeJob(jobId, Job.Result.SUCCESS); assertThat(manager().getAllJobRequests()).hasSize(1); JobRequest newRequest = manager().getJobRequest(jobId + 1); assertThat(newRequest).isNotNull(); return newRequest; }