diff options
author | wu@webrtc.org <wu@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-01-23 22:12:45 +0000 |
---|---|---|
committer | wu@webrtc.org <wu@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-01-23 22:12:45 +0000 |
commit | 1b5713169ff3f21791214c4500e5d775048c3ba9 (patch) | |
tree | e4ecde34ce092d72f36ecb6c7bf09c7486aeeeb7 /p2p | |
parent | da972775f11f2dea29ee8538776299aa6fdd1d9d (diff) | |
download | talk-1b5713169ff3f21791214c4500e5d775048c3ba9.tar.gz |
Update talk to 60094938.
Review URL: https://webrtc-codereview.appspot.com/7489005
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@5420 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'p2p')
-rw-r--r-- | p2p/base/turnport_unittest.cc | 56 |
1 files changed, 53 insertions, 3 deletions
diff --git a/p2p/base/turnport_unittest.cc b/p2p/base/turnport_unittest.cc index d559894..0284f51 100644 --- a/p2p/base/turnport_unittest.cc +++ b/p2p/base/turnport_unittest.cc @@ -24,6 +24,9 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#if defined(POSIX) +#include <dirent.h> +#endif #include "talk/base/asynctcpsocket.h" #include "talk/base/buffer.h" @@ -71,7 +74,7 @@ static const char kIcePwd1[] = "TESTICEPWD00000000000001"; static const char kIcePwd2[] = "TESTICEPWD00000000000002"; static const char kTurnUsername[] = "test"; static const char kTurnPassword[] = "test"; -static const int kTimeout = 1000; +static const unsigned int kTimeout = 1000; static const cricket::ProtocolAddress kTurnUdpProtoAddr( kTurnUdpIntAddr, cricket::PROTO_UDP); @@ -80,8 +83,26 @@ static const cricket::ProtocolAddress kTurnTcpProtoAddr( static const cricket::ProtocolAddress kTurnUdpIPv6ProtoAddr( kTurnUdpIPv6IntAddr, cricket::PROTO_UDP); +static const unsigned int MSG_TESTFINISH = 0; + +#if defined(LINUX) +static int GetFDCount() { + struct dirent *dp; + int fd_count = 0; + DIR *dir = opendir("/proc/self/fd/"); + while ((dp = readdir(dir)) != NULL) { + if (dp->d_name[0] == '.') + continue; + ++fd_count; + } + closedir(dir); + return fd_count; +} +#endif + class TurnPortTest : public testing::Test, - public sigslot::has_slots<> { + public sigslot::has_slots<>, + public talk_base::MessageHandler { public: TurnPortTest() : main_(talk_base::Thread::Current()), @@ -95,10 +116,17 @@ class TurnPortTest : public testing::Test, turn_error_(false), turn_unknown_address_(false), turn_create_permission_success_(false), - udp_ready_(false) { + udp_ready_(false), + test_finish_(false) { network_.AddIP(talk_base::IPAddress(INADDR_ANY)); } + virtual void OnMessage(talk_base::Message* msg) { + ASSERT(msg->message_id == MSG_TESTFINISH); + if (msg->message_id == MSG_TESTFINISH) + test_finish_ = true; + } + void OnTurnPortComplete(Port* port) { turn_ready_ = true; } @@ -264,6 +292,7 @@ class TurnPortTest : public testing::Test, bool turn_unknown_address_; bool turn_create_permission_success_; bool udp_ready_; + bool test_finish_; std::vector<talk_base::Buffer> turn_packets_; std::vector<talk_base::Buffer> udp_packets_; }; @@ -378,3 +407,24 @@ TEST_F(TurnPortTest, TestTurnLocalIPv6AddressServerIPv6ExtenalIPv4) { EXPECT_NE(0, turn_port_->Candidates()[0].address().port()); } +// This test verifies any FD's are not leaked after TurnPort is destroyed. +// https://code.google.com/p/webrtc/issues/detail?id=2651 +#if defined(LINUX) +TEST_F(TurnPortTest, TestResolverShutdown) { + turn_server_.AddInternalSocket(kTurnUdpIPv6IntAddr, cricket::PROTO_UDP); + int last_fd_count = GetFDCount(); + // Need to supply unresolved address to kick off resolver. + CreateTurnPort(kLocalIPv6Addr, kTurnUsername, kTurnPassword, + cricket::ProtocolAddress(talk_base::SocketAddress( + "stun.l.google.com", 3478), cricket::PROTO_UDP)); + turn_port_->PrepareAddress(); + ASSERT_TRUE_WAIT(turn_error_, kTimeout); + EXPECT_TRUE(turn_port_->Candidates().empty()); + turn_port_.reset(); + talk_base::Thread::Current()->Post(this, MSG_TESTFINISH); + // Waiting for above message to be processed. + ASSERT_TRUE_WAIT(test_finish_, kTimeout); + EXPECT_EQ(last_fd_count, GetFDCount()); +} +#endif + |