From 05afdc7987832db83bcfb04d99aef12d2de78b84 Mon Sep 17 00:00:00 2001 From: Aswin Sankar Date: Fri, 19 May 2023 13:05:46 -0700 Subject: 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 --- src/com/google/android/iwlan/IwlanDataService.java | 5 +++-- .../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 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; @@ -534,6 +535,30 @@ public class IwlanDataServiceTest { verify(mMockEpdgTunnelManager, times(2)).updateNetwork(eq(newNetwork), eq(mLinkProperties)); } + @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); -- cgit v1.2.3