diff options
author | Aswin Sankar <apsankar@google.com> | 2023-05-19 13:05:46 -0700 |
---|---|---|
committer | Aswin Sankar <apsankar@google.com> | 2023-05-24 11:30:57 -0700 |
commit | 05afdc7987832db83bcfb04d99aef12d2de78b84 (patch) | |
tree | 55b6e0d9a13419325271b4b90a40926ad37f440a | |
parent | 112b347bd7056651a41f97c72bc631aceb9b4d1e (diff) | |
download | Iwlan-05afdc7987832db83bcfb04d99aef12d2de78b84.tar.gz |
updateNetwork(): Avoid NPE for null Network object.
- On cross SIM enable or LinkProperties update, use Objects.equals()
support null Network objects.
- Network objects may be null if device has just booted up or Network is
of ETHERNET type.
Fix: 283177975, 282913671
Test: New UTs in IwlanDataServiceTest. Live test for fix.
Change-Id: Ife81fd507ee32c4083e7950ed46681a21c816696
Merged-In: Ife81fd507ee32c4083e7950ed46681a21c816696
-rw-r--r-- | src/com/google/android/iwlan/IwlanDataService.java | 5 | ||||
-rw-r--r-- | test/com/google/android/iwlan/IwlanDataServiceTest.java | 25 |
2 files changed, 28 insertions, 2 deletions
diff --git a/src/com/google/android/iwlan/IwlanDataService.java b/src/com/google/android/iwlan/IwlanDataService.java index 239713d..0d564ab 100644 --- a/src/com/google/android/iwlan/IwlanDataService.java +++ b/src/com/google/android/iwlan/IwlanDataService.java @@ -81,6 +81,7 @@ import java.util.HashMap; import java.util.List; import java.util.LongSummaryStatistics; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; public class IwlanDataService extends DataService { @@ -956,14 +957,14 @@ public class IwlanDataService extends DataService { } private void updateNetwork( - @NonNull Network network, @Nullable LinkProperties linkProperties) { + @Nullable Network network, @Nullable LinkProperties linkProperties) { if (mIwlanDataService.isNetworkConnected( isActiveDataOnOtherSub(getSlotIndex()), IwlanHelper.isCrossSimCallingEnabled(mContext, getSlotIndex()))) { getTunnelManager().updateNetwork(network, linkProperties); } - if (network.equals(sNetwork)) { + if (Objects.equals(network, sNetwork)) { return; } for (Map.Entry<String, TunnelState> entry : mTunnelStateForApn.entrySet()) { diff --git a/test/com/google/android/iwlan/IwlanDataServiceTest.java b/test/com/google/android/iwlan/IwlanDataServiceTest.java index 6862c97..c4549df 100644 --- a/test/com/google/android/iwlan/IwlanDataServiceTest.java +++ b/test/com/google/android/iwlan/IwlanDataServiceTest.java @@ -17,6 +17,7 @@ package com.google.android.iwlan; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; +import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; @@ -535,6 +536,30 @@ public class IwlanDataServiceTest { } @Test + public void testOnCrossSimCallingEnable_doNotUpdateTunnelManagerIfNoNetwork() throws Exception { + when(mMockImsMmTelManager.isCrossSimCallingEnabled()).thenReturn(true); + mIwlanDataService + .mIwlanDataServiceHandler + .obtainMessage( + IwlanEventListener.CROSS_SIM_CALLING_ENABLE_EVENT, + DEFAULT_SLOT_INDEX, + 0 /* unused */) + .sendToTarget(); + mTestLooper.dispatchAll(); + verify(mMockEpdgTunnelManager, never()) + .updateNetwork(any(Network.class), any(LinkProperties.class)); + } + + @Test + public void testOnEthernetConnection_doNotUpdateTunnelManager() throws Exception { + Network newNetwork = createMockNetwork(mLinkProperties); + onSystemDefaultNetworkConnected( + newNetwork, mLinkProperties, TRANSPORT_ETHERNET, DEFAULT_SUB_INDEX); + verify(mMockEpdgTunnelManager, never()) + .updateNetwork(eq(newNetwork), any(LinkProperties.class)); + } + + @Test public void testAddDuplicateDataServiceProviderThrows() throws Exception { when(mMockIwlanDataServiceProvider.getSlotIndex()).thenReturn(DEFAULT_SLOT_INDEX); assertThrows( |