Loading services/tests/servicestests/src/com/android/server/job/PrioritySchedulingTest.java +40 −48 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.app.job.JobScheduler; import android.content.ComponentName; import android.content.Context; import android.test.AndroidTestCase; import com.android.server.job.MockPriorityJobService.TestEnvironment; import com.android.server.job.MockPriorityJobService.TestEnvironment.Event; Loading @@ -35,6 +36,11 @@ public class PrioritySchedulingTest extends AndroidTestCase { static ComponentName kJobServiceComponent; JobScheduler mJobScheduler; // The system overrides the test app priority to be a minimum of FOREGROUND_SERVICE. We can // bypass that override by using a priority of at least bound foreground service. private static final int HIGH_PRIORITY = JobInfo.PRIORITY_BOUND_FOREGROUND_SERVICE + 1; private static final int LOW_PRIORITY = JobInfo.PRIORITY_BOUND_FOREGROUND_SERVICE; @Override public void setUp() throws Exception { super.setUp(); Loading @@ -51,32 +57,25 @@ public class PrioritySchedulingTest extends AndroidTestCase { } public void testLowerPriorityJobPreempted() throws Exception { JobInfo job1 = new JobInfo.Builder(111, kJobServiceComponent) .setPriority(1) .setOverrideDeadline(7000L) .build(); JobInfo job2 = new JobInfo.Builder(222, kJobServiceComponent) .setPriority(1) .setOverrideDeadline(7000L) .build(); JobInfo job3 = new JobInfo.Builder(333, kJobServiceComponent) .setPriority(1) .setOverrideDeadline(7000L) for (int i = 0; i < JobSchedulerService.MAX_JOB_CONTEXTS_COUNT; ++i) { JobInfo job = new JobInfo.Builder(100 + i, kJobServiceComponent) .setPriority(LOW_PRIORITY) .setOverrideDeadline(0) .build(); JobInfo job4 = new JobInfo.Builder(444, kJobServiceComponent) .setPriority(2) .setMinimumLatency(2000L) .setOverrideDeadline(7000L) mJobScheduler.schedule(job); } final int higherPriorityJobId = 100 + JobSchedulerService.MAX_JOB_CONTEXTS_COUNT; JobInfo jobHigher = new JobInfo.Builder(higherPriorityJobId, kJobServiceComponent) .setPriority(HIGH_PRIORITY) .setMinimumLatency(2000) .setOverrideDeadline(4000) .build(); mJobScheduler.schedule(job1); mJobScheduler.schedule(job2); mJobScheduler.schedule(job3); mJobScheduler.schedule(job4); Thread.sleep(10000); // Wait for job 4 to preempt one of the lower priority jobs mJobScheduler.schedule(jobHigher); Thread.sleep(10000); // Wait for jobHigher to preempt one of the lower priority jobs Event job4Execution = new Event(TestEnvironment.EVENT_START_JOB, 444); Event jobHigherExecution = new Event(TestEnvironment.EVENT_START_JOB, higherPriorityJobId); ArrayList<Event> executedEvents = kTestEnvironment.getExecutedEvents(); boolean wasJob4Executed = executedEvents.contains(job4Execution); boolean wasJobHigherExecuted = executedEvents.contains(jobHigherExecution); boolean wasSomeJobPreempted = false; for (Event event: executedEvents) { if (event.event == TestEnvironment.EVENT_PREEMPT_JOB) { Loading @@ -85,35 +84,28 @@ public class PrioritySchedulingTest extends AndroidTestCase { } } assertTrue("No job was preempted.", wasSomeJobPreempted); assertTrue("Lower priority jobs were not preempted.", wasJob4Executed); assertTrue("Lower priority jobs were not preempted.", wasJobHigherExecuted); } public void testHigherPriorityJobNotPreempted() throws Exception { JobInfo job1 = new JobInfo.Builder(111, kJobServiceComponent) .setPriority(2) .setOverrideDeadline(7000L) .build(); JobInfo job2 = new JobInfo.Builder(222, kJobServiceComponent) .setPriority(2) .setOverrideDeadline(7000L) for (int i = 0; i < JobSchedulerService.MAX_JOB_CONTEXTS_COUNT; ++i) { JobInfo job = new JobInfo.Builder(100 + i, kJobServiceComponent) .setPriority(HIGH_PRIORITY) .setOverrideDeadline(0) .build(); JobInfo job3 = new JobInfo.Builder(333, kJobServiceComponent) .setPriority(2) .setOverrideDeadline(7000L) .build(); JobInfo job4 = new JobInfo.Builder(444, kJobServiceComponent) .setPriority(1) .setMinimumLatency(2000L) .setOverrideDeadline(7000L) mJobScheduler.schedule(job); } final int lowerPriorityJobId = 100 + JobSchedulerService.MAX_JOB_CONTEXTS_COUNT; JobInfo jobLower = new JobInfo.Builder(lowerPriorityJobId, kJobServiceComponent) .setPriority(LOW_PRIORITY) .setMinimumLatency(2000) .setOverrideDeadline(3000) .build(); mJobScheduler.schedule(job1); mJobScheduler.schedule(job2); mJobScheduler.schedule(job3); mJobScheduler.schedule(job4); Thread.sleep(10000); // Wait for job 4 to preempt one of the higher priority jobs mJobScheduler.schedule(jobLower); Thread.sleep(10000); Event job4Execution = new Event(TestEnvironment.EVENT_START_JOB, 444); boolean wasJob4Executed = kTestEnvironment.getExecutedEvents().contains(job4Execution); assertFalse("Higher priority job was preempted.", wasJob4Executed); Event jobLowerExecution = new Event(TestEnvironment.EVENT_START_JOB, lowerPriorityJobId); boolean wasLowerExecuted = kTestEnvironment.getExecutedEvents().contains(jobLowerExecution); assertFalse("Higher priority job was preempted.", wasLowerExecuted); } } Loading
services/tests/servicestests/src/com/android/server/job/PrioritySchedulingTest.java +40 −48 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.app.job.JobScheduler; import android.content.ComponentName; import android.content.Context; import android.test.AndroidTestCase; import com.android.server.job.MockPriorityJobService.TestEnvironment; import com.android.server.job.MockPriorityJobService.TestEnvironment.Event; Loading @@ -35,6 +36,11 @@ public class PrioritySchedulingTest extends AndroidTestCase { static ComponentName kJobServiceComponent; JobScheduler mJobScheduler; // The system overrides the test app priority to be a minimum of FOREGROUND_SERVICE. We can // bypass that override by using a priority of at least bound foreground service. private static final int HIGH_PRIORITY = JobInfo.PRIORITY_BOUND_FOREGROUND_SERVICE + 1; private static final int LOW_PRIORITY = JobInfo.PRIORITY_BOUND_FOREGROUND_SERVICE; @Override public void setUp() throws Exception { super.setUp(); Loading @@ -51,32 +57,25 @@ public class PrioritySchedulingTest extends AndroidTestCase { } public void testLowerPriorityJobPreempted() throws Exception { JobInfo job1 = new JobInfo.Builder(111, kJobServiceComponent) .setPriority(1) .setOverrideDeadline(7000L) .build(); JobInfo job2 = new JobInfo.Builder(222, kJobServiceComponent) .setPriority(1) .setOverrideDeadline(7000L) .build(); JobInfo job3 = new JobInfo.Builder(333, kJobServiceComponent) .setPriority(1) .setOverrideDeadline(7000L) for (int i = 0; i < JobSchedulerService.MAX_JOB_CONTEXTS_COUNT; ++i) { JobInfo job = new JobInfo.Builder(100 + i, kJobServiceComponent) .setPriority(LOW_PRIORITY) .setOverrideDeadline(0) .build(); JobInfo job4 = new JobInfo.Builder(444, kJobServiceComponent) .setPriority(2) .setMinimumLatency(2000L) .setOverrideDeadline(7000L) mJobScheduler.schedule(job); } final int higherPriorityJobId = 100 + JobSchedulerService.MAX_JOB_CONTEXTS_COUNT; JobInfo jobHigher = new JobInfo.Builder(higherPriorityJobId, kJobServiceComponent) .setPriority(HIGH_PRIORITY) .setMinimumLatency(2000) .setOverrideDeadline(4000) .build(); mJobScheduler.schedule(job1); mJobScheduler.schedule(job2); mJobScheduler.schedule(job3); mJobScheduler.schedule(job4); Thread.sleep(10000); // Wait for job 4 to preempt one of the lower priority jobs mJobScheduler.schedule(jobHigher); Thread.sleep(10000); // Wait for jobHigher to preempt one of the lower priority jobs Event job4Execution = new Event(TestEnvironment.EVENT_START_JOB, 444); Event jobHigherExecution = new Event(TestEnvironment.EVENT_START_JOB, higherPriorityJobId); ArrayList<Event> executedEvents = kTestEnvironment.getExecutedEvents(); boolean wasJob4Executed = executedEvents.contains(job4Execution); boolean wasJobHigherExecuted = executedEvents.contains(jobHigherExecution); boolean wasSomeJobPreempted = false; for (Event event: executedEvents) { if (event.event == TestEnvironment.EVENT_PREEMPT_JOB) { Loading @@ -85,35 +84,28 @@ public class PrioritySchedulingTest extends AndroidTestCase { } } assertTrue("No job was preempted.", wasSomeJobPreempted); assertTrue("Lower priority jobs were not preempted.", wasJob4Executed); assertTrue("Lower priority jobs were not preempted.", wasJobHigherExecuted); } public void testHigherPriorityJobNotPreempted() throws Exception { JobInfo job1 = new JobInfo.Builder(111, kJobServiceComponent) .setPriority(2) .setOverrideDeadline(7000L) .build(); JobInfo job2 = new JobInfo.Builder(222, kJobServiceComponent) .setPriority(2) .setOverrideDeadline(7000L) for (int i = 0; i < JobSchedulerService.MAX_JOB_CONTEXTS_COUNT; ++i) { JobInfo job = new JobInfo.Builder(100 + i, kJobServiceComponent) .setPriority(HIGH_PRIORITY) .setOverrideDeadline(0) .build(); JobInfo job3 = new JobInfo.Builder(333, kJobServiceComponent) .setPriority(2) .setOverrideDeadline(7000L) .build(); JobInfo job4 = new JobInfo.Builder(444, kJobServiceComponent) .setPriority(1) .setMinimumLatency(2000L) .setOverrideDeadline(7000L) mJobScheduler.schedule(job); } final int lowerPriorityJobId = 100 + JobSchedulerService.MAX_JOB_CONTEXTS_COUNT; JobInfo jobLower = new JobInfo.Builder(lowerPriorityJobId, kJobServiceComponent) .setPriority(LOW_PRIORITY) .setMinimumLatency(2000) .setOverrideDeadline(3000) .build(); mJobScheduler.schedule(job1); mJobScheduler.schedule(job2); mJobScheduler.schedule(job3); mJobScheduler.schedule(job4); Thread.sleep(10000); // Wait for job 4 to preempt one of the higher priority jobs mJobScheduler.schedule(jobLower); Thread.sleep(10000); Event job4Execution = new Event(TestEnvironment.EVENT_START_JOB, 444); boolean wasJob4Executed = kTestEnvironment.getExecutedEvents().contains(job4Execution); assertFalse("Higher priority job was preempted.", wasJob4Executed); Event jobLowerExecution = new Event(TestEnvironment.EVENT_START_JOB, lowerPriorityJobId); boolean wasLowerExecuted = kTestEnvironment.getExecutedEvents().contains(jobLowerExecution); assertFalse("Higher priority job was preempted.", wasLowerExecuted); } }