From 7cf2f0491775d80ebea03da0b9898d6dde288e08 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 30 Aug 2022 19:02:32 -0600 Subject: [PATCH] [4/?] Tests for generic BroadcastQueue. Add test that verifies broadcast dispatch to a mix of both manifest and registered runtime receivers, including one manifest receiver in the middle of dispatch which requires a cold start. Bug: 243656033 Test: atest CtsContentTestCases:BroadcastReceiverTest Test: atest FrameworksMockingServicesTests:BroadcastQueueTest Change-Id: I22bcb2840c7aee305ea714bb50bf105974cae261 --- .../android/server/am/BroadcastQueueTest.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java index b736dbf154b22..c00c707b2c668 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/BroadcastQueueTest.java @@ -321,16 +321,19 @@ public class BroadcastQueueTest { private static final String PACKAGE_RED = "com.example.red"; private static final String PACKAGE_GREEN = "com.example.green"; private static final String PACKAGE_BLUE = "com.example.blue"; + private static final String PACKAGE_YELLOW = "com.example.yellow"; private static final String CLASS_RED = "com.example.red.Red"; private static final String CLASS_GREEN = "com.example.green.Green"; private static final String CLASS_BLUE = "com.example.blue.Blue"; + private static final String CLASS_YELLOW = "com.example.yellow.Yellow"; private static int getUidForPackage(String packageName) { switch (packageName) { case PACKAGE_RED: return android.os.Process.FIRST_APPLICATION_UID + 1; case PACKAGE_GREEN: return android.os.Process.FIRST_APPLICATION_UID + 2; case PACKAGE_BLUE: return android.os.Process.FIRST_APPLICATION_UID + 3; + case PACKAGE_YELLOW: return android.os.Process.FIRST_APPLICATION_UID + 4; default: throw new IllegalArgumentException(); } } @@ -452,6 +455,35 @@ public class BroadcastQueueTest { verifyScheduleRegisteredReceiver(receiverBlueApp, airplane); } - // TODO: verify mixing multiple manifest and registered receivers of same broadcast - // TODO: verify delivery of 3 distinct broadcasts + /** + * Verify dispatch of multiple broadcasts mixed to both manifest and + * registered receivers, to both warm and cold apps. + */ + @Test + public void testComplex() throws Exception { + final ProcessRecord callerApp = makeActiveProcessRecord(PACKAGE_RED); + + final ProcessRecord receiverGreenApp = makeActiveProcessRecord(PACKAGE_GREEN); + final ProcessRecord receiverYellowApp = makeActiveProcessRecord(PACKAGE_YELLOW); + + final Intent timezone = new Intent(Intent.ACTION_TIMEZONE_CHANGED); + mQueue.enqueueBroadcastLocked(makeBroadcastRecord(timezone, callerApp, + List.of(makeManifestReceiver(PACKAGE_GREEN, CLASS_GREEN), + makeRegisteredReceiver(receiverGreenApp), + makeManifestReceiver(PACKAGE_BLUE, CLASS_BLUE), + makeRegisteredReceiver(receiverYellowApp)))); + + final Intent airplane = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); + mQueue.enqueueBroadcastLocked(makeBroadcastRecord(airplane, callerApp, + List.of(makeManifestReceiver(PACKAGE_YELLOW, CLASS_YELLOW)))); + + waitForIdle(); + final ProcessRecord receiverBlueApp = mAms.getProcessRecordLocked(PACKAGE_BLUE, + getUidForPackage(PACKAGE_BLUE)); + verifyScheduleReceiver(receiverGreenApp, timezone); + verifyScheduleRegisteredReceiver(receiverGreenApp, timezone); + verifyScheduleReceiver(receiverBlueApp, timezone); + verifyScheduleRegisteredReceiver(receiverYellowApp, timezone); + verifyScheduleReceiver(receiverYellowApp, airplane); + } }