Loading services/tests/mockingservicestests/src/com/android/server/am/BroadcastRecordTest.java +143 −0 Original line number Diff line number Diff line Loading @@ -449,6 +449,77 @@ public class BroadcastRecordTest { assertTerminalDeferredBeyond(r, 3, 0, 3); } @DisableFlags(Flags.FLAG_LIMIT_PRIORITY_SCOPE) @Test public void testSetDeliveryState_DeferUntilActive_flagDisabled() { final BroadcastRecord r = createBroadcastRecord( new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED), List.of( createResolveInfoWithPriority(10), createResolveInfoWithPriority(10), createResolveInfoWithPriority(10), createResolveInfoWithPriority(0), createResolveInfoWithPriority(0), createResolveInfoWithPriority(0), createResolveInfoWithPriority(-10), createResolveInfoWithPriority(-10), createResolveInfoWithPriority(-10))); assertBlocked(r, false, false, false, true, true, true, true, true, true); assertTerminalDeferredBeyond(r, 0, 0, 0); r.setDeliveryState(0, DELIVERY_PENDING, TAG); r.setDeliveryState(1, DELIVERY_DEFERRED, TAG); r.setDeliveryState(2, DELIVERY_PENDING, TAG); r.setDeliveryState(3, DELIVERY_DEFERRED, TAG); r.setDeliveryState(4, DELIVERY_DEFERRED, TAG); r.setDeliveryState(5, DELIVERY_DEFERRED, TAG); r.setDeliveryState(6, DELIVERY_DEFERRED, TAG); r.setDeliveryState(7, DELIVERY_PENDING, TAG); r.setDeliveryState(8, DELIVERY_DEFERRED, TAG); // Verify deferred counts ratchet up, but we're not "beyond" the first // still-pending receiver assertBlocked(r, false, false, false, true, true, true, true, true, true); assertTerminalDeferredBeyond(r, 0, 6, 0); // We're still not "beyond" the first still-pending receiver, even when // we finish a receiver later in the first tranche r.setDeliveryState(2, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, true, true, true, true, true, true); assertTerminalDeferredBeyond(r, 1, 6, 0); // Completing that last item in first tranche means we now unblock the // second tranche, and since it's entirely deferred, the third traunche // is unblocked too r.setDeliveryState(0, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 2, 6, 7); // Moving a deferred item in an earlier tranche back to being pending // doesn't change the fact that we've already moved beyond it r.setDeliveryState(1, DELIVERY_PENDING, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 2, 5, 7); r.setDeliveryState(1, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 3, 5, 7); // Completing middle pending item is enough to fast-forward to end r.setDeliveryState(7, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 4, 5, 9); // Moving everyone else directly into a finished state updates all the // terminal counters r.setDeliveryState(3, DELIVERY_SKIPPED, TAG); r.setDeliveryState(4, DELIVERY_SKIPPED, TAG); r.setDeliveryState(5, DELIVERY_SKIPPED, TAG); r.setDeliveryState(6, DELIVERY_SKIPPED, TAG); r.setDeliveryState(8, DELIVERY_SKIPPED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 9, 0, 9); } @EnableFlags(Flags.FLAG_LIMIT_PRIORITY_SCOPE) @Test public void testSetDeliveryState_DeferUntilActive() { final BroadcastRecord r = createBroadcastRecord( Loading @@ -462,6 +533,78 @@ public class BroadcastRecordTest { createResolveInfoWithPriority(-10), createResolveInfoWithPriority(-10), createResolveInfoWithPriority(-10))); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 0, 0, 0); r.setDeliveryState(0, DELIVERY_PENDING, TAG); r.setDeliveryState(1, DELIVERY_DEFERRED, TAG); r.setDeliveryState(2, DELIVERY_PENDING, TAG); r.setDeliveryState(3, DELIVERY_DEFERRED, TAG); r.setDeliveryState(4, DELIVERY_DEFERRED, TAG); r.setDeliveryState(5, DELIVERY_DEFERRED, TAG); r.setDeliveryState(6, DELIVERY_DEFERRED, TAG); r.setDeliveryState(7, DELIVERY_PENDING, TAG); r.setDeliveryState(8, DELIVERY_DEFERRED, TAG); // Verify deferred counts ratchet up, but we're not "beyond" the first // still-pending receiver assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 0, 6, 0); // We're still not "beyond" the first still-pending receiver, even when // we finish a receiver later in the first tranche r.setDeliveryState(2, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 1, 6, 0); // Completing that last item in first tranche means we now unblock the // second tranche, and since it's entirely deferred, the third traunche // is unblocked too r.setDeliveryState(0, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 2, 6, 7); // Moving a deferred item in an earlier tranche back to being pending // doesn't change the fact that we've already moved beyond it r.setDeliveryState(1, DELIVERY_PENDING, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 2, 5, 7); r.setDeliveryState(1, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 3, 5, 7); // Completing middle pending item is enough to fast-forward to end r.setDeliveryState(7, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 4, 5, 9); // Moving everyone else directly into a finished state updates all the // terminal counters r.setDeliveryState(3, DELIVERY_SKIPPED, TAG); r.setDeliveryState(4, DELIVERY_SKIPPED, TAG); r.setDeliveryState(5, DELIVERY_SKIPPED, TAG); r.setDeliveryState(6, DELIVERY_SKIPPED, TAG); r.setDeliveryState(8, DELIVERY_SKIPPED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 9, 0, 9); } @EnableFlags(Flags.FLAG_LIMIT_PRIORITY_SCOPE) @Test public void testSetDeliveryState_DeferUntilActive_changeIdDisabled() { doReturn(false).when(mPlatformCompat).isChangeEnabledByUidInternalNoLogging( eq(BroadcastRecord.CHANGE_LIMIT_PRIORITY_SCOPE), eq(getAppId(1))); final BroadcastRecord r = createBroadcastRecord( new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED), List.of( createResolveInfo(PACKAGE1, getAppId(1), 10), createResolveInfo(PACKAGE1, getAppId(1), 10), createResolveInfo(PACKAGE1, getAppId(1), 10), createResolveInfo(PACKAGE1, getAppId(1), 0), createResolveInfo(PACKAGE1, getAppId(1), 0), createResolveInfo(PACKAGE1, getAppId(1), 0), createResolveInfo(PACKAGE1, getAppId(1), -10), createResolveInfo(PACKAGE1, getAppId(1), -10), createResolveInfo(PACKAGE1, getAppId(1), -10))); assertBlocked(r, false, false, false, true, true, true, true, true, true); assertTerminalDeferredBeyond(r, 0, 0, 0); Loading Loading
services/tests/mockingservicestests/src/com/android/server/am/BroadcastRecordTest.java +143 −0 Original line number Diff line number Diff line Loading @@ -449,6 +449,77 @@ public class BroadcastRecordTest { assertTerminalDeferredBeyond(r, 3, 0, 3); } @DisableFlags(Flags.FLAG_LIMIT_PRIORITY_SCOPE) @Test public void testSetDeliveryState_DeferUntilActive_flagDisabled() { final BroadcastRecord r = createBroadcastRecord( new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED), List.of( createResolveInfoWithPriority(10), createResolveInfoWithPriority(10), createResolveInfoWithPriority(10), createResolveInfoWithPriority(0), createResolveInfoWithPriority(0), createResolveInfoWithPriority(0), createResolveInfoWithPriority(-10), createResolveInfoWithPriority(-10), createResolveInfoWithPriority(-10))); assertBlocked(r, false, false, false, true, true, true, true, true, true); assertTerminalDeferredBeyond(r, 0, 0, 0); r.setDeliveryState(0, DELIVERY_PENDING, TAG); r.setDeliveryState(1, DELIVERY_DEFERRED, TAG); r.setDeliveryState(2, DELIVERY_PENDING, TAG); r.setDeliveryState(3, DELIVERY_DEFERRED, TAG); r.setDeliveryState(4, DELIVERY_DEFERRED, TAG); r.setDeliveryState(5, DELIVERY_DEFERRED, TAG); r.setDeliveryState(6, DELIVERY_DEFERRED, TAG); r.setDeliveryState(7, DELIVERY_PENDING, TAG); r.setDeliveryState(8, DELIVERY_DEFERRED, TAG); // Verify deferred counts ratchet up, but we're not "beyond" the first // still-pending receiver assertBlocked(r, false, false, false, true, true, true, true, true, true); assertTerminalDeferredBeyond(r, 0, 6, 0); // We're still not "beyond" the first still-pending receiver, even when // we finish a receiver later in the first tranche r.setDeliveryState(2, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, true, true, true, true, true, true); assertTerminalDeferredBeyond(r, 1, 6, 0); // Completing that last item in first tranche means we now unblock the // second tranche, and since it's entirely deferred, the third traunche // is unblocked too r.setDeliveryState(0, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 2, 6, 7); // Moving a deferred item in an earlier tranche back to being pending // doesn't change the fact that we've already moved beyond it r.setDeliveryState(1, DELIVERY_PENDING, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 2, 5, 7); r.setDeliveryState(1, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 3, 5, 7); // Completing middle pending item is enough to fast-forward to end r.setDeliveryState(7, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 4, 5, 9); // Moving everyone else directly into a finished state updates all the // terminal counters r.setDeliveryState(3, DELIVERY_SKIPPED, TAG); r.setDeliveryState(4, DELIVERY_SKIPPED, TAG); r.setDeliveryState(5, DELIVERY_SKIPPED, TAG); r.setDeliveryState(6, DELIVERY_SKIPPED, TAG); r.setDeliveryState(8, DELIVERY_SKIPPED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 9, 0, 9); } @EnableFlags(Flags.FLAG_LIMIT_PRIORITY_SCOPE) @Test public void testSetDeliveryState_DeferUntilActive() { final BroadcastRecord r = createBroadcastRecord( Loading @@ -462,6 +533,78 @@ public class BroadcastRecordTest { createResolveInfoWithPriority(-10), createResolveInfoWithPriority(-10), createResolveInfoWithPriority(-10))); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 0, 0, 0); r.setDeliveryState(0, DELIVERY_PENDING, TAG); r.setDeliveryState(1, DELIVERY_DEFERRED, TAG); r.setDeliveryState(2, DELIVERY_PENDING, TAG); r.setDeliveryState(3, DELIVERY_DEFERRED, TAG); r.setDeliveryState(4, DELIVERY_DEFERRED, TAG); r.setDeliveryState(5, DELIVERY_DEFERRED, TAG); r.setDeliveryState(6, DELIVERY_DEFERRED, TAG); r.setDeliveryState(7, DELIVERY_PENDING, TAG); r.setDeliveryState(8, DELIVERY_DEFERRED, TAG); // Verify deferred counts ratchet up, but we're not "beyond" the first // still-pending receiver assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 0, 6, 0); // We're still not "beyond" the first still-pending receiver, even when // we finish a receiver later in the first tranche r.setDeliveryState(2, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 1, 6, 0); // Completing that last item in first tranche means we now unblock the // second tranche, and since it's entirely deferred, the third traunche // is unblocked too r.setDeliveryState(0, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 2, 6, 7); // Moving a deferred item in an earlier tranche back to being pending // doesn't change the fact that we've already moved beyond it r.setDeliveryState(1, DELIVERY_PENDING, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 2, 5, 7); r.setDeliveryState(1, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 3, 5, 7); // Completing middle pending item is enough to fast-forward to end r.setDeliveryState(7, DELIVERY_DELIVERED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 4, 5, 9); // Moving everyone else directly into a finished state updates all the // terminal counters r.setDeliveryState(3, DELIVERY_SKIPPED, TAG); r.setDeliveryState(4, DELIVERY_SKIPPED, TAG); r.setDeliveryState(5, DELIVERY_SKIPPED, TAG); r.setDeliveryState(6, DELIVERY_SKIPPED, TAG); r.setDeliveryState(8, DELIVERY_SKIPPED, TAG); assertBlocked(r, false, false, false, false, false, false, false, false, false); assertTerminalDeferredBeyond(r, 9, 0, 9); } @EnableFlags(Flags.FLAG_LIMIT_PRIORITY_SCOPE) @Test public void testSetDeliveryState_DeferUntilActive_changeIdDisabled() { doReturn(false).when(mPlatformCompat).isChangeEnabledByUidInternalNoLogging( eq(BroadcastRecord.CHANGE_LIMIT_PRIORITY_SCOPE), eq(getAppId(1))); final BroadcastRecord r = createBroadcastRecord( new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED), List.of( createResolveInfo(PACKAGE1, getAppId(1), 10), createResolveInfo(PACKAGE1, getAppId(1), 10), createResolveInfo(PACKAGE1, getAppId(1), 10), createResolveInfo(PACKAGE1, getAppId(1), 0), createResolveInfo(PACKAGE1, getAppId(1), 0), createResolveInfo(PACKAGE1, getAppId(1), 0), createResolveInfo(PACKAGE1, getAppId(1), -10), createResolveInfo(PACKAGE1, getAppId(1), -10), createResolveInfo(PACKAGE1, getAppId(1), -10))); assertBlocked(r, false, false, false, true, true, true, true, true, true); assertTerminalDeferredBeyond(r, 0, 0, 0); Loading