Index: webrtc/p2p/stunprober/stunprober_unittest.cc |
diff --git a/webrtc/p2p/stunprober/stunprober_unittest.cc b/webrtc/p2p/stunprober/stunprober_unittest.cc |
index ffd5040e57dfceade008017a2334adb92ee66978..3e030144dac8a4b73aa39b8adfeb9e240837d24c 100644 |
--- a/webrtc/p2p/stunprober/stunprober_unittest.cc |
+++ b/webrtc/p2p/stunprober/stunprober_unittest.cc |
@@ -8,6 +8,7 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
+#include "webrtc/base/asyncresolverinterface.h" |
#include "webrtc/base/basictypes.h" |
#include "webrtc/base/bind.h" |
#include "webrtc/base/checks.h" |
@@ -16,20 +17,12 @@ |
#include "webrtc/base/scoped_ptr.h" |
#include "webrtc/base/ssladapter.h" |
#include "webrtc/base/virtualsocketserver.h" |
- |
+#include "webrtc/p2p/base/basicpacketsocketfactory.h" |
#include "webrtc/p2p/base/teststunserver.h" |
#include "webrtc/p2p/stunprober/stunprober.h" |
-#include "webrtc/p2p/stunprober/stunprober_dependencies.h" |
-using stunprober::HostNameResolverInterface; |
-using stunprober::TaskRunner; |
-using stunprober::SocketFactory; |
using stunprober::StunProber; |
using stunprober::AsyncCallback; |
-using stunprober::ClientSocketInterface; |
-using stunprober::ServerSocketInterface; |
-using stunprober::SocketFactory; |
-using stunprober::TaskRunner; |
namespace stunprober { |
@@ -41,58 +34,6 @@ const rtc::SocketAddress kStunAddr2("1.1.1.2", 3478); |
const rtc::SocketAddress kFailedStunAddr("1.1.1.3", 3478); |
const rtc::SocketAddress kStunMappedAddr("77.77.77.77", 0); |
-class TestSocketServer : public rtc::VirtualSocketServer { |
- public: |
- using rtc::VirtualSocketServer::CreateAsyncSocket; |
- explicit TestSocketServer(SocketServer* ss) : rtc::VirtualSocketServer(ss) {} |
- void SetLocalAddress(const rtc::SocketAddress& addr) { addr_ = addr; } |
- |
- // CreateAsyncSocket is used by StunProber to create both client and server |
- // sockets. The first socket is used to retrieve local address which will be |
- // used later for Bind(). |
- rtc::AsyncSocket* CreateAsyncSocket(int type) override { |
- rtc::VirtualSocket* socket = static_cast<rtc::VirtualSocket*>( |
- rtc::VirtualSocketServer::CreateAsyncSocket(type)); |
- if (!local_addr_set_) { |
- // Only the first socket can SetLocalAddress. For others, Bind will fail |
- // if local address is set. |
- socket->SetLocalAddress(addr_); |
- local_addr_set_ = true; |
- } else { |
- sockets_.push_back(socket); |
- } |
- return socket; |
- } |
- |
- size_t num_socket() { return sockets_.size(); } |
- |
- private: |
- bool local_addr_set_ = false; |
- std::vector<rtc::VirtualSocket*> sockets_; |
- rtc::SocketAddress addr_; |
-}; |
- |
-class FakeHostNameResolver : public HostNameResolverInterface { |
- public: |
- FakeHostNameResolver() {} |
- void set_result(int ret) { ret_ = ret; } |
- void set_addresses(const std::vector<rtc::SocketAddress>& addresses) { |
- server_ips_ = addresses; |
- } |
- const std::vector<rtc::SocketAddress>& get_addresses() { return server_ips_; } |
- void add_address(const rtc::SocketAddress& ip) { server_ips_.push_back(ip); } |
- void Resolve(const rtc::SocketAddress& addr, |
- std::vector<rtc::SocketAddress>* addresses, |
- stunprober::AsyncCallback callback) override { |
- *addresses = server_ips_; |
- callback(ret_); |
- } |
- |
- private: |
- int ret_ = 0; |
- std::vector<rtc::SocketAddress> server_ips_; |
-}; |
- |
} // namespace |
class StunProberTest : public testing::Test { |
@@ -100,7 +41,7 @@ class StunProberTest : public testing::Test { |
StunProberTest() |
: main_(rtc::Thread::Current()), |
pss_(new rtc::PhysicalSocketServer), |
- ss_(new TestSocketServer(pss_.get())), |
+ ss_(new rtc::VirtualSocketServer(pss_.get())), |
ss_scope_(ss_.get()), |
result_(StunProber::SUCCESS), |
stun_server_1_(cricket::TestStunServer::Create(rtc::Thread::Current(), |
@@ -114,62 +55,56 @@ class StunProberTest : public testing::Test { |
void set_expected_result(int result) { result_ = result; } |
- void StartProbing(HostNameResolverInterface* resolver, |
- SocketFactoryInterface* socket_factory, |
- const rtc::SocketAddress& addr, |
+ void StartProbing(rtc::PacketSocketFactory* socket_factory, |
+ const std::vector<rtc::SocketAddress>& addrs, |
+ const rtc::NetworkManager::NetworkList& networks, |
bool shared_socket, |
uint16 interval, |
uint16 pings_per_ip) { |
- std::vector<rtc::SocketAddress> addrs; |
- addrs.push_back(addr); |
- prober.reset(new StunProber(resolver, socket_factory, new TaskRunner())); |
+ prober.reset( |
+ new StunProber(socket_factory, rtc::Thread::Current(), networks)); |
prober->Start(addrs, shared_socket, interval, pings_per_ip, |
- 100 /* timeout_ms */, |
- [this](int result) { this->StopCallback(result); }); |
+ 100 /* timeout_ms */, [this](StunProber* prober, int result) { |
+ this->StopCallback(prober, result); |
+ }); |
} |
void RunProber(bool shared_mode) { |
const int pings_per_ip = 3; |
- const uint16 port = kStunAddr1.port(); |
- rtc::SocketAddress addr("stun.l.google.com", port); |
std::vector<rtc::SocketAddress> addrs; |
- |
- // Set up the resolver for 2 stun server addresses. |
- rtc::scoped_ptr<FakeHostNameResolver> resolver(new FakeHostNameResolver()); |
- resolver->add_address(kStunAddr1); |
- resolver->add_address(kStunAddr2); |
+ addrs.push_back(kStunAddr1); |
+ addrs.push_back(kStunAddr2); |
// Add a non-existing server. This shouldn't pollute the result. |
- resolver->add_address(kFailedStunAddr); |
+ addrs.push_back(kFailedStunAddr); |
- rtc::scoped_ptr<SocketFactory> socket_factory(new SocketFactory()); |
+ rtc::Network ipv4_network1("test_eth0", "Test Network Adapter 1", |
+ rtc::IPAddress(0x12345600U), 24); |
+ ipv4_network1.AddIP(rtc::IPAddress(0x12345678)); |
+ rtc::NetworkManager::NetworkList networks; |
+ networks.push_back(&ipv4_network1); |
- // Set local address in socketserver so getsockname will return kLocalAddr |
- // instead of 0.0.0.0 for the first socket. |
- ss_->SetLocalAddress(kLocalAddr); |
+ rtc::scoped_ptr<rtc::BasicPacketSocketFactory> socket_factory( |
+ new rtc::BasicPacketSocketFactory()); |
// Set up the expected results for verification. |
std::set<std::string> srflx_addresses; |
srflx_addresses.insert(kStunMappedAddr.ToString()); |
const uint32 total_pings_tried = |
- static_cast<uint32>(pings_per_ip * resolver->get_addresses().size()); |
+ static_cast<uint32>(pings_per_ip * addrs.size()); |
// The reported total_pings should not count for pings sent to the |
// kFailedStunAddr. |
const uint32 total_pings_reported = total_pings_tried - pings_per_ip; |
- size_t total_sockets = shared_mode ? pings_per_ip : total_pings_tried; |
- |
- StartProbing(resolver.release(), socket_factory.release(), addr, |
- shared_mode, 3, pings_per_ip); |
+ StartProbing(socket_factory.get(), addrs, networks, shared_mode, 3, |
+ pings_per_ip); |
WAIT(stopped_, 1000); |
StunProber::Stats stats; |
- EXPECT_EQ(ss_->num_socket(), total_sockets); |
EXPECT_TRUE(prober->GetStats(&stats)); |
EXPECT_EQ(stats.success_percent, 100); |
EXPECT_TRUE(stats.nat_type > stunprober::NATTYPE_NONE); |
- EXPECT_EQ(stats.host_ip, kLocalAddr.ipaddr().ToString()); |
EXPECT_EQ(stats.srflx_addrs, srflx_addresses); |
EXPECT_EQ(static_cast<uint32>(stats.num_request_sent), |
total_pings_reported); |
@@ -178,14 +113,14 @@ class StunProberTest : public testing::Test { |
} |
private: |
- void StopCallback(int result) { |
+ void StopCallback(StunProber* prober, int result) { |
EXPECT_EQ(result, result_); |
stopped_ = true; |
} |
rtc::Thread* main_; |
rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_; |
- rtc::scoped_ptr<TestSocketServer> ss_; |
+ rtc::scoped_ptr<rtc::VirtualSocketServer> ss_; |
rtc::SocketServerScope ss_scope_; |
rtc::scoped_ptr<StunProber> prober; |
int result_ = 0; |
@@ -194,19 +129,6 @@ class StunProberTest : public testing::Test { |
rtc::scoped_ptr<cricket::TestStunServer> stun_server_2_; |
}; |
-TEST_F(StunProberTest, DNSFailure) { |
- rtc::SocketAddress addr("stun.l.google.com", 19302); |
- rtc::scoped_ptr<FakeHostNameResolver> resolver(new FakeHostNameResolver()); |
- rtc::scoped_ptr<SocketFactory> socket_factory(new SocketFactory()); |
- |
- set_expected_result(StunProber::RESOLVE_FAILED); |
- |
- // Non-0 value is treated as failure. |
- resolver->set_result(1); |
- StartProbing(resolver.release(), socket_factory.release(), addr, false, 10, |
- 30); |
-} |
- |
TEST_F(StunProberTest, NonSharedMode) { |
RunProber(false); |
} |