From 5671e9d15dff2b031dd61546c93129e2d87ed65f Mon Sep 17 00:00:00 2001 From: Junyu Lai Date: Wed, 20 Nov 2024 10:47:20 +0800 Subject: [PATCH] Use TestableResultReceiver in EntitlementManagerTest This is a test only refactoring which updates the unit tests to use a TestableResultReceiver to have better readability, and asserting no entitlement result received. Test: atest TetheringTests:EntitlementManagerTest Bug: 376792293 Change-Id: I5cc02c8ab85ae614e714055c7f8f4c076341f48f --- .../tethering/EntitlementManagerTest.java | 112 ++++++------------ 1 file changed, 39 insertions(+), 73 deletions(-) diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java index 8626b18b57..bec7b94b16 100644 --- a/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java +++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java @@ -84,6 +84,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.util.test.BroadcastInterceptingContext; import com.android.modules.utils.build.SdkLevel; +import com.android.net.module.util.ArrayTrackRecord; import com.android.net.module.util.SharedLog; import com.android.testutils.DevSdkIgnoreRule; @@ -348,99 +349,43 @@ public final class EntitlementManagerTest { public void testRequestLastEntitlementCacheValue() throws Exception { // 1. Entitlement check is not required. mDeps.fakeEntitlementResult = TETHER_ERROR_NO_ERROR; - ResultReceiver receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_NO_ERROR, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, true); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_WIFI, TETHER_ERROR_NO_ERROR, true); assertEquals(0, mDeps.uiProvisionCount); mDeps.reset(); setupForRequiredProvisioning(); // 2. No cache value and don't need to run entitlement check. - receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_ENTITLEMENT_UNKNOWN, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, false); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_WIFI, TETHER_ERROR_ENTITLEMENT_UNKNOWN, false); assertEquals(0, mDeps.uiProvisionCount); mDeps.reset(); // 3. No cache value and ui entitlement check is needed. mDeps.fakeEntitlementResult = TETHER_ERROR_PROVISIONING_FAILED; - receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_PROVISIONING_FAILED, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, true); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_WIFI, TETHER_ERROR_PROVISIONING_FAILED, true); assertEquals(1, mDeps.uiProvisionCount); mDeps.reset(); // 4. Cache value is TETHER_ERROR_PROVISIONING_FAILED and don't need to run entitlement // check. mDeps.fakeEntitlementResult = TETHER_ERROR_NO_ERROR; - receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_PROVISIONING_FAILED, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, false); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_WIFI, TETHER_ERROR_PROVISIONING_FAILED, false); assertEquals(0, mDeps.uiProvisionCount); mDeps.reset(); // 5. Cache value is TETHER_ERROR_PROVISIONING_FAILED and ui entitlement check is needed. mDeps.fakeEntitlementResult = TETHER_ERROR_NO_ERROR; - receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_NO_ERROR, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, true); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_WIFI, TETHER_ERROR_NO_ERROR, true); assertEquals(1, mDeps.uiProvisionCount); mDeps.reset(); // 6. Cache value is TETHER_ERROR_NO_ERROR. mDeps.fakeEntitlementResult = TETHER_ERROR_NO_ERROR; - receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_NO_ERROR, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, true); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_WIFI, TETHER_ERROR_NO_ERROR, true); assertEquals(0, mDeps.uiProvisionCount); mDeps.reset(); // 7. Test get value for other downstream type. - receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_ENTITLEMENT_UNKNOWN, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_USB, receiver, false); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_USB, TETHER_ERROR_ENTITLEMENT_UNKNOWN, false); assertEquals(0, mDeps.uiProvisionCount); mDeps.reset(); // 8. Test get value for invalid downstream type. mDeps.fakeEntitlementResult = TETHER_ERROR_NO_ERROR; - receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_ENTITLEMENT_UNKNOWN, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_WIFI_P2P, receiver, true); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_WIFI_P2P, TETHER_ERROR_ENTITLEMENT_UNKNOWN, true); assertEquals(0, mDeps.uiProvisionCount); mDeps.reset(); } @@ -660,6 +605,34 @@ public final class EntitlementManagerTest { doTestUiProvisioningMultiUser(false, 1); } + private static class TestableResultReceiver extends ResultReceiver { + private static final long DEFAULT_TIMEOUT_MS = 200L; + private final ArrayTrackRecord.ReadHead mHistory = + new ArrayTrackRecord().newReadHead(); + + TestableResultReceiver(Handler handler) { + super(handler); + } + + @Override + protected void onReceiveResult(int resultCode, Bundle resultData) { + mHistory.add(resultCode); + } + + void expectResult(int resultCode) { + final int event = mHistory.poll(DEFAULT_TIMEOUT_MS, it -> true); + assertEquals(resultCode, event); + } + } + + void assertLatestEntitlementResult(int downstreamType, int expectedCode, + boolean showEntitlementUi) { + final TestableResultReceiver receiver = new TestableResultReceiver(null); + mEnMgr.requestLatestTetheringEntitlementResult(downstreamType, receiver, showEntitlementUi); + mLooper.dispatchAll(); + receiver.expectResult(expectedCode); + } + private void doTestUiProvisioningMultiUser(boolean isAdminUser, int expectedUiProvisionCount) { setupForRequiredProvisioning(); doReturn(isAdminUser).when(mUserManager).isAdminUser(); @@ -674,7 +647,7 @@ public final class EntitlementManagerTest { } @Test - public void testsetExemptedDownstreamType() throws Exception { + public void testSetExemptedDownstreamType() { setupForRequiredProvisioning(); // Cellular upstream is not permitted when no entitlement result. assertFalse(mEnMgr.isCellularUpstreamPermitted()); @@ -737,14 +710,7 @@ public final class EntitlementManagerTest { setupCarrierConfig(false); setupForRequiredProvisioning(); mDeps.fakeEntitlementResult = TETHER_ERROR_NO_ERROR; - ResultReceiver receiver = new ResultReceiver(null) { - @Override - protected void onReceiveResult(int resultCode, Bundle resultData) { - assertEquals(TETHER_ERROR_PROVISIONING_FAILED, resultCode); - } - }; - mEnMgr.requestLatestTetheringEntitlementResult(TETHERING_WIFI, receiver, false); - mLooper.dispatchAll(); + assertLatestEntitlementResult(TETHERING_WIFI, TETHER_ERROR_PROVISIONING_FAILED, false); assertEquals(0, mDeps.uiProvisionCount); mDeps.reset(); }