/** * Attempts to cancel the Job that matches the provided tag and endpoint. * * <p>Returns one of the CANCEL_RESULT_ constants. */ @CancelResult public int cancel(@NonNull String tag) { if (!driver.isAvailable()) { return CANCEL_RESULT_NO_DRIVER_AVAILABLE; } return driver.cancel(tag); }
/** * Attempts to cancel all Jobs registered for this package. * * <p>Returns one of the CANCEL_RESULT_ constants. */ @CancelResult public int cancelAll() { if (!driver.isAvailable()) { return CANCEL_RESULT_NO_DRIVER_AVAILABLE; } return driver.cancelAll(); }
@NonNull @Override public JobValidator getValidator() { return mDriver.getValidator(); }
/** * Attempts to schedule the provided Job. * * <p>Returns one of the SCHEDULE_RESULT_ constants. */ @ScheduleResult public int schedule(@NonNull Job job) { if (!driver.isAvailable()) { return SCHEDULE_RESULT_NO_DRIVER_AVAILABLE; } return driver.schedule(job); }
@Override public int schedule(@NonNull Job job) { return this.wrappedDriver.schedule(job); }
@Override public int cancelAll() { return mDriver.cancelAll(); }
@Override public int cancel(@NonNull String tag) { synchronized (mStore) { final Iterator<JobHistory> it = mStore.iterator(); while (it.hasNext()) { JobParameters j = it.next().job; if (tag == null || tag.equals(j.getTag())) { it.remove(); break; } } return mDriver.cancel(tag); } }
@Override public boolean isAvailable() { return mDriver.isAvailable(); } }
@Override public int schedule(@NonNull Job job) { Log.i("TrackingBackend", "beginning schedule loop"); synchronized (mStore) { final Iterator<JobHistory> it = mStore.iterator(); while (it.hasNext()) { JobParameters j = it.next().job; if (j.getTag().equals(job.getTag()) && j.getService().equals(job.getService())) { it.remove(); } } mStore.add(new JobHistory(job)); } Log.i("TrackingBackend", "ending schedule loop"); return mDriver.schedule(job); }
@Override public int cancelAll() { return this.wrappedDriver.cancelAll(); }
@Override public int cancel(@NonNull String tag) { return this.wrappedDriver.cancel(tag); }
public void setDriverAvailability(boolean driverAvailability) { when(driver.isAvailable()).thenReturn(driverAvailability); } }
@Test public void testMustSchedule_success() throws Exception { when(driver.schedule(null)).thenReturn(FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS); /* assert no exception is thrown */ dispatcher.mustSchedule(null); }
@NonNull private synchronized ValidationEnforcer getValidationEnforcer() { if (validationEnforcer == null) { validationEnforcer = new ValidationEnforcer(getGooglePlayDriver().getValidator()); } return validationEnforcer; }
@Test public void testCancelJob() throws Exception { final String tag = "foo"; // simulate success when(driver.cancel(tag)).thenReturn(FirebaseJobDispatcher.CANCEL_RESULT_SUCCESS); assertEquals( "Expected dispatcher to pass the result of Driver#cancel(String, Class) through", FirebaseJobDispatcher.CANCEL_RESULT_SUCCESS, dispatcher.cancel(tag)); // verify the driver was indeed called verify(driver).cancel(tag); }
@Test public void testSchedule_passThrough() throws Exception { final int[] possibleResults = { FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS, FirebaseJobDispatcher.SCHEDULE_RESULT_NO_DRIVER_AVAILABLE, FirebaseJobDispatcher.SCHEDULE_RESULT_BAD_SERVICE, FirebaseJobDispatcher.SCHEDULE_RESULT_UNKNOWN_ERROR, FirebaseJobDispatcher.SCHEDULE_RESULT_UNSUPPORTED_TRIGGER }; for (int result : possibleResults) { when(driver.schedule(null)).thenReturn(result); assertEquals(result, dispatcher.schedule(null)); } verify(driver, times(possibleResults.length)).schedule(null); }
/** Instantiates a new FirebaseJobDispatcher using the provided Driver. */ public FirebaseJobDispatcher(@NonNull Driver driver) { this.driver = driver; validator = new ValidationEnforcer(driver.getValidator()); retryStrategyBuilder = new RetryStrategy.Builder(validator); }
@Test public void testCancelAllJobs_unavailable() throws Exception { setDriverAvailability(false); // driver is unavailable assertEquals(FirebaseJobDispatcher.CANCEL_RESULT_NO_DRIVER_AVAILABLE, dispatcher.cancelAll()); verify(driver, never()).cancelAll(); }
@Test public void testCancelJob_unavailable() throws Exception { setDriverAvailability(false); // driver is unavailable assertEquals(FirebaseJobDispatcher.CANCEL_RESULT_NO_DRIVER_AVAILABLE, dispatcher.cancel("foo")); // verify the driver was never even consulted verify(driver, never()).cancel("foo"); }