Search in sources :

Example 21 with Job

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));
}
Also used : RetryConstraint(com.birbit.android.jobqueue.RetryConstraint) Params(com.birbit.android.jobqueue.Params) JobManager(com.birbit.android.jobqueue.JobManager) CountDownLatch(java.util.concurrent.CountDownLatch) Job(com.birbit.android.jobqueue.Job) RetryConstraint(com.birbit.android.jobqueue.RetryConstraint) Test(org.junit.Test)

Example 22 with Job

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));
    }
}
Also used : JobHolder(com.birbit.android.jobqueue.JobHolder) DummyJob(com.birbit.android.jobqueue.test.jobs.DummyJob) Params(com.birbit.android.jobqueue.Params) JobManager(com.birbit.android.jobqueue.JobManager) Job(com.birbit.android.jobqueue.Job) DummyJob(com.birbit.android.jobqueue.test.jobs.DummyJob) Test(org.junit.Test)

Example 23 with Job

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;
    }
}
Also used : ThreadFactory(java.util.concurrent.ThreadFactory) Configuration(com.birbit.android.jobqueue.config.Configuration) NonNull(android.support.annotation.NonNull) JobManager(com.birbit.android.jobqueue.JobManager) Job(com.birbit.android.jobqueue.Job) Test(org.junit.Test)

Example 24 with Job

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));
}
Also used : RetryConstraint(com.birbit.android.jobqueue.RetryConstraint) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Params(com.birbit.android.jobqueue.Params) DummyJob(com.birbit.android.jobqueue.test.jobs.DummyJob) Job(com.birbit.android.jobqueue.Job) CountDownLatch(java.util.concurrent.CountDownLatch) RetryConstraint(com.birbit.android.jobqueue.RetryConstraint) Ignore(org.junit.Ignore)

Example 25 with Job

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));
}
Also used : JobManagerCallbackAdapter(com.birbit.android.jobqueue.callback.JobManagerCallbackAdapter) ArrayList(java.util.ArrayList) Params(com.birbit.android.jobqueue.Params) JobManager(com.birbit.android.jobqueue.JobManager) CountDownLatch(java.util.concurrent.CountDownLatch) RetryConstraint(com.birbit.android.jobqueue.RetryConstraint) RetryConstraint(com.birbit.android.jobqueue.RetryConstraint) DummyJob(com.birbit.android.jobqueue.test.jobs.DummyJob) Job(com.birbit.android.jobqueue.Job) TargetApi(android.annotation.TargetApi)

Aggregations

Job (com.birbit.android.jobqueue.Job)36 Params (com.birbit.android.jobqueue.Params)31 JobManager (com.birbit.android.jobqueue.JobManager)26 DummyJob (com.birbit.android.jobqueue.test.jobs.DummyJob)26 Test (org.junit.Test)21 CountDownLatch (java.util.concurrent.CountDownLatch)19 TargetApi (android.annotation.TargetApi)10 JobManagerCallbackAdapter (com.birbit.android.jobqueue.callback.JobManagerCallbackAdapter)10 RetryConstraint (com.birbit.android.jobqueue.RetryConstraint)9 Configuration (com.birbit.android.jobqueue.config.Configuration)8 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)7 JobHolder (com.birbit.android.jobqueue.JobHolder)4 JobManagerCallback (com.birbit.android.jobqueue.callback.JobManagerCallback)4 ArrayList (java.util.ArrayList)4 CancelResult (com.birbit.android.jobqueue.CancelResult)3 SuppressLint (android.annotation.SuppressLint)2 NonNull (android.support.annotation.NonNull)2 SqliteJobQueue (com.birbit.android.jobqueue.persistentQueue.sqlite.SqliteJobQueue)2 Nullable (android.support.annotation.Nullable)1 Pair (android.util.Pair)1