Skip to content

Commit 6519064

Browse files
authored
Fix JobInfoScheduler not to overwrite jobs(b/139434539). (#708)
1 parent 2654764 commit 6519064

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

transport/transport-runtime/src/main/java/com/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ int getJobId(TransportContext transportContext) {
6060
checksum.update(transportContext.getBackendName().getBytes());
6161
checksum.update(
6262
ByteBuffer.allocate(4).putInt(transportContext.getPriority().ordinal()).array());
63+
if (transportContext.getExtras() != null) {
64+
checksum.update(transportContext.getExtras());
65+
}
6366
return (int) checksum.getValue();
6467
}
6568

transport/transport-runtime/src/test/java/com/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoSchedulerTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,31 @@ public void schedule_whenExtrasEvailable_transmitsExtras() {
149149
.isEqualTo(Base64.encodeToString(extras.getBytes(), Base64.DEFAULT));
150150
}
151151

152+
@Test
153+
public void schedule_withMultipleContexts_whenExtrasAvailable_schedulesForBothContexts() {
154+
String extras1 = "e1";
155+
String extras2 = "e2";
156+
TransportContext ctx1 =
157+
TransportContext.builder().setBackendName("backend1").setExtras(extras1.getBytes()).build();
158+
TransportContext ctx2 =
159+
TransportContext.builder().setBackendName("backend1").setExtras(extras2.getBytes()).build();
160+
161+
store.recordNextCallTime(ctx1, 1000000);
162+
store.recordNextCallTime(ctx2, 1000000);
163+
scheduler.schedule(ctx1, 1);
164+
scheduler.schedule(ctx2, 1);
165+
assertThat(jobScheduler.getAllPendingJobs()).hasSize(2);
166+
JobInfo jobInfo = jobScheduler.getAllPendingJobs().get(0);
167+
PersistableBundle bundle = jobInfo.getExtras();
168+
assertThat(bundle.get(JobInfoScheduler.EXTRAS))
169+
.isEqualTo(Base64.encodeToString(extras1.getBytes(), Base64.DEFAULT));
170+
171+
jobInfo = jobScheduler.getAllPendingJobs().get(1);
172+
bundle = jobInfo.getExtras();
173+
assertThat(bundle.get(JobInfoScheduler.EXTRAS))
174+
.isEqualTo(Base64.encodeToString(extras2.getBytes(), Base64.DEFAULT));
175+
}
176+
152177
@Test
153178
public void schedule_smallWaitTImeFirstAttempt_multiplePriorities() {
154179
store.recordNextCallTime(TRANSPORT_CONTEXT, 5);

0 commit comments

Comments
 (0)