diff options
2 files changed, 96 insertions, 49 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt index d06a6e26b4ce..25b49c17ef4b 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/wifi/data/repository/WifiRepositorySwitcherTest.kt @@ -16,24 +16,28 @@ package com.android.systemui.statusbar.pipeline.wifi.data.repository -import android.net.ConnectivityManager import android.net.wifi.WifiManager import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.demomode.DemoMode import com.android.systemui.demomode.DemoModeController +import com.android.systemui.flags.FakeFeatureFlagsClassic +import com.android.systemui.flags.Flags +import com.android.systemui.log.LogBuffer import com.android.systemui.log.table.TableLogBuffer -import com.android.systemui.statusbar.pipeline.shared.data.repository.FakeConnectivityRepository +import com.android.systemui.statusbar.connectivity.WifiPickerTrackerFactory import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoModeWifiDataSource import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.DemoWifiRepository import com.android.systemui.statusbar.pipeline.wifi.data.repository.demo.model.FakeWifiEventModel -import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl -import com.android.systemui.statusbar.pipeline.wifi.shared.WifiInputLogger +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryViaTrackerLib import com.android.systemui.util.concurrency.FakeExecutor +import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.kotlinArgumentCaptor +import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.android.systemui.util.time.FakeSystemClock +import com.android.wifitrackerlib.WifiPickerTracker import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow @@ -55,18 +59,25 @@ import org.mockito.MockitoAnnotations @RunWith(AndroidJUnit4::class) class WifiRepositorySwitcherTest : SysuiTestCase() { private lateinit var underTest: WifiRepositorySwitcher - private lateinit var realImpl: WifiRepositoryImpl + private lateinit var realImpl: WifiRepositoryViaTrackerLib private lateinit var demoImpl: DemoWifiRepository @Mock private lateinit var demoModeController: DemoModeController - @Mock private lateinit var logger: WifiInputLogger @Mock private lateinit var tableLogger: TableLogBuffer - @Mock private lateinit var connectivityManager: ConnectivityManager @Mock private lateinit var wifiManager: WifiManager @Mock private lateinit var demoModeWifiDataSource: DemoModeWifiDataSource + @Mock private lateinit var wifiPickerTrackerFactory: WifiPickerTrackerFactory + @Mock private lateinit var wifiPickerTracker: WifiPickerTracker + + private val wifiLogBuffer = LogBuffer("wifi", maxSize = 100, logcatEchoTracker = mock()) private val demoModelFlow = MutableStateFlow<FakeWifiEventModel?>(null) private val mainExecutor = FakeExecutor(FakeSystemClock()) + private val featureFlags = + FakeFeatureFlagsClassic().also { + it.set(Flags.INSTANT_TETHER, true) + it.set(Flags.WIFI_SECONDARY_NETWORKS, true) + } private val testDispatcher = UnconfinedTestDispatcher() private val testScope = TestScope(testDispatcher) @@ -78,17 +89,18 @@ class WifiRepositorySwitcherTest : SysuiTestCase() { // Never start in demo mode whenever(demoModeController.isInDemoMode).thenReturn(false) + whenever(wifiPickerTrackerFactory.create(any(), any(), any())).thenReturn(wifiPickerTracker) + realImpl = - WifiRepositoryImpl( - fakeBroadcastDispatcher, - connectivityManager, - FakeConnectivityRepository(), - logger, - tableLogger, + WifiRepositoryViaTrackerLib( + featureFlags, + testScope.backgroundScope, mainExecutor, testDispatcher, - testScope.backgroundScope, + wifiPickerTrackerFactory, wifiManager, + wifiLogBuffer, + tableLogger, ) whenever(demoModeWifiDataSource.wifiEvents).thenReturn(demoModelFlow) diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt index b7a3b300a460..624ccb356891 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/mobile/data/repository/prod/MobileConnectionsRepositoryTest.kt @@ -26,6 +26,7 @@ import android.net.NetworkCapabilities.TRANSPORT_ETHERNET import android.net.NetworkCapabilities.TRANSPORT_WIFI import android.net.vcn.VcnTransportInfo import android.net.wifi.WifiInfo +import android.net.wifi.WifiManager import android.os.ParcelUuid import android.telephony.CarrierConfigManager import android.telephony.SubscriptionInfo @@ -46,8 +47,10 @@ import com.android.systemui.SysuiTestCase import com.android.systemui.coroutines.collectLastValue import com.android.systemui.flags.FakeFeatureFlagsClassic import com.android.systemui.flags.Flags +import com.android.systemui.log.LogBuffer import com.android.systemui.log.table.TableLogBuffer import com.android.systemui.log.table.TableLogBufferFactory +import com.android.systemui.statusbar.connectivity.WifiPickerTrackerFactory import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository import com.android.systemui.statusbar.pipeline.mobile.data.MobileInputLogger import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel @@ -60,14 +63,18 @@ import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlo import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepositoryImpl import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository -import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryImpl +import com.android.systemui.statusbar.pipeline.wifi.data.repository.prod.WifiRepositoryViaTrackerLib import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.argumentCaptor +import com.android.systemui.util.mockito.capture import com.android.systemui.util.mockito.eq import com.android.systemui.util.mockito.mock import com.android.systemui.util.mockito.whenever import com.android.systemui.util.time.FakeSystemClock +import com.android.wifitrackerlib.MergedCarrierEntry +import com.android.wifitrackerlib.WifiEntry +import com.android.wifitrackerlib.WifiPickerTracker import com.google.common.truth.Truth.assertThat import java.util.UUID import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -97,7 +104,11 @@ import org.mockito.MockitoAnnotations class MobileConnectionsRepositoryTest : SysuiTestCase() { private val flags = - FakeFeatureFlagsClassic().also { it.set(Flags.ROAMING_INDICATOR_VIA_DISPLAY_INFO, true) } + FakeFeatureFlagsClassic().also { + it.set(Flags.ROAMING_INDICATOR_VIA_DISPLAY_INFO, true) + it.set(Flags.INSTANT_TETHER, true) + it.set(Flags.WIFI_SECONDARY_NETWORKS, true) + } private lateinit var connectionFactory: MobileConnectionRepositoryImpl.Factory private lateinit var carrierMergedFactory: CarrierMergedConnectionRepository.Factory @@ -114,9 +125,17 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { @Mock private lateinit var summaryLogger: TableLogBuffer @Mock private lateinit var logBufferFactory: TableLogBufferFactory @Mock private lateinit var updateMonitor: KeyguardUpdateMonitor + @Mock private lateinit var wifiManager: WifiManager + @Mock private lateinit var wifiPickerTrackerFactory: WifiPickerTrackerFactory + @Mock private lateinit var wifiPickerTracker: WifiPickerTracker + @Mock private lateinit var wifiTableLogBuffer: TableLogBuffer private val mobileMappings = FakeMobileMappingsProxy() private val subscriptionManagerProxy = FakeSubscriptionManagerProxy() + private val mainExecutor = FakeExecutor(FakeSystemClock()) + private val wifiLogBuffer = LogBuffer("wifi", maxSize = 100, logcatEchoTracker = mock()) + private val wifiPickerTrackerCallback = + argumentCaptor<WifiPickerTracker.WifiPickerTrackerCallback>() private val dispatcher = StandardTestDispatcher() private val testScope = TestScope(dispatcher) @@ -139,6 +158,9 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { mock<TableLogBuffer>() } + whenever(wifiPickerTrackerFactory.create(any(), capture(wifiPickerTrackerCallback), any())) + .thenReturn(wifiPickerTracker) + // For convenience, set up the subscription info callbacks whenever(subscriptionManager.getActiveSubscriptionInfo(anyInt())).thenAnswer { invocation -> when (invocation.getArgument(0) as Int) { @@ -164,16 +186,15 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { airplaneModeRepository = FakeAirplaneModeRepository() wifiRepository = - WifiRepositoryImpl( - fakeBroadcastDispatcher, - connectivityManager, - connectivityRepository, - mock(), - mock(), - FakeExecutor(FakeSystemClock()), - dispatcher, + WifiRepositoryViaTrackerLib( + flags, testScope.backgroundScope, - mock(), + mainExecutor, + dispatcher, + wifiPickerTrackerFactory, + wifiManager, + wifiLogBuffer, + wifiTableLogBuffer, ) carrierConfigRepository = @@ -278,7 +299,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { testScope.runTest { val latest by collectLastValue(underTest.subscriptions) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) whenever(subscriptionManager.completeActiveSubscriptionInfoList) .thenReturn(listOf(SUB_CM)) getSubscriptionCallback().onSubscriptionsChanged() @@ -291,7 +312,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { testScope.runTest { val latest by collectLastValue(underTest.subscriptions) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) whenever(subscriptionManager.completeActiveSubscriptionInfoList) .thenReturn(listOf(SUB_1, SUB_2, SUB_CM)) getSubscriptionCallback().onSubscriptionsChanged() @@ -445,7 +466,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { collectLastValue(underTest.subscriptions) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) whenever(subscriptionManager.completeActiveSubscriptionInfoList) .thenReturn(listOf(SUB_CM)) getSubscriptionCallback().onSubscriptionsChanged() @@ -462,7 +483,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { collectLastValue(underTest.subscriptions) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) whenever(subscriptionManager.completeActiveSubscriptionInfoList) .thenReturn(listOf(SUB_1, SUB_CM)) getSubscriptionCallback().onSubscriptionsChanged() @@ -479,7 +500,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { collectLastValue(underTest.subscriptions) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) whenever(subscriptionManager.completeActiveSubscriptionInfoList) .thenReturn(listOf(SUB_1, SUB_CM)) getSubscriptionCallback().onSubscriptionsChanged() @@ -491,7 +512,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { // WHEN the wifi network updates to be not carrier merged getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_ACTIVE) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_ACTIVE) + setWifiState(isCarrierMerged = false) runCurrent() // THEN the repos update @@ -507,7 +528,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { collectLastValue(underTest.subscriptions) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_ACTIVE) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_ACTIVE) + setWifiState(isCarrierMerged = false) whenever(subscriptionManager.completeActiveSubscriptionInfoList) .thenReturn(listOf(SUB_1, SUB_CM)) getSubscriptionCallback().onSubscriptionsChanged() @@ -520,7 +541,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { // WHEN the wifi network updates to be carrier merged getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) runCurrent() // THEN the repos update @@ -562,7 +583,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { collectLastValue(underTest.subscriptions) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) whenever(subscriptionManager.completeActiveSubscriptionInfoList) .thenReturn(listOf(SUB_1, SUB_2, SUB_CM)) getSubscriptionCallback().onSubscriptionsChanged() @@ -845,7 +866,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { val latest by collectLastValue(underTest.hasCarrierMergedConnection) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, caps) + setWifiState(isCarrierMerged = true) assertThat(latest).isTrue() } @@ -867,7 +888,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { val latest by collectLastValue(underTest.hasCarrierMergedConnection) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, caps) + setWifiState(isCarrierMerged = true) assertThat(latest).isTrue() } @@ -890,7 +911,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { val latest by collectLastValue(underTest.hasCarrierMergedConnection) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, caps) + setWifiState(isCarrierMerged = true) assertThat(latest).isTrue() } @@ -912,7 +933,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { val latest by collectLastValue(underTest.hasCarrierMergedConnection) getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, caps) + setWifiState(isCarrierMerged = true) assertThat(latest).isTrue() } @@ -946,7 +967,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { } getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, mainCapabilities) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, mainCapabilities) + setWifiState(isCarrierMerged = true) // THEN there's a carrier merged connection assertThat(latest).isTrue() @@ -982,7 +1003,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { } getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, mainCapabilities) - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, mainCapabilities) + setWifiState(isCarrierMerged = true) // THEN there's a carrier merged connection assertThat(latest).isTrue() @@ -1005,7 +1026,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps) // BUT the wifi repo has gotten updates that it *is* carrier merged - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) // THEN hasCarrierMergedConnection is true assertThat(latest).isTrue() @@ -1026,7 +1047,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps) // BUT the wifi repo has gotten updates that it *is* carrier merged - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) // THEN hasCarrierMergedConnection is **false** (The default network being CELLULAR // takes precedence over the wifi network being carrier merged.) @@ -1048,7 +1069,7 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { getDefaultNetworkCallback().onCapabilitiesChanged(NETWORK, caps) // BUT the wifi repo has gotten updates that it *is* carrier merged - getNormalNetworkCallback().onCapabilitiesChanged(NETWORK, WIFI_NETWORK_CAPS_CM) + setWifiState(isCarrierMerged = true) // AND we're in airplane mode airplaneModeRepository.setIsAirplaneMode(true) @@ -1277,12 +1298,26 @@ class MobileConnectionsRepositoryTest : SysuiTestCase() { return callbackCaptor.value!! } - // Note: This is used to update the [WifiRepository]. - private fun TestScope.getNormalNetworkCallback(): ConnectivityManager.NetworkCallback { - runCurrent() - val callbackCaptor = argumentCaptor<ConnectivityManager.NetworkCallback>() - verify(connectivityManager).registerNetworkCallback(any(), callbackCaptor.capture()) - return callbackCaptor.value!! + private fun setWifiState(isCarrierMerged: Boolean) { + if (isCarrierMerged) { + val mergedEntry = + mock<MergedCarrierEntry>().apply { + whenever(this.isPrimaryNetwork).thenReturn(true) + whenever(this.isDefaultNetwork).thenReturn(true) + whenever(this.subscriptionId).thenReturn(SUB_CM_ID) + } + whenever(wifiPickerTracker.mergedCarrierEntry).thenReturn(mergedEntry) + whenever(wifiPickerTracker.connectedWifiEntry).thenReturn(null) + } else { + val wifiEntry = + mock<WifiEntry>().apply { + whenever(this.isPrimaryNetwork).thenReturn(true) + whenever(this.isDefaultNetwork).thenReturn(true) + } + whenever(wifiPickerTracker.connectedWifiEntry).thenReturn(wifiEntry) + whenever(wifiPickerTracker.mergedCarrierEntry).thenReturn(null) + } + wifiPickerTrackerCallback.value.onWifiEntriesChanged() } private fun TestScope.getSubscriptionCallback(): |