Loading apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java +6 −2 Original line number Diff line number Diff line Loading @@ -144,15 +144,19 @@ public final class ConnectivityController extends RestrictingController implemen public void startTrackingRestrictedJobLocked(JobStatus jobStatus) { // Don't need to start tracking the job. If the job needed network, it would already be // tracked. if (jobStatus.hasConnectivityConstraint()) { updateConstraintsSatisfied(jobStatus); } } @Override public void stopTrackingRestrictedJobLocked(JobStatus jobStatus) { // Shouldn't stop tracking the job here. If the job was tracked, it still needs network, // even after being unrestricted. if (jobStatus.hasConnectivityConstraint()) { updateConstraintsSatisfied(jobStatus); } } /** * Returns true if the job's requested network is available. This DOES NOT necessarily mean Loading services/tests/mockingservicestests/src/com/android/server/job/controllers/ConnectivityControllerTest.java +46 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED; import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; Loading @@ -27,6 +28,9 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.inOrder; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy; import static com.android.dx.mockito.inline.extended.ExtendedMockito.when; import static com.android.server.job.JobSchedulerService.FREQUENT_INDEX; import static com.android.server.job.JobSchedulerService.RARE_INDEX; import static com.android.server.job.JobSchedulerService.RESTRICTED_INDEX; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; Loading Loading @@ -568,6 +572,48 @@ public class ConnectivityControllerTest { assertFalse(controller.isStandbyExceptionRequestedLocked(UID_RED)); } @Test public void testRestrictedJobTracking() { final JobStatus networked = createJobStatus(createJob() .setEstimatedNetworkBytes(DataUnit.MEBIBYTES.toBytes(1), 0) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_CELLULAR), UID_RED); final JobStatus unnetworked = createJobStatus(createJob(), UID_BLUE); networked.setStandbyBucket(FREQUENT_INDEX); unnetworked.setStandbyBucket(FREQUENT_INDEX); final Network cellularNet = new Network(101); final NetworkCapabilities cellularCaps = createCapabilities().addTransportType(TRANSPORT_CELLULAR); reset(mConnManager); answerNetwork(UID_RED, cellularNet, cellularCaps); answerNetwork(UID_BLUE, cellularNet, cellularCaps); final ConnectivityController controller = new ConnectivityController(mService); controller.maybeStartTrackingJobLocked(networked, null); controller.maybeStartTrackingJobLocked(unnetworked, null); assertTrue(networked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); assertFalse(unnetworked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); networked.setStandbyBucket(RESTRICTED_INDEX); unnetworked.setStandbyBucket(RESTRICTED_INDEX); controller.startTrackingRestrictedJobLocked(networked); controller.startTrackingRestrictedJobLocked(unnetworked); assertFalse(networked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); // Unnetworked shouldn't be affected by ConnectivityController since it doesn't have a // connectivity constraint. assertFalse(unnetworked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); networked.setStandbyBucket(RARE_INDEX); unnetworked.setStandbyBucket(RARE_INDEX); controller.stopTrackingRestrictedJobLocked(networked); controller.stopTrackingRestrictedJobLocked(unnetworked); assertTrue(networked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); // Unnetworked shouldn't be affected by ConnectivityController since it doesn't have a // connectivity constraint. assertFalse(unnetworked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); } private void answerNetwork(int uid, Network net, NetworkCapabilities caps) { when(mConnManager.getActiveNetworkForUid(eq(uid))).thenReturn(net); when(mConnManager.getNetworkCapabilities(eq(net))).thenReturn(caps); Loading Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/ConnectivityController.java +6 −2 Original line number Diff line number Diff line Loading @@ -144,15 +144,19 @@ public final class ConnectivityController extends RestrictingController implemen public void startTrackingRestrictedJobLocked(JobStatus jobStatus) { // Don't need to start tracking the job. If the job needed network, it would already be // tracked. if (jobStatus.hasConnectivityConstraint()) { updateConstraintsSatisfied(jobStatus); } } @Override public void stopTrackingRestrictedJobLocked(JobStatus jobStatus) { // Shouldn't stop tracking the job here. If the job was tracked, it still needs network, // even after being unrestricted. if (jobStatus.hasConnectivityConstraint()) { updateConstraintsSatisfied(jobStatus); } } /** * Returns true if the job's requested network is available. This DOES NOT necessarily mean Loading
services/tests/mockingservicestests/src/com/android/server/job/controllers/ConnectivityControllerTest.java +46 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED; import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; Loading @@ -27,6 +28,9 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.inOrder; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy; import static com.android.dx.mockito.inline.extended.ExtendedMockito.when; import static com.android.server.job.JobSchedulerService.FREQUENT_INDEX; import static com.android.server.job.JobSchedulerService.RARE_INDEX; import static com.android.server.job.JobSchedulerService.RESTRICTED_INDEX; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; Loading Loading @@ -568,6 +572,48 @@ public class ConnectivityControllerTest { assertFalse(controller.isStandbyExceptionRequestedLocked(UID_RED)); } @Test public void testRestrictedJobTracking() { final JobStatus networked = createJobStatus(createJob() .setEstimatedNetworkBytes(DataUnit.MEBIBYTES.toBytes(1), 0) .setRequiredNetworkType(JobInfo.NETWORK_TYPE_CELLULAR), UID_RED); final JobStatus unnetworked = createJobStatus(createJob(), UID_BLUE); networked.setStandbyBucket(FREQUENT_INDEX); unnetworked.setStandbyBucket(FREQUENT_INDEX); final Network cellularNet = new Network(101); final NetworkCapabilities cellularCaps = createCapabilities().addTransportType(TRANSPORT_CELLULAR); reset(mConnManager); answerNetwork(UID_RED, cellularNet, cellularCaps); answerNetwork(UID_BLUE, cellularNet, cellularCaps); final ConnectivityController controller = new ConnectivityController(mService); controller.maybeStartTrackingJobLocked(networked, null); controller.maybeStartTrackingJobLocked(unnetworked, null); assertTrue(networked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); assertFalse(unnetworked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); networked.setStandbyBucket(RESTRICTED_INDEX); unnetworked.setStandbyBucket(RESTRICTED_INDEX); controller.startTrackingRestrictedJobLocked(networked); controller.startTrackingRestrictedJobLocked(unnetworked); assertFalse(networked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); // Unnetworked shouldn't be affected by ConnectivityController since it doesn't have a // connectivity constraint. assertFalse(unnetworked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); networked.setStandbyBucket(RARE_INDEX); unnetworked.setStandbyBucket(RARE_INDEX); controller.stopTrackingRestrictedJobLocked(networked); controller.stopTrackingRestrictedJobLocked(unnetworked); assertTrue(networked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); // Unnetworked shouldn't be affected by ConnectivityController since it doesn't have a // connectivity constraint. assertFalse(unnetworked.isConstraintSatisfied(JobStatus.CONSTRAINT_CONNECTIVITY)); } private void answerNetwork(int uid, Network net, NetworkCapabilities caps) { when(mConnManager.getActiveNetworkForUid(eq(uid))).thenReturn(net); when(mConnManager.getNetworkCapabilities(eq(net))).thenReturn(caps); Loading