@Test public void testUpdateDoesNotCrash() { JobRequest request = DummyJobs.createOneOff(); int jobId = request.schedule(); assertThat(request.getScheduledAt()).isGreaterThan(0L); assertThat(request.getFailureCount()).isEqualTo(0); assertThat(request.getLastRun()).isEqualTo(0); SQLiteDatabase database = mock(SQLiteDatabase.class); when(database.update(anyString(), any(ContentValues.class), nullable(String.class), any(String[].class))).thenThrow(SQLException.class); manager().getJobStorage().injectDatabase(database); request.updateStats(true, true); // updates the database value, but fails in this case assertThat(request.getFailureCount()).isEqualTo(1); // in memory value was updated, keep that assertThat(request.getLastRun()).isGreaterThan(0); // kinda hacky, this removes the request from the cache, but doesn't delete it in the database, // because we're using the mock at the moment manager().getJobStorage().remove(request); manager().getJobStorage().injectDatabase(null); // reset request = manager().getJobRequest(jobId); assertThat(request.getFailureCount()).isEqualTo(0); assertThat(request.getLastRun()).isEqualTo(0); }
private void handleResult(Job job, Job.Result result) { JobRequest request = mJob.getParams().getRequest(); boolean incFailureCount = false; boolean updateLastRun = false; if (!request.isPeriodic() && Job.Result.RESCHEDULE.equals(result) && !job.isDeleted()) { request = request.reschedule(true, true); mJob.onReschedule(request.getJobId()); updateLastRun = true; } else if (request.isPeriodic()) { updateLastRun = true; if (!Job.Result.SUCCESS.equals(result)) { incFailureCount = true; } } if (!job.isDeleted()) { // otherwise it would be persisted again if (incFailureCount || updateLastRun) { //noinspection ConstantConditions request.updateStats(incFailureCount, updateLastRun); } } } }
request.updateStats(false, true);
private void handleResult(Job job, Job.Result result) { JobRequest request = mJob.getParams().getRequest(); boolean incFailureCount = false; boolean updateLastRun = false; if (!request.isPeriodic() && Job.Result.RESCHEDULE.equals(result) && !job.isDeleted()) { request = request.reschedule(true, true); mJob.onReschedule(request.getJobId()); updateLastRun = true; } else if (request.isPeriodic()) { updateLastRun = true; if (!Job.Result.SUCCESS.equals(result)) { incFailureCount = true; } } if (!job.isDeleted()) { // otherwise it would be persisted again if (incFailureCount || updateLastRun) { //noinspection ConstantConditions request.updateStats(incFailureCount, updateLastRun); } } } }
request.updateStats(false, true);