Fix WifiManager.startTetheredHotspot mocking

TetheringTest has several tests that rely on starting Wifi tethering,
but do not mock WifiManager.startTetheredHotspot. This causes the
pending Wifi request to be removed, even though the test continues
thinking that the call succeeded and continues mocking Wifi AP events.

Fix this by making sure the mock returns true in setUp(), and only set
it to false when we expect that the call should fail.

Bug: 216524590
Test: atest TetheringTest
Change-Id: Iaf076b9ae64d737a8591c7f41a5552757b47999b
This commit is contained in:
Quang Anh Luong 2025-03-15 14:12:28 +09:00
commit db7fdac6d9

View file

@ -724,6 +724,7 @@ public class TetheringTest {
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI)).thenReturn(true);
when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_DIRECT)).thenReturn(true);
mIpServerDependencies = spy(new MockIpServerDependencies());
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
mTetheringWithSoftApConfigEnabled = SdkLevel.isAtLeastB();
}
@ -1961,7 +1962,6 @@ public class TetheringTest {
@Test
public void failingWifiTetheringLegacyApBroadcast() throws Exception {
initTetheringOnTestThread();
when(mWifiManager.startTetheredHotspot(any(SoftApConfiguration.class))).thenReturn(true);
// Emulate pressing the WiFi tethering button.
mTethering.startTethering(createTetheringRequest(TETHERING_WIFI), TEST_CALLER_PKG,
@ -1998,7 +1998,6 @@ public class TetheringTest {
@Test
public void workingWifiTetheringEnrichedApBroadcast() throws Exception {
initTetheringOnTestThread();
when(mWifiManager.startTetheredHotspot(any(SoftApConfiguration.class))).thenReturn(true);
// Emulate pressing the WiFi tethering button.
mTethering.startTethering(createTetheringRequest(TETHERING_WIFI), TEST_CALLER_PKG,
@ -2047,7 +2046,6 @@ public class TetheringTest {
@Test
public void failureEnablingIpForwarding() throws Exception {
initTetheringOnTestThread();
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
doThrow(new RemoteException()).when(mNetd).ipfwdEnableForwarding(TETHERING_NAME);
// Emulate pressing the WiFi tethering button.
@ -2391,7 +2389,6 @@ public class TetheringTest {
// 2. Enable wifi tethering.
UpstreamNetworkState upstreamState = buildMobileDualStackUpstreamState();
initTetheringUpstream(upstreamState);
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
mTethering.startTethering(createTetheringRequest(TETHERING_WIFI), TEST_CALLER_PKG,
null);
@ -2494,7 +2491,6 @@ public class TetheringTest {
callback.expectOffloadStatusChanged(TETHER_HARDWARE_OFFLOAD_STOPPED);
UpstreamNetworkState upstreamState = buildMobileDualStackUpstreamState();
initTetheringUpstream(upstreamState);
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
// Enable wifi tethering
mBinderCallingUid = TEST_CALLER_UID;
@ -2568,7 +2564,6 @@ public class TetheringTest {
.setSoftApConfiguration(softApConfig).build();
tetheringRequest.setUid(TEST_CALLER_UID);
ResultListener successListener = new ResultListener(TETHER_ERROR_NO_ERROR);
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
mTethering.startTethering(tetheringRequest, TEST_CALLER_PKG, successListener);
mLooper.dispatchAll();
successListener.assertHasResult();
@ -2625,7 +2620,6 @@ public class TetheringTest {
@Test
public void testFuzzyMatchedWifiCanBeAddedAfterIpServerStopped() throws Exception {
assumeTrue(mTetheringDependencies.isTetheringWithSoftApConfigEnabled());
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
initTetheringOnTestThread();
// Start wifi tethering and mock the ap state change.
@ -2658,7 +2652,6 @@ public class TetheringTest {
@Test
public void testFuzzyMatchedWifiCanBeAddedAfterIpServerUnwanted() throws Exception {
assumeTrue(mTetheringDependencies.isTetheringWithSoftApConfigEnabled());
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
initTetheringOnTestThread();
// Start wifi tethering and mock the ap state change.
@ -2691,7 +2684,6 @@ public class TetheringTest {
@Test
public void testFuzzyMatchedWifiCanBeAddedAfterIpServerError() throws Exception {
assumeTrue(mTetheringDependencies.isTetheringWithSoftApConfigEnabled());
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
initTetheringOnTestThread();
// Set up the DHCP server to fail creation.
@ -2719,7 +2711,6 @@ public class TetheringTest {
@Test
public void testFuzzyMatchedWifiCanBeAddedAfterStoppingPendingRequest() throws Exception {
assumeTrue(mTetheringDependencies.isTetheringWithSoftApConfigEnabled());
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
initTetheringOnTestThread();
// Start wifi tethering but keep the request pending by not sending the ap state change.
@ -2751,7 +2742,6 @@ public class TetheringTest {
@Test
public void testFuzzyMatchedWifiCanBeAddedAfterStoppingServingRequest() throws Exception {
assumeTrue(mTetheringDependencies.isTetheringWithSoftApConfigEnabled());
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
initTetheringOnTestThread();
// Start wifi tethering and mock the ap state change.
@ -2788,7 +2778,6 @@ public class TetheringTest {
initTetheringOnTestThread();
UpstreamNetworkState upstreamState = buildMobileDualStackUpstreamState();
initTetheringUpstream(upstreamState);
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
// Enable wifi tethering.
SoftApConfiguration softApConfig = new SoftApConfiguration.Builder()
@ -2835,7 +2824,6 @@ public class TetheringTest {
initTetheringOnTestThread();
UpstreamNetworkState upstreamState = buildMobileDualStackUpstreamState();
initTetheringUpstream(upstreamState);
when(mWifiManager.startTetheredHotspot(null)).thenReturn(true);
// Enable wifi tethering.
SoftApConfiguration softApConfig = new SoftApConfiguration.Builder()
@ -3224,7 +3212,6 @@ public class TetheringTest {
final int clientAddrParceled = 0xc0a8002a;
final ArgumentCaptor<DhcpServingParamsParcel> dhcpParamsCaptor =
ArgumentCaptor.forClass(DhcpServingParamsParcel.class);
when(mWifiManager.startTetheredHotspot(any())).thenReturn(true);
mTethering.startTethering(createTetheringRequest(TETHERING_WIFI,
serverLinkAddr, clientLinkAddr, false, CONNECTIVITY_SCOPE_GLOBAL, null),
TEST_CALLER_PKG, null);
@ -3388,26 +3375,38 @@ public class TetheringTest {
mLooper.dispatchAll();
verify(mEntitleMgr).stopProvisioningIfNeeded(TETHERING_WIFI);
reset(mEntitleMgr);
}
// If one app enables tethering without provisioning check first, then another app enables
// tethering of the same type but does not disable the provisioning check.
@Test
public void testNonExemptRequestAddedAfterExemptRequestOfSameType() throws Exception {
// Note: When fuzzy-matching is enabled, it is not possible yet to have two concurrent
// requests of the same type that are subject to carrier entitlement due to fuzzy-matching.
mTetheringWithSoftApConfigEnabled = false;
initTetheringOnTestThread();
setupForRequiredProvisioning();
final TetheringRequest wifiExemptRequest =
createTetheringRequest(TETHERING_WIFI, null, null, true,
CONNECTIVITY_SCOPE_GLOBAL, null);
mTethering.startTethering(wifiExemptRequest, TEST_CALLER_PKG, null);
mLooper.dispatchAll();
verify(mEntitleMgr, never()).startProvisioningIfNeeded(TETHERING_WIFI, false);
verify(mEntitleMgr).setExemptedDownstreamType(TETHERING_WIFI);
assertTrue(mEntitleMgr.isCellularUpstreamPermitted());
reset(mEntitleMgr);
setupForRequiredProvisioning();
final TetheringRequest wifiNotExemptRequest =
createTetheringRequest(TETHERING_WIFI, null, null, false,
CONNECTIVITY_SCOPE_GLOBAL, null);
mTethering.startTethering(wifiNotExemptRequest, TEST_CALLER_PKG, null);
mLooper.dispatchAll();
verify(mEntitleMgr).stopProvisioningIfNeeded(TETHERING_WIFI);
verify(mEntitleMgr).startProvisioningIfNeeded(TETHERING_WIFI, false);
verify(mEntitleMgr, never()).setExemptedDownstreamType(TETHERING_WIFI);
assertFalse(mEntitleMgr.isCellularUpstreamPermitted());
mTethering.stopTethering(TETHERING_WIFI);
mLooper.dispatchAll();
verify(mEntitleMgr).stopProvisioningIfNeeded(TETHERING_WIFI);
reset(mEntitleMgr);
verify(mEntitleMgr, times(2)).stopProvisioningIfNeeded(TETHERING_WIFI);
}
private void setupForRequiredProvisioning() {
@ -4206,6 +4205,21 @@ public class TetheringTest {
assertFalse(sapPrefix.equals(lohsPrefix));
}
@Test
public void testFailStartTetheredHotspotWithoutRequest() throws Exception {
mTetheringWithSoftApConfigEnabled = false;
initTetheringOnTestThread();
when(mWifiManager.startTetheredHotspot(null)).thenReturn(false);
ResultListener result = new ResultListener(TETHER_ERROR_INTERNAL_ERROR);
mTethering.startTethering(createTetheringRequest(TETHERING_WIFI), TEST_CALLER_PKG, result);
mLooper.dispatchAll();
verify(mWifiManager).startTetheredHotspot(null);
verifyNoMoreInteractions(mWifiManager);
result.assertHasResult();
assertTrue(mTethering.getPendingTetheringRequests().isEmpty());
}
@Test
public void testWifiTetheringWhenP2pActive() throws Exception {
initTetheringOnTestThread();
@ -4219,7 +4233,6 @@ public class TetheringTest {
verify(mUpstreamNetworkMonitor, never()).setTryCell(true);
assertEquals(TETHER_ERROR_NO_ERROR, mTethering.getLastErrorForTest(TEST_P2P_IFNAME));
when(mWifiManager.startTetheredHotspot(any())).thenReturn(true);
// Emulate pressing the WiFi tethering button.
mTethering.startTethering(createTetheringRequest(TETHERING_WIFI), TEST_CALLER_PKG,
null);