From 56271ed8894fb2e985c9b366e4e38313a4652d63 Mon Sep 17 00:00:00 2001 From: guoweis Date: Fri, 15 Jan 2016 14:45:06 -0800 Subject: [PATCH] fix bug 5430 Fixed misusage of Connection function and also fixed the test case. BUG=webrtc:5430 Review URL: https://codereview.webrtc.org/1592763003 Cr-Commit-Position: refs/heads/master@{#11278} --- webrtc/base/network.cc | 8 +++++--- webrtc/base/network_unittest.cc | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/webrtc/base/network.cc b/webrtc/base/network.cc index 488c475137..0f13d07548 100644 --- a/webrtc/base/network.cc +++ b/webrtc/base/network.cc @@ -771,12 +771,14 @@ IPAddress BasicNetworkManager::QueryDefaultLocalAddress(int family) const { scoped_ptr socket( thread_->socketserver()->CreateAsyncSocket(family, SOCK_DGRAM)); if (!socket) { + LOG_ERR(LERROR) << "Socket creation failed"; return IPAddress(); } - if (!socket->Connect( - SocketAddress(family == AF_INET ? kPublicIPv4Host : kPublicIPv6Host, - kPublicPort))) { + if (socket->Connect(SocketAddress( + family == AF_INET ? kPublicIPv4Host : kPublicIPv6Host, kPublicPort)) < + 0) { + LOG_ERR(LERROR) << "Connect failed with " << socket->GetError(); return IPAddress(); } return socket->GetLocalAddress().ipaddr(); diff --git a/webrtc/base/network_unittest.cc b/webrtc/base/network_unittest.cc index 7dd400b996..645cb58a20 100644 --- a/webrtc/base/network_unittest.cc +++ b/webrtc/base/network_unittest.cc @@ -940,22 +940,27 @@ TEST_F(NetworkTest, TestNetworkMonitoring) { } TEST_F(NetworkTest, DefaultLocalAddress) { - TestBasicNetworkManager manager; - manager.StartUpdating(); IPAddress ip; - - // GetDefaultLocalAddress should return false when not set. - EXPECT_FALSE(manager.GetDefaultLocalAddress(AF_INET, &ip)); - EXPECT_FALSE(manager.GetDefaultLocalAddress(AF_INET6, &ip)); + TestBasicNetworkManager manager; + manager.SignalNetworksChanged.connect(static_cast(this), + &NetworkTest::OnNetworksChanged); + FakeNetworkMonitorFactory* factory = new FakeNetworkMonitorFactory(); + NetworkMonitorFactory::SetFactory(factory); + manager.StartUpdating(); + EXPECT_TRUE_WAIT(callback_called_, 1000); // Make sure we can query default local address when an address for such // address family exists. std::vector networks; manager.GetNetworks(&networks); + EXPECT_TRUE(!networks.empty()); for (auto& network : networks) { if (network->GetBestIP().family() == AF_INET) { EXPECT_TRUE(manager.QueryDefaultLocalAddress(AF_INET) != IPAddress()); - } else if (network->GetBestIP().family() == AF_INET6) { + } else if (network->GetBestIP().family() == AF_INET6 && + !IPIsLoopback(network->GetBestIP())) { + // Existence of an IPv6 loopback address doesn't mean it has IPv6 network + // enabled. EXPECT_TRUE(manager.QueryDefaultLocalAddress(AF_INET6) != IPAddress()); } }