| Index: webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| diff --git a/webrtc/p2p/base/p2ptransportchannel_unittest.cc b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| index 7cd23daa38d2567dbab7cb16647c197f2ff8c094..d41e3304f4ee3a47b9276b37f422b6daff3b2e27 100644
|
| --- a/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| +++ b/webrtc/p2p/base/p2ptransportchannel_unittest.cc
|
| @@ -210,23 +210,24 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| };
|
|
|
| struct Result {
|
| - Result(const std::string& lt, const std::string& lp,
|
| - const std::string& rt, const std::string& rp,
|
| - const std::string& lt2, const std::string& lp2,
|
| - const std::string& rt2, const std::string& rp2, int wait)
|
| - : local_type(lt), local_proto(lp), remote_type(rt), remote_proto(rp),
|
| - local_type2(lt2), local_proto2(lp2), remote_type2(rt2),
|
| - remote_proto2(rp2), connect_wait(wait) {
|
| - }
|
| -
|
| - std::string local_type;
|
| - std::string local_proto;
|
| - std::string remote_type;
|
| - std::string remote_proto;
|
| - std::string local_type2;
|
| - std::string local_proto2;
|
| - std::string remote_type2;
|
| - std::string remote_proto2;
|
| + Result(const std::string& controlling_type,
|
| + const std::string& controlling_protocol,
|
| + const std::string& controlled_type,
|
| + const std::string& controlled_protocol,
|
| + int wait)
|
| + : controlling_type(controlling_type),
|
| + controlling_protocol(controlling_protocol),
|
| + controlled_type(controlled_type),
|
| + controlled_protocol(controlled_protocol),
|
| + connect_wait(wait) {}
|
| +
|
| + // The expected candidate type and protocol of the controlling ICE agent.
|
| + std::string controlling_type;
|
| + std::string controlling_protocol;
|
| + // The expected candidate type and protocol of the controlled ICE agent.
|
| + std::string controlled_type;
|
| + std::string controlled_protocol;
|
| + // How long to wait before the correct candidate pair is selected.
|
| int connect_wait;
|
| };
|
|
|
| @@ -381,9 +382,11 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| static const Result kPrflxUdpToLocalUdp;
|
| static const Result kStunUdpToLocalUdp;
|
| static const Result kStunUdpToStunUdp;
|
| + static const Result kStunUdpToPrflxUdp;
|
| static const Result kPrflxUdpToStunUdp;
|
| static const Result kLocalUdpToRelayUdp;
|
| static const Result kPrflxUdpToRelayUdp;
|
| + static const Result kRelayUdpToPrflxUdp;
|
| static const Result kLocalTcpToLocalTcp;
|
| static const Result kLocalTcpToPrflxTcp;
|
| static const Result kPrflxTcpToLocalTcp;
|
| @@ -442,30 +445,19 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| void SetAllowTcpListen(int endpoint, bool allow_tcp_listen) {
|
| return GetEndpoint(endpoint)->SetAllowTcpListen(allow_tcp_listen);
|
| }
|
| - bool IsLocalToPrflxOrTheReverse(const Result& expected) {
|
| - return (
|
| - (expected.local_type == "local" && expected.remote_type == "prflx") ||
|
| - (expected.local_type == "prflx" && expected.remote_type == "local"));
|
| - }
|
|
|
| // Return true if the approprite parts of the expected Result, based
|
| // on the local and remote candidate of ep1_ch1, match. This can be
|
| // used in an EXPECT_TRUE_WAIT.
|
| bool CheckCandidate1(const Result& expected) {
|
| const std::string& local_type = LocalCandidate(ep1_ch1())->type();
|
| - const std::string& local_proto = LocalCandidate(ep1_ch1())->protocol();
|
| + const std::string& local_protocol = LocalCandidate(ep1_ch1())->protocol();
|
| const std::string& remote_type = RemoteCandidate(ep1_ch1())->type();
|
| - const std::string& remote_proto = RemoteCandidate(ep1_ch1())->protocol();
|
| - return ((local_proto == expected.local_proto &&
|
| - remote_proto == expected.remote_proto) &&
|
| - ((local_type == expected.local_type &&
|
| - remote_type == expected.remote_type) ||
|
| - // Sometimes we expect local -> prflx or prflx -> local
|
| - // and instead get prflx -> local or local -> prflx, and
|
| - // that's OK.
|
| - (IsLocalToPrflxOrTheReverse(expected) &&
|
| - local_type == expected.remote_type &&
|
| - remote_type == expected.local_type)));
|
| + const std::string& remote_protocol = RemoteCandidate(ep1_ch1())->protocol();
|
| + return (local_protocol == expected.controlling_protocol &&
|
| + remote_protocol == expected.controlled_protocol &&
|
| + local_type == expected.controlling_type &&
|
| + remote_type == expected.controlled_type);
|
| }
|
|
|
| // EXPECT_EQ on the approprite parts of the expected Result, based
|
| @@ -478,41 +470,27 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| }
|
|
|
| const std::string& local_type = LocalCandidate(ep1_ch1())->type();
|
| - const std::string& local_proto = LocalCandidate(ep1_ch1())->protocol();
|
| + const std::string& local_protocol = LocalCandidate(ep1_ch1())->protocol();
|
| const std::string& remote_type = RemoteCandidate(ep1_ch1())->type();
|
| - const std::string& remote_proto = RemoteCandidate(ep1_ch1())->protocol();
|
| - EXPECT_EQ(expected.local_type, local_type);
|
| - EXPECT_EQ(expected.remote_type, remote_type);
|
| - EXPECT_EQ(expected.local_proto, local_proto);
|
| - EXPECT_EQ(expected.remote_proto, remote_proto);
|
| + const std::string& remote_protocol = RemoteCandidate(ep1_ch1())->protocol();
|
| + EXPECT_EQ(expected.controlling_type, local_type);
|
| + EXPECT_EQ(expected.controlled_type, remote_type);
|
| + EXPECT_EQ(expected.controlling_protocol, local_protocol);
|
| + EXPECT_EQ(expected.controlled_protocol, remote_protocol);
|
| }
|
|
|
| // Return true if the approprite parts of the expected Result, based
|
| // on the local and remote candidate of ep2_ch1, match. This can be
|
| // used in an EXPECT_TRUE_WAIT.
|
| bool CheckCandidate2(const Result& expected) {
|
| - const std::string& local_proto = LocalCandidate(ep2_ch1())->protocol();
|
| - const std::string& remote_proto = RemoteCandidate(ep2_ch1())->protocol();
|
| - // Removed remote_type comparision aginst selected connection remote
|
| - // candidate. This is done to handle remote type discrepancy from
|
| - // local to stun based on the test type.
|
| - // For example in case of Open -> NAT, ep2 channels will have LULU
|
| - // and in other cases like NAT -> NAT it will be LUSU. To avoid these
|
| - // mismatches and we are doing comparision in different way.
|
| - // i.e. when don't match its remote type is either local or stun.
|
| - //
|
| - // Update(deadbeef): Also had to remove local type comparison. There
|
| - // is currently an issue where the local type is not updated to stun.
|
| - // So one side may see local<->relay while the other sees relay<->stun.
|
| - // This mean the other side may prioritize prflx<->relay, and won't have
|
| - // a local type of relay no matter how long we wait.
|
| - // TODO(deadbeef): Fix this!! It's causing us to have very sparse test
|
| - // coverage and is a very real bug.
|
| - //
|
| - // TODO(ronghuawu): Refine the test criteria.
|
| - // https://code.google.com/p/webrtc/issues/detail?id=1953
|
| - return ((local_proto == expected.local_proto2 &&
|
| - remote_proto == expected.remote_proto2));
|
| + const std::string& local_type = LocalCandidate(ep2_ch1())->type();
|
| + const std::string& local_protocol = LocalCandidate(ep2_ch1())->protocol();
|
| + const std::string& remote_type = RemoteCandidate(ep2_ch1())->type();
|
| + const std::string& remote_protocol = RemoteCandidate(ep2_ch1())->protocol();
|
| + return (local_protocol == expected.controlled_protocol &&
|
| + remote_protocol == expected.controlling_protocol &&
|
| + local_type == expected.controlled_type &&
|
| + remote_type == expected.controlling_type);
|
| }
|
|
|
| // EXPECT_EQ on the approprite parts of the expected Result, based
|
| @@ -525,13 +503,13 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| }
|
|
|
| const std::string& local_type = LocalCandidate(ep2_ch1())->type();
|
| - const std::string& local_proto = LocalCandidate(ep2_ch1())->protocol();
|
| + const std::string& local_protocol = LocalCandidate(ep2_ch1())->protocol();
|
| const std::string& remote_type = RemoteCandidate(ep2_ch1())->type();
|
| - const std::string& remote_proto = RemoteCandidate(ep2_ch1())->protocol();
|
| - EXPECT_EQ(expected.local_type2, local_type);
|
| - EXPECT_EQ(expected.remote_type2, remote_type);
|
| - EXPECT_EQ(expected.local_proto2, local_proto);
|
| - EXPECT_EQ(expected.remote_proto2, remote_proto);
|
| + const std::string& remote_protocol = RemoteCandidate(ep2_ch1())->protocol();
|
| + EXPECT_EQ(expected.controlled_type, local_type);
|
| + EXPECT_EQ(expected.controlling_type, remote_type);
|
| + EXPECT_EQ(expected.controlled_protocol, local_protocol);
|
| + EXPECT_EQ(expected.controlling_protocol, remote_protocol);
|
| }
|
|
|
| void Test(const Result& expected) {
|
| @@ -879,42 +857,90 @@ class P2PTransportChannelTestBase : public testing::Test,
|
| };
|
|
|
| // The tests have only a few outcomes, which we predefine.
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kLocalUdpToLocalUdp("local", "udp", "local", "udp",
|
| - "local", "udp", "local", "udp", 1000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kLocalUdpToStunUdp("local", "udp", "stun", "udp",
|
| - "local", "udp", "stun", "udp", 1000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kLocalUdpToPrflxUdp("local", "udp", "prflx", "udp",
|
| - "prflx", "udp", "local", "udp", 1000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kPrflxUdpToLocalUdp("prflx", "udp", "local", "udp",
|
| - "local", "udp", "prflx", "udp", 1000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kStunUdpToLocalUdp("stun", "udp", "local", "udp",
|
| - "local", "udp", "stun", "udp", 1000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kStunUdpToStunUdp("stun", "udp", "stun", "udp",
|
| - "stun", "udp", "stun", "udp", 1000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kPrflxUdpToStunUdp("prflx", "udp", "stun", "udp",
|
| - "local", "udp", "prflx", "udp", 1000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kLocalUdpToRelayUdp("local", "udp", "relay", "udp",
|
| - "relay", "udp", "local", "udp", 2000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kPrflxUdpToRelayUdp("prflx", "udp", "relay", "udp",
|
| - "relay", "udp", "prflx", "udp", 2000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kLocalTcpToLocalTcp("local", "tcp", "local", "tcp",
|
| - "local", "tcp", "local", "tcp", 3000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kLocalTcpToPrflxTcp("local", "tcp", "prflx", "tcp",
|
| - "prflx", "tcp", "local", "tcp", 3000);
|
| -const P2PTransportChannelTestBase::Result P2PTransportChannelTestBase::
|
| - kPrflxTcpToLocalTcp("prflx", "tcp", "local", "tcp",
|
| - "local", "tcp", "prflx", "tcp", 3000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kLocalUdpToLocalUdp("local",
|
| + "udp",
|
| + "local",
|
| + "udp",
|
| + 1000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kLocalUdpToStunUdp("local",
|
| + "udp",
|
| + "stun",
|
| + "udp",
|
| + 1000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kLocalUdpToPrflxUdp("local",
|
| + "udp",
|
| + "prflx",
|
| + "udp",
|
| + 1000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kPrflxUdpToLocalUdp("prflx",
|
| + "udp",
|
| + "local",
|
| + "udp",
|
| + 1000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kStunUdpToLocalUdp("stun",
|
| + "udp",
|
| + "local",
|
| + "udp",
|
| + 1000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kStunUdpToStunUdp("stun",
|
| + "udp",
|
| + "stun",
|
| + "udp",
|
| + 1000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kStunUdpToPrflxUdp("stun",
|
| + "udp",
|
| + "prflx",
|
| + "udp",
|
| + 1000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kPrflxUdpToStunUdp("prflx",
|
| + "udp",
|
| + "stun",
|
| + "udp",
|
| + 1000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kLocalUdpToRelayUdp("local",
|
| + "udp",
|
| + "relay",
|
| + "udp",
|
| + 2000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kPrflxUdpToRelayUdp("prflx",
|
| + "udp",
|
| + "relay",
|
| + "udp",
|
| + 2000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kRelayUdpToPrflxUdp("relay",
|
| + "udp",
|
| + "prflx",
|
| + "udp",
|
| + 2000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kLocalTcpToLocalTcp("local",
|
| + "tcp",
|
| + "local",
|
| + "tcp",
|
| + 3000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kLocalTcpToPrflxTcp("local",
|
| + "tcp",
|
| + "prflx",
|
| + "tcp",
|
| + 3000);
|
| +const P2PTransportChannelTestBase::Result
|
| + P2PTransportChannelTestBase::kPrflxTcpToLocalTcp("prflx",
|
| + "tcp",
|
| + "local",
|
| + "tcp",
|
| + 3000);
|
|
|
| // Test the matrix of all the connectivity types we expect to see in the wild.
|
| // Just test every combination of the configs in the Config enum.
|
| @@ -1027,9 +1053,11 @@ class P2PTransportChannelTest : public P2PTransportChannelTestBase {
|
| #define PULU &kPrflxUdpToLocalUdp
|
| #define SULU &kStunUdpToLocalUdp
|
| #define SUSU &kStunUdpToStunUdp
|
| +#define SUPU &kStunUdpToPrflxUdp
|
| #define PUSU &kPrflxUdpToStunUdp
|
| #define LURU &kLocalUdpToRelayUdp
|
| #define PURU &kPrflxUdpToRelayUdp
|
| +#define RUPU &kRelayUdpToPrflxUdp
|
| #define LTLT &kLocalTcpToLocalTcp
|
| #define LTPT &kLocalTcpToPrflxTcp
|
| #define PTLT &kPrflxTcpToLocalTcp
|
| @@ -1042,20 +1070,21 @@ class P2PTransportChannelTest : public P2PTransportChannelTestBase {
|
| // TODO: Fix NULLs caused by lack of TCP support in NATSocket.
|
| // TODO: Fix NULLs caused by no HTTP proxy support.
|
| // TODO: Rearrange rows/columns from best to worst.
|
| -const P2PTransportChannelTest::Result* P2PTransportChannelTest::kMatrix[NUM_CONFIGS][NUM_CONFIGS] = {
|
| - // OPEN CONE ADDR PORT SYMM 2CON SCON !UDP !TCP HTTP PRXH PRXS
|
| - /*OP*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, PTLT, LTPT, LSRS, NULL, LTPT},
|
| - /*CO*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, NULL, NULL, LSRS, NULL, LTRT},
|
| - /*AD*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, NULL, NULL, LSRS, NULL, LTRT},
|
| - /*PO*/ {LULU, LUSU, LUSU, LUSU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT},
|
| - /*SY*/ {PULU, PUSU, PUSU, PURU, PURU, PUSU, PURU, NULL, NULL, LSRS, NULL, LTRT},
|
| - /*2C*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, NULL, NULL, LSRS, NULL, LTRT},
|
| - /*SC*/ {PULU, PUSU, PUSU, PURU, PURU, PUSU, PURU, NULL, NULL, LSRS, NULL, LTRT},
|
| - /*!U*/ {PTLT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTPT, LSRS, NULL, LTRT},
|
| - /*!T*/ {LTRT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTRT, LSRS, NULL, LTRT},
|
| - /*HT*/ {LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, NULL, LSRS},
|
| - /*PR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
|
| - /*PR*/ {LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LSRS, NULL, LTRT},
|
| +const P2PTransportChannelTest::Result*
|
| + P2PTransportChannelTest::kMatrix[NUM_CONFIGS][NUM_CONFIGS] = {
|
| +// OPEN CONE ADDR PORT SYMM 2CON SCON !UDP !TCP HTTP PRXH PRXS
|
| +/*OP*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, LTPT, LTPT, LSRS, NULL, LTPT},
|
| +/*CO*/ {SULU, SUSU, SUSU, SUSU, SUPU, SUSU, SUPU, NULL, NULL, LSRS, NULL, LTRT},
|
| +/*AD*/ {SULU, SUSU, SUSU, SUSU, SUPU, SUSU, SUPU, NULL, NULL, LSRS, NULL, LTRT},
|
| +/*PO*/ {SULU, SUSU, SUSU, SUSU, RUPU, SUSU, RUPU, NULL, NULL, LSRS, NULL, LTRT},
|
| +/*SY*/ {PULU, PUSU, PUSU, PURU, PURU, PUSU, PURU, NULL, NULL, LSRS, NULL, LTRT},
|
| +/*2C*/ {SULU, SUSU, SUSU, SUSU, SUPU, SUSU, SUPU, NULL, NULL, LSRS, NULL, LTRT},
|
| +/*SC*/ {PULU, PUSU, PUSU, PURU, PURU, PUSU, PURU, NULL, NULL, LSRS, NULL, LTRT},
|
| +/*!U*/ {LTPT, NULL, NULL, NULL, NULL, NULL, NULL, LTPT, LTPT, LSRS, NULL, LTRT},
|
| +/*!T*/ {PTLT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTRT, LSRS, NULL, LTRT},
|
| +/*HT*/ {LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, NULL, LSRS},
|
| +/*PR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL},
|
| +/*PR*/ {LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LSRS, NULL, LTRT},
|
| };
|
|
|
| // The actual tests that exercise all the various configurations.
|
| @@ -1073,23 +1102,18 @@ const P2PTransportChannelTest::Result* P2PTransportChannelTest::kMatrix[NUM_CONF
|
| #define P2P_TEST(x, y) \
|
| P2P_TEST_DECLARATION(x, y,)
|
|
|
| -#define FLAKY_P2P_TEST(x, y) \
|
| - P2P_TEST_DECLARATION(x, y, DISABLED_)
|
| -
|
| -// TODO(holmer): Disabled due to randomly failing on webrtc buildbots.
|
| -// Issue: webrtc/2383
|
| -#define P2P_TEST_SET(x) \
|
| - P2P_TEST(x, OPEN) \
|
| - FLAKY_P2P_TEST(x, NAT_FULL_CONE) \
|
| - FLAKY_P2P_TEST(x, NAT_ADDR_RESTRICTED) \
|
| - FLAKY_P2P_TEST(x, NAT_PORT_RESTRICTED) \
|
| - P2P_TEST(x, NAT_SYMMETRIC) \
|
| - FLAKY_P2P_TEST(x, NAT_DOUBLE_CONE) \
|
| - P2P_TEST(x, NAT_SYMMETRIC_THEN_CONE) \
|
| - P2P_TEST(x, BLOCK_UDP) \
|
| - P2P_TEST(x, BLOCK_UDP_AND_INCOMING_TCP) \
|
| +#define P2P_TEST_SET(x) \
|
| + P2P_TEST(x, OPEN) \
|
| + P2P_TEST(x, NAT_FULL_CONE) \
|
| + P2P_TEST(x, NAT_ADDR_RESTRICTED) \
|
| + P2P_TEST(x, NAT_PORT_RESTRICTED) \
|
| + P2P_TEST(x, NAT_SYMMETRIC) \
|
| + P2P_TEST(x, NAT_DOUBLE_CONE) \
|
| + P2P_TEST(x, NAT_SYMMETRIC_THEN_CONE) \
|
| + P2P_TEST(x, BLOCK_UDP) \
|
| + P2P_TEST(x, BLOCK_UDP_AND_INCOMING_TCP) \
|
| P2P_TEST(x, BLOCK_ALL_BUT_OUTGOING_HTTP) \
|
| - P2P_TEST(x, PROXY_HTTPS) \
|
| + P2P_TEST(x, PROXY_HTTPS) \
|
| P2P_TEST(x, PROXY_SOCKS)
|
|
|
| P2P_TEST_SET(OPEN)
|
| @@ -1840,8 +1864,8 @@ class P2PTransportChannelSameNatTest : public P2PTransportChannelTestBase {
|
|
|
| TEST_F(P2PTransportChannelSameNatTest, TestConesBehindSameCone) {
|
| ConfigureEndpoints(NAT_FULL_CONE, NAT_FULL_CONE, NAT_FULL_CONE);
|
| - Test(P2PTransportChannelTestBase::Result(
|
| - "prflx", "udp", "stun", "udp", "stun", "udp", "prflx", "udp", 1000));
|
| + Test(
|
| + P2PTransportChannelTestBase::Result("prflx", "udp", "stun", "udp", 1000));
|
| }
|
|
|
| // Test what happens when we have multiple available pathways.
|
|
|