use of com.birbit.android.jobqueue.Job in project android-priority-jobqueue by yigit.
the class RunFailingJobTest method runFailingJob.
@Test
public void runFailingJob() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
JobManager jobManager = createJobManager();
jobManager.addJob(new Job(new Params(0).requireNetwork()) {
@Override
public void onAdded() {
}
@Override
public void onRun() throws Throwable {
throw new RuntimeException();
}
@Override
protected void onCancel(@CancelReason int cancelReason, @Nullable Throwable throwable) {
latch.countDown();
}
@Override
protected RetryConstraint shouldReRunOnThrowable(@NonNull Throwable throwable, int runCount, int maxRunCount) {
return RetryConstraint.CANCEL;
}
});
latch.await(10, TimeUnit.SECONDS);
MatcherAssert.assertThat((int) latch.getCount(), equalTo(0));
}
use of com.birbit.android.jobqueue.Job in project android-priority-jobqueue by yigit.
the class SessionIdTest method testSessionId.
@Test
public void testSessionId() throws Throwable {
JobManager jobManager = createJobManager();
//we know job manager uses this value :/
Long sessionId = mockTimer.nanoTime();
jobManager.stop();
Job[] jobs = new Job[] { new DummyJob(new Params(0)), new DummyJob(new Params(0).persist()) };
for (Job job : jobs) {
jobManager.addJob(job);
}
for (int i = 0; i < jobs.length; i++) {
JobHolder jobHolder = nextJob(jobManager);
MatcherAssert.assertThat("session id should be correct for job " + i, jobHolder.getRunningSessionId(), equalTo(sessionId));
}
}
use of com.birbit.android.jobqueue.Job in project android-priority-jobqueue by yigit.
the class ThreadFactoryTest method testThreadFactory.
@Test
public void testThreadFactory() throws Throwable {
final JobManager jobManager = createJobManager(new Configuration.Builder(RuntimeEnvironment.application).timer(mockTimer).threadFactory(new ThreadFactory() {
@Override
public Thread newThread(@NonNull Runnable r) {
return new DummyThread(r);
}
}));
final Job job = new CheckWorkerJob();
waitUntilAJobIsDone(jobManager, new WaitUntilCallback() {
@Override
public void run() {
jobManager.addJob(job);
}
@Override
public void assertJob(Job job) {
}
});
if (error != null) {
throw error;
}
}
use of com.birbit.android.jobqueue.Job in project android-priority-jobqueue by yigit.
the class RetryLogicTest method testChangePriority.
@Ignore
public void testChangePriority(boolean persistent) throws InterruptedException {
final AtomicInteger priority = new AtomicInteger(1);
retryProvider = new RetryProvider() {
@Override
public RetryConstraint build(Job job, Throwable throwable, int runCount, int maxRunCount) {
RetryConstraint constraint = new RetryConstraint(true);
priority.set(job.getPriority() * 2);
constraint.setNewPriority(priority.get());
return constraint;
}
};
onRunCallback = new Callback() {
@Override
public void on(Job job) {
assertThat("priority should be the expected value", job.getPriority(), is(priority.get()));
}
};
RetryJob retryJob = new RetryJob(new Params(priority.get()).setPersistent(persistent));
retryJob.retryLimit = 3;
canRun = true;
onRunLatch = new CountDownLatch(3);
createJobManager().addJob(retryJob);
assertThat(onRunLatch.await(5, TimeUnit.SECONDS), is(true));
assertThat("it should run 3 times", runCount, is(3));
assertThat(cancelLatch.await(5, TimeUnit.SECONDS), is(true));
}
use of com.birbit.android.jobqueue.Job in project android-priority-jobqueue by yigit.
the class RetryLogicTest method testChangeDelay.
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
public void testChangeDelay(boolean persistent) throws InterruptedException {
canRun = true;
RetryJob job = new RetryJob(new Params(1).setPersistent(persistent));
job.retryLimit = 2;
retryProvider = new RetryProvider() {
@Override
public RetryConstraint build(Job job, Throwable throwable, int runCount, int maxRunCount) {
RetryConstraint constraint = new RetryConstraint(true);
constraint.setNewDelayInMs(2000L);
return constraint;
}
};
final List<Long> runTimes = new ArrayList<>();
onRunCallback = new Callback() {
@Override
public void on(Job job) {
runTimes.add(mockTimer.nanoTime());
}
};
final Throwable[] callbackError = new Throwable[1];
final CountDownLatch runLatch = new CountDownLatch(2);
final JobManager jobManager = createJobManager();
jobManager.addCallback(new JobManagerCallbackAdapter() {
@Override
public void onAfterJobRun(@NonNull Job job, int resultCode) {
try {
mockTimer.incrementMs(1999);
assertThat("no jobs should be ready", jobManager.countReadyJobs(), is(0));
mockTimer.incrementMs(2);
} catch (Throwable t) {
callbackError[0] = t;
} finally {
runLatch.countDown();
}
}
});
jobManager.addJob(job);
assertThat("on run callbacks should arrive", runLatch.await(100, TimeUnit.MINUTES), is(true));
assertThat("run callback should not have any errors", callbackError[0], nullValue());
assertThat("job should be canceled", cancelLatch.await(1, TimeUnit.SECONDS), is(true));
assertThat("should run 2 times", runCount, is(2));
long timeInBetween = TimeUnit.NANOSECONDS.toSeconds(runTimes.get(1) - runTimes.get(0));
assertThat("time between two runs should be at least 2 seconds. " + timeInBetween, 2 <= timeInBetween, is(true));
}
Aggregations