From a639528a434e7138dac7229c5294c9954aa88444 Mon Sep 17 00:00:00 2001 From: Byoungchan Lee Date: Fri, 2 Dec 2022 19:52:08 +0900 Subject: [PATCH] Fix AndroidNetworkMonitorTests crash due to DCHECK failure AndroidNetworkMonitor::SetNetworkInfos assumes this method is called only once, but unittests calls it twice. One is called by the startMonitoring Java method, and the other is called by each test. Because of this, these tests will not succeed if dcheck_always_on is true. To solve this problem, use OnNetworkConnected_n instead of SetNetworkInfos in each test. Bug: None Change-Id: I027706ad5ccd597a91e3a66f15e181ee22d4aaa9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/285861 Reviewed-by: Harald Alvestrand Reviewed-by: Jonas Oreland Commit-Queue: Daniel.L (Byoungchan) Lee Cr-Commit-Position: refs/heads/main@{#38798} --- .../android_network_monitor_unittest.cc | 19 +++++++++++-------- sdk/android/src/jni/android_network_monitor.h | 4 +++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/sdk/android/native_unittests/android_network_monitor_unittest.cc b/sdk/android/native_unittests/android_network_monitor_unittest.cc index 9aec62d630..0e166a472a 100644 --- a/sdk/android/native_unittests/android_network_monitor_unittest.cc +++ b/sdk/android/native_unittests/android_network_monitor_unittest.cc @@ -121,7 +121,7 @@ TEST_F(AndroidNetworkMonitorTest, jni::NetworkInformation net_info = CreateNetworkInformation("wlan0", ipv6_handle, ipv6_address1); std::vector net_infos(1, net_info); - network_monitor_->SetNetworkInfos(net_infos); + network_monitor_->OnNetworkConnected_n(net_info); auto network_handle1 = network_monitor_->FindNetworkHandleFromAddressOrName(ipv6_address1, ""); @@ -144,7 +144,7 @@ TEST_F(AndroidNetworkMonitorTest, TestFindNetworkHandleUsingIfName) { jni::NetworkInformation net_info = CreateNetworkInformation("wlan0", ipv6_handle, ipv6_address1); std::vector net_infos(1, net_info); - network_monitor_->SetNetworkInfos(net_infos); + network_monitor_->OnNetworkConnected_n(net_info); rtc::IPAddress ipv4_address(kTestIpv4Address); @@ -170,7 +170,7 @@ TEST_F(AndroidNetworkMonitorTest, TestUnderlyingVpnType) { CreateNetworkInformation("wlan0", ipv4_handle, ipv4_address); net_info.type = jni::NETWORK_VPN; net_info.underlying_type_for_vpn = jni::NETWORK_WIFI; - network_monitor_->SetNetworkInfos({net_info}); + network_monitor_->OnNetworkConnected_n(net_info); EXPECT_EQ( rtc::ADAPTER_TYPE_WIFI, @@ -186,7 +186,7 @@ TEST_F(AndroidNetworkMonitorTest, Disconnect) { jni::NetworkInformation net_info = CreateNetworkInformation("wlan0", ipv4_handle, ipv4_address); net_info.type = jni::NETWORK_WIFI; - network_monitor_->SetNetworkInfos({net_info}); + network_monitor_->OnNetworkConnected_n(net_info); EXPECT_TRUE(network_monitor_->GetInterfaceInfo("wlan0").available); EXPECT_TRUE(network_monitor_ @@ -215,7 +215,7 @@ TEST_F(AndroidNetworkMonitorTest, Reset) { jni::NetworkInformation net_info = CreateNetworkInformation("wlan0", ipv4_handle, ipv4_address); net_info.type = jni::NETWORK_WIFI; - network_monitor_->SetNetworkInfos({net_info}); + network_monitor_->OnNetworkConnected_n(net_info); EXPECT_TRUE(network_monitor_->GetInterfaceInfo("wlan0").available); EXPECT_TRUE(network_monitor_ @@ -250,7 +250,8 @@ TEST_F(AndroidNetworkMonitorTest, DuplicateIfname) { CreateNetworkInformation("wlan0", ipv6_handle, ipv6_address); net_info2.type = jni::NETWORK_UNKNOWN_CELLULAR; - network_monitor_->SetNetworkInfos({net_info1, net_info2}); + network_monitor_->OnNetworkConnected_n(net_info1); + network_monitor_->OnNetworkConnected_n(net_info2); // The last added. EXPECT_TRUE(network_monitor_->GetInterfaceInfo("wlan0").available); @@ -281,7 +282,8 @@ TEST_F(AndroidNetworkMonitorTest, DuplicateIfnameDisconnectOwner) { CreateNetworkInformation("wlan0", ipv6_handle, ipv6_address); net_info2.type = jni::NETWORK_UNKNOWN_CELLULAR; - network_monitor_->SetNetworkInfos({net_info1, net_info2}); + network_monitor_->OnNetworkConnected_n(net_info1); + network_monitor_->OnNetworkConnected_n(net_info2); // The last added. EXPECT_TRUE(network_monitor_->GetInterfaceInfo("wlan0").available); @@ -311,7 +313,8 @@ TEST_F(AndroidNetworkMonitorTest, DuplicateIfnameDisconnectNonOwner) { CreateNetworkInformation("wlan0", ipv6_handle, ipv6_address); net_info2.type = jni::NETWORK_UNKNOWN_CELLULAR; - network_monitor_->SetNetworkInfos({net_info1, net_info2}); + network_monitor_->OnNetworkConnected_n(net_info1); + network_monitor_->OnNetworkConnected_n(net_info2); // The last added. EXPECT_TRUE(network_monitor_->GetInterfaceInfo("wlan0").available); diff --git a/sdk/android/src/jni/android_network_monitor.h b/sdk/android/src/jni/android_network_monitor.h index d0aad5ea76..f94650be1f 100644 --- a/sdk/android/src/jni/android_network_monitor.h +++ b/sdk/android/src/jni/android_network_monitor.h @@ -114,6 +114,9 @@ class AndroidNetworkMonitor : public rtc::NetworkMonitorInterface { const JavaRef& j_connection_type, jint preference); + // Visible for testing. + void OnNetworkConnected_n(const NetworkInformation& network_info); + // Visible for testing. absl::optional FindNetworkHandleFromAddressOrName( const rtc::IPAddress& address, @@ -121,7 +124,6 @@ class AndroidNetworkMonitor : public rtc::NetworkMonitorInterface { private: void reset(); - void OnNetworkConnected_n(const NetworkInformation& network_info); void OnNetworkDisconnected_n(NetworkHandle network_handle); void OnNetworkPreference_n(NetworkType type, rtc::NetworkPreference preference);