summaryrefslogtreecommitdiff
path: root/p2p
diff options
context:
space:
mode:
authorwu@webrtc.org <wu@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-01-23 22:12:45 +0000
committerwu@webrtc.org <wu@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-01-23 22:12:45 +0000
commit1b5713169ff3f21791214c4500e5d775048c3ba9 (patch)
treee4ecde34ce092d72f36ecb6c7bf09c7486aeeeb7 /p2p
parentda972775f11f2dea29ee8538776299aa6fdd1d9d (diff)
downloadtalk-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.cc56
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
+