Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b287108b authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "Fix testSetDeliveryState_DeferUntilActive." into main

parents edd252ce 08e188af
Loading
Loading
Loading
Loading
+143 −0
Original line number Diff line number Diff line
@@ -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(
@@ -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);