Don't trigger OnNetworkChange when changing from 3G to 4G

This patch is a follow up to https://webrtc-review.googlesource.com/c/src/+/172582
and change so that a switch from CELLULAR_X to CELLULAR_Y does not
trigger OnNetworkChange.

This is needed as the OnNetworkChange signals triggers
BasicPortAllocator to rescan all networks and generate new candidates.

The actual adapter type change is still possible to react on using
SignalTypeChanged.

BUG: webrtc:11473
Change-Id: Icc1a945b8a4df1714c6ec4b02ec759ecada92d7f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/172802
Commit-Queue: Jonas Oreland <jonaso@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30992}
This commit is contained in:
Jonas Oreland
2020-04-03 10:12:28 +02:00
committed by Commit Bot
parent 0cc37303d8
commit c7ea04af91
3 changed files with 81 additions and 3 deletions

View File

@ -1118,4 +1118,65 @@ TEST_F(NetworkTest, MAYBE_DefaultLocalAddress) {
manager.StopUpdating();
}
// Test that MergeNetworkList does not set change = true
// when changing from cellular_X to cellular_Y.
TEST_F(NetworkTest, TestWhenNetworkListChangeReturnsChangedFlag) {
BasicNetworkManager manager;
IPAddress ip1;
EXPECT_TRUE(IPFromString("2400:4030:1:2c00:be30:0:0:1", &ip1));
Network* net1 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
net1->set_type(ADAPTER_TYPE_CELLULAR_3G);
net1->AddIP(ip1);
NetworkManager::NetworkList list;
list.push_back(net1);
{
bool changed;
MergeNetworkList(manager, list, &changed);
EXPECT_TRUE(changed);
NetworkManager::NetworkList list2;
manager.GetNetworks(&list2);
EXPECT_EQ(list2.size(), 1uL);
EXPECT_EQ(ADAPTER_TYPE_CELLULAR_3G, list2[0]->type());
}
// Modify net1 from 3G to 4G
{
Network* net2 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
net2->set_type(ADAPTER_TYPE_CELLULAR_4G);
net2->AddIP(ip1);
list.clear();
list.push_back(net2);
bool changed;
MergeNetworkList(manager, list, &changed);
// Change from 3G to 4G shall not trigger OnNetworksChanged,
// i.e changed = false.
EXPECT_FALSE(changed);
NetworkManager::NetworkList list2;
manager.GetNetworks(&list2);
ASSERT_EQ(list2.size(), 1uL);
EXPECT_EQ(ADAPTER_TYPE_CELLULAR_4G, list2[0]->type());
}
// Don't modify.
{
Network* net2 = new Network("em1", "em1", TruncateIP(ip1, 64), 64);
net2->set_type(ADAPTER_TYPE_CELLULAR_4G);
net2->AddIP(ip1);
list.clear();
list.push_back(net2);
bool changed;
MergeNetworkList(manager, list, &changed);
// No change.
EXPECT_FALSE(changed);
NetworkManager::NetworkList list2;
manager.GetNetworks(&list2);
ASSERT_EQ(list2.size(), 1uL);
EXPECT_EQ(ADAPTER_TYPE_CELLULAR_4G, list2[0]->type());
}
}
} // namespace rtc