diff --git a/webrtc/BUILD.gn b/webrtc/BUILD.gn
index be0e88e..cef4c4e 100644
--- a/webrtc/BUILD.gn
+++ b/webrtc/BUILD.gn
@@ -502,6 +502,7 @@
       "p2p/base/transportcontroller_unittest.cc",
       "p2p/base/transportdescriptionfactory_unittest.cc",
       "p2p/base/turnport_unittest.cc",
+      "p2p/base/turnserver_unittest.cc",
       "p2p/client/basicportallocator_unittest.cc",
       "p2p/stunprober/stunprober_unittest.cc",
     ]
diff --git a/webrtc/p2p/base/turnserver.cc b/webrtc/p2p/base/turnserver.cc
index dac7e38..7dd9e19 100644
--- a/webrtc/p2p/base/turnserver.cc
+++ b/webrtc/p2p/base/turnserver.cc
@@ -10,6 +10,8 @@
 
 #include "webrtc/p2p/base/turnserver.h"
 
+#include <tuple>  // for std::tie
+
 #include "webrtc/p2p/base/asyncstuntcpsocket.h"
 #include "webrtc/p2p/base/common.h"
 #include "webrtc/p2p/base/packetsocketfactory.h"
@@ -544,7 +546,7 @@
 }
 
 bool TurnServerConnection::operator<(const TurnServerConnection& c) const {
-  return src_ < c.src_ || dst_ < c.dst_ || proto_ < c.proto_;
+  return std::tie(src_, dst_, proto_) < std::tie(c.src_, c.dst_, c.proto_);
 }
 
 std::string TurnServerConnection::ToString() const {
diff --git a/webrtc/p2p/base/turnserver_unittest.cc b/webrtc/p2p/base/turnserver_unittest.cc
new file mode 100644
index 0000000..a63670b
--- /dev/null
+++ b/webrtc/p2p/base/turnserver_unittest.cc
@@ -0,0 +1,68 @@
+/*
+ *  Copyright 2016 The WebRTC Project Authors. All rights reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "webrtc/base/gunit.h"
+#include "webrtc/base/physicalsocketserver.h"
+#include "webrtc/base/virtualsocketserver.h"
+#include "webrtc/p2p/base/basicpacketsocketfactory.h"
+#include "webrtc/p2p/base/turnserver.h"
+
+// NOTE: This is a work in progress. Currently this file only has tests for
+// TurnServerConnection, a primitive class used by TurnServer.
+
+namespace cricket {
+
+class TurnServerConnectionTest : public testing::Test {
+ public:
+  TurnServerConnectionTest() : vss_(&pss_), ss_scope_(&vss_) {}
+
+  void ExpectEqual(const TurnServerConnection& a,
+                   const TurnServerConnection& b) {
+    EXPECT_TRUE(a == b);
+    EXPECT_FALSE(a < b);
+    EXPECT_FALSE(b < a);
+  }
+
+  void ExpectNotEqual(const TurnServerConnection& a,
+                      const TurnServerConnection& b) {
+    EXPECT_FALSE(a == b);
+    // We don't care which is less than the other, as long as only one is less
+    // than the other.
+    EXPECT_TRUE((a < b) != (b < a));
+  }
+
+ protected:
+  rtc::PhysicalSocketServer pss_;
+  rtc::VirtualSocketServer vss_;
+  rtc::SocketServerScope ss_scope_;
+  // Since this is constructed after |ss_scope_|, it will pick up |ss_scope_|'s
+  // socket server.
+  rtc::BasicPacketSocketFactory socket_factory_;
+};
+
+TEST_F(TurnServerConnectionTest, ComparisonOperators) {
+  std::unique_ptr<rtc::AsyncPacketSocket> socket1(
+      socket_factory_.CreateUdpSocket(rtc::SocketAddress("1.1.1.1", 1), 0, 0));
+  std::unique_ptr<rtc::AsyncPacketSocket> socket2(
+      socket_factory_.CreateUdpSocket(rtc::SocketAddress("2.2.2.2", 2), 0, 0));
+  TurnServerConnection connection1(socket2->GetLocalAddress(), PROTO_UDP,
+                                   socket1.get());
+  TurnServerConnection connection2(socket2->GetLocalAddress(), PROTO_UDP,
+                                   socket1.get());
+  TurnServerConnection connection3(socket1->GetLocalAddress(), PROTO_UDP,
+                                   socket2.get());
+  TurnServerConnection connection4(socket2->GetLocalAddress(), PROTO_TCP,
+                                   socket1.get());
+  ExpectEqual(connection1, connection2);
+  ExpectNotEqual(connection1, connection3);
+  ExpectNotEqual(connection1, connection4);
+}
+
+}  // namespace cricket
diff --git a/webrtc/p2p/client/basicportallocator_unittest.cc b/webrtc/p2p/client/basicportallocator_unittest.cc
index b61d131..d430cce 100644
--- a/webrtc/p2p/client/basicportallocator_unittest.cc
+++ b/webrtc/p2p/client/basicportallocator_unittest.cc
@@ -1291,17 +1291,9 @@
                rtc::SocketAddress(kTurnUdpExtAddr.ipaddr(), 0));
 }
 
-// Test has an assert error on win_x64_dbg and win_dbg. See: webrtc:6068
-#if defined(WEBRTC_WIN)
-#define MAYBE_TestEachInterfaceHasItsOwnTurnPorts \
-  DISABLED_TestEachInterfaceHasItsOwnTurnPort
-#else
-#define MAYBE_TestEachInterfaceHasItsOwnTurnPorts \
-  TestEachInterfaceHasItsOwnTurnPorts
-#endif
 // Tests that if prune_turn_ports is set, each network interface
 // will has its own set of TurnPorts based on their priorities.
-TEST_F(BasicPortAllocatorTest, MAYBE_TestEachInterfaceHasItsOwnTurnPorts) {
+TEST_F(BasicPortAllocatorTest, TestEachInterfaceHasItsOwnTurnPorts) {
   turn_server_.AddInternalSocket(kTurnTcpIntAddr, PROTO_TCP);
   turn_server_.AddInternalSocket(kTurnUdpIntIPv6Addr, PROTO_UDP);
   turn_server_.AddInternalSocket(kTurnTcpIntIPv6Addr, PROTO_TCP);
diff --git a/webrtc/webrtc_tests.gypi b/webrtc/webrtc_tests.gypi
index f1217eb..b5da843 100644
--- a/webrtc/webrtc_tests.gypi
+++ b/webrtc/webrtc_tests.gypi
@@ -117,6 +117,7 @@
         'p2p/base/transportdescriptionfactory_unittest.cc',
         'p2p/base/tcpport_unittest.cc',
         'p2p/base/turnport_unittest.cc',
+        'p2p/base/turnserver_unittest.cc',
         'p2p/client/basicportallocator_unittest.cc',
         'p2p/stunprober/stunprober_unittest.cc',
       ],
