10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2009 Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 28cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/p2p/base/p2ptransportchannel.h" 29cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/p2p/base/testrelayserver.h" 30cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/p2p/base/teststunserver.h" 31cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/p2p/base/testturnserver.h" 32cf81adffe15fa8ea0f333432e41f6d504148f18abuildbot@webrtc.org#include "talk/p2p/client/basicportallocator.h" 332a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/dscp.h" 342a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/fakenetwork.h" 352a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/firewallsocketserver.h" 362a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/gunit.h" 372a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/helpers.h" 382a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/logging.h" 392a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/natserver.h" 402a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/natsocketfactory.h" 412a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/physicalsocketserver.h" 422a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/proxyserver.h" 432a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/socketaddress.h" 442a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/ssladapter.h" 452a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/thread.h" 462a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org#include "webrtc/base/virtualsocketserver.h" 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::kDefaultPortAllocatorFlags; 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::kMinimumStepDelay; 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::kDefaultStepDelay; 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG; 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgusing cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET; 53459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.orgusing cricket::ServerAddresses; 542a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.orgusing rtc::SocketAddress; 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kDefaultTimeout = 1000; 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kOnlyLocalPorts = cricket::PORTALLOCATOR_DISABLE_STUN | 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::PORTALLOCATOR_DISABLE_RELAY | 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::PORTALLOCATOR_DISABLE_TCP; 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Addresses on the public internet. 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kPublicAddrs[2] = 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org { SocketAddress("11.11.11.11", 0), SocketAddress("22.22.22.22", 0) }; 635c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org// IPv6 Addresses on the public internet. 645c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.orgstatic const SocketAddress kIPv6PublicAddrs[2] = { 655c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org SocketAddress("2400:4030:1:2c00:be30:abcd:efab:cdef", 0), 665c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org SocketAddress("2620:0:1000:1b03:2e41:38ff:fea6:f2a4", 0) 675c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org}; 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// For configuring multihomed clients. 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kAlternateAddrs[2] = 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org { SocketAddress("11.11.11.101", 0), SocketAddress("22.22.22.202", 0) }; 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Addresses for HTTP proxy servers. 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kHttpsProxyAddrs[2] = 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org { SocketAddress("11.11.11.1", 443), SocketAddress("22.22.22.1", 443) }; 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Addresses for SOCKS proxy servers. 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kSocksProxyAddrs[2] = 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org { SocketAddress("11.11.11.1", 1080), SocketAddress("22.22.22.1", 1080) }; 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Internal addresses for NAT boxes. 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kNatAddrs[2] = 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org { SocketAddress("192.168.1.1", 0), SocketAddress("192.168.2.1", 0) }; 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Private addresses inside the NAT private networks. 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kPrivateAddrs[2] = 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org { SocketAddress("192.168.1.11", 0), SocketAddress("192.168.2.22", 0) }; 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// For cascaded NATs, the internal addresses of the inner NAT boxes. 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kCascadedNatAddrs[2] = 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org { SocketAddress("192.168.10.1", 0), SocketAddress("192.168.20.1", 0) }; 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// For cascaded NATs, private addresses inside the inner private networks. 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kCascadedPrivateAddrs[2] = 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org { SocketAddress("192.168.10.11", 0), SocketAddress("192.168.20.22", 0) }; 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// The address of the public STUN server. 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const SocketAddress kStunAddr("99.99.99.1", cricket::STUN_SERVER_PORT); 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// The addresses for the public relay server. 92353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.orgstatic const SocketAddress kRelayUdpIntAddr("99.99.99.2", 5000); 93353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.orgstatic const SocketAddress kRelayUdpExtAddr("99.99.99.3", 5001); 94353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.orgstatic const SocketAddress kRelayTcpIntAddr("99.99.99.2", 5002); 95353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.orgstatic const SocketAddress kRelayTcpExtAddr("99.99.99.3", 5003); 96353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.orgstatic const SocketAddress kRelaySslTcpIntAddr("99.99.99.2", 5004); 97353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.orgstatic const SocketAddress kRelaySslTcpExtAddr("99.99.99.3", 5005); 98ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org// The addresses for the public turn server. 99ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.orgstatic const SocketAddress kTurnUdpIntAddr("99.99.99.4", 100ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org cricket::STUN_SERVER_PORT); 101ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.orgstatic const SocketAddress kTurnUdpExtAddr("99.99.99.5", 0); 102ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.orgstatic const cricket::RelayCredentials kRelayCredentials("test", "test"); 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Based on ICE_UFRAG_LENGTH 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const char* kIceUfrag[4] = {"TESTICEUFRAG0000", "TESTICEUFRAG0001", 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "TESTICEUFRAG0002", "TESTICEUFRAG0003"}; 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Based on ICE_PWD_LENGTH 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const char* kIcePwd[4] = {"TESTICEPWD00000000000000", 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "TESTICEPWD00000000000001", 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "TESTICEPWD00000000000002", 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "TESTICEPWD00000000000003"}; 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const uint64 kTiebreaker1 = 11111; 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const uint64 kTiebreaker2 = 22222; 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// This test simulates 2 P2P endpoints that want to establish connectivity 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// with each other over various network topologies and conditions, which can be 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// specified in each individial test. 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// A virtual network (via VirtualSocketServer) along with virtual firewalls and 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// NATs (via Firewall/NATSocketServer) are used to simulate the various network 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// conditions. We can configure the IP addresses of the endpoints, 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// block various types of connectivity, or add arbitrary levels of NAT. 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// We also run a STUN server and a relay server on the virtual network to allow 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// our typical P2P mechanisms to do their thing. 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// For each case, we expect the P2P stack to eventually settle on a specific 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// form of connectivity to the other side. The test checks that the P2P 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// negotiation successfully establishes connectivity within a certain time, 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// and that the result is what we expect. 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Note that this class is a base class for use by other tests, who will provide 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// specialized test behavior. 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass P2PTransportChannelTestBase : public testing::Test, 1322a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org public rtc::MessageHandler, 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public sigslot::has_slots<> { 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2PTransportChannelTestBase() 1362a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org : main_(rtc::Thread::Current()), 1372a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org pss_(new rtc::PhysicalSocketServer), 1382a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org vss_(new rtc::VirtualSocketServer(pss_.get())), 1392a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org nss_(new rtc::NATSocketServer(vss_.get())), 1402a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org ss_(new rtc::FirewallSocketServer(nss_.get())), 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_scope_(ss_.get()), 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org stun_server_(main_, kStunAddr), 143ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org turn_server_(main_, kTurnUdpIntAddr, kTurnUdpExtAddr), 144353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.org relay_server_(main_, kRelayUdpIntAddr, kRelayUdpExtAddr, 145353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.org kRelayTcpIntAddr, kRelayTcpExtAddr, 146353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.org kRelaySslTcpIntAddr, kRelaySslTcpExtAddr), 1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org socks_server1_(ss_.get(), kSocksProxyAddrs[0], 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_.get(), kSocksProxyAddrs[0]), 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org socks_server2_(ss_.get(), kSocksProxyAddrs[1], 1500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ss_.get(), kSocksProxyAddrs[1]), 151ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org clear_remote_candidates_ufrag_pwd_(false), 152ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org force_relay_(false) { 153e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org ep1_.role_ = cricket::ICEROLE_CONTROLLING; 154e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org ep2_.role_ = cricket::ICEROLE_CONTROLLED; 155ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org 156459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org ServerAddresses stun_servers; 157459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org stun_servers.insert(kStunAddr); 158353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.org ep1_.allocator_.reset(new cricket::BasicPortAllocator( 159459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org &ep1_.network_manager_, 160459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org stun_servers, kRelayUdpIntAddr, kRelayTcpIntAddr, kRelaySslTcpIntAddr)); 161353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.org ep2_.allocator_.reset(new cricket::BasicPortAllocator( 162459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org &ep2_.network_manager_, 163459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org stun_servers, kRelayUdpIntAddr, kRelayTcpIntAddr, kRelaySslTcpIntAddr)); 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org enum Config { 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org OPEN, // Open to the Internet 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NAT_FULL_CONE, // NAT, no filtering 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NAT_ADDR_RESTRICTED, // NAT, must send to an addr to recv 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NAT_PORT_RESTRICTED, // NAT, must send to an addr+port to recv 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NAT_SYMMETRIC, // NAT, endpoint-dependent bindings 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NAT_DOUBLE_CONE, // Double NAT, both cone 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NAT_SYMMETRIC_THEN_CONE, // Double NAT, symmetric outer, cone inner 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org BLOCK_UDP, // Firewall, UDP in/out blocked 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org BLOCK_UDP_AND_INCOMING_TCP, // Firewall, UDP in/out and TCP in blocked 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org BLOCK_ALL_BUT_OUTGOING_HTTP, // Firewall, only TCP out on 80/443 1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PROXY_HTTPS, // All traffic through HTTPS proxy 1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PROXY_SOCKS, // All traffic through SOCKS proxy 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org NUM_CONFIGS 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org struct Result { 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Result(const std::string& lt, const std::string& lp, 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& rt, const std::string& rp, 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& lt2, const std::string& lp2, 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& rt2, const std::string& rp2, int wait) 1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : local_type(lt), local_proto(lp), remote_type(rt), remote_proto(rp), 1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org local_type2(lt2), local_proto2(lp2), remote_type2(rt2), 1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org remote_proto2(rp2), connect_wait(wait) { 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string local_type; 1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string local_proto; 1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string remote_type; 1950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string remote_proto; 1960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string local_type2; 1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string local_proto2; 1980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string remote_type2; 1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string remote_proto2; 2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int connect_wait; 2010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org struct ChannelData { 2040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckData(const char* data, int len) { 2050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool ret = false; 2060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!ch_packets_.empty()) { 2070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string packet = ch_packets_.front(); 2080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ret = (packet == std::string(data, len)); 2090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ch_packets_.pop_front(); 2100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ret; 2120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string name_; // TODO - Currently not used. 2150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::list<std::string> ch_packets_; 2162a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<cricket::P2PTransportChannel> ch_; 2170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 2180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org struct Endpoint { 220e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org Endpoint() : signaling_delay_(0), role_(cricket::ICEROLE_UNKNOWN), 2210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org tiebreaker_(0), role_conflict_(false), 2220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protocol_type_(cricket::ICEPROTO_GOOGLE) {} 2230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool HasChannel(cricket::TransportChannel* ch) { 2240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (ch == cd1_.ch_.get() || ch == cd2_.ch_.get()); 2250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ChannelData* GetChannelData(cricket::TransportChannel* ch) { 2270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (!HasChannel(ch)) return NULL; 2280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (cd1_.ch_.get() == ch) 2290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return &cd1_; 2300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else 2310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return &cd2_; 2320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetSignalingDelay(int delay) { signaling_delay_ = delay; } 2340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 235e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org void SetIceRole(cricket::IceRole role) { role_ = role; } 236e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org cricket::IceRole ice_role() { return role_; } 2370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetIceProtocolType(cricket::IceProtocolType type) { 2380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protocol_type_ = type; 2390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::IceProtocolType protocol_type() { return protocol_type_; } 241e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org void SetIceTiebreaker(uint64 tiebreaker) { tiebreaker_ = tiebreaker; } 242e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org uint64 GetIceTiebreaker() { return tiebreaker_; } 2430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnRoleConflict(bool role_conflict) { role_conflict_ = role_conflict; } 2440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool role_conflict() { return role_conflict_; } 2450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetAllocationStepDelay(uint32 delay) { 2460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org allocator_->set_step_delay(delay); 2470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2485aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org void SetAllowTcpListen(bool allow_tcp_listen) { 2495aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org allocator_->set_allow_tcp_listen(allow_tcp_listen); 2505aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org } 2510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2522a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::FakeNetworkManager network_manager_; 2532a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<cricket::BasicPortAllocator> allocator_; 2540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ChannelData cd1_; 2550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ChannelData cd2_; 2560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int signaling_delay_; 257e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org cricket::IceRole role_; 2580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint64 tiebreaker_; 2590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool role_conflict_; 2600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::IceProtocolType protocol_type_; 2610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 2620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2632a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org struct CandidateData : public rtc::MessageData { 2640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CandidateData(cricket::TransportChannel* ch, const cricket::Candidate& c) 2650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : channel(ch), candidate(c) { 2660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::TransportChannel* channel; 2680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::Candidate candidate; 2690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 2700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ChannelData* GetChannelData(cricket::TransportChannel* channel) { 2720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (ep1_.HasChannel(channel)) 2730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ep1_.GetChannelData(channel); 2740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else 2750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ep2_.GetChannelData(channel); 2760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void CreateChannels(int num) { 2790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ice_ufrag_ep1_cd1_ch = kIceUfrag[0]; 2800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ice_pwd_ep1_cd1_ch = kIcePwd[0]; 2810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ice_ufrag_ep2_cd1_ch = kIceUfrag[1]; 2820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ice_pwd_ep2_cd1_ch = kIcePwd[1]; 2830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_.cd1_.ch_.reset(CreateChannel( 2840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 0, cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, 2850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep1_cd1_ch, ice_pwd_ep1_cd1_ch, 2860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep2_cd1_ch, ice_pwd_ep2_cd1_ch)); 2870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_.cd1_.ch_.reset(CreateChannel( 2880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1, cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, 2890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep2_cd1_ch, ice_pwd_ep2_cd1_ch, 2900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep1_cd1_ch, ice_pwd_ep1_cd1_ch)); 2910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (num == 2) { 2920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ice_ufrag_ep1_cd2_ch = kIceUfrag[2]; 2930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ice_pwd_ep1_cd2_ch = kIcePwd[2]; 2940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ice_ufrag_ep2_cd2_ch = kIceUfrag[3]; 2950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string ice_pwd_ep2_cd2_ch = kIcePwd[3]; 2960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // In BUNDLE each endpoint must share common ICE credentials. 2970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (ep1_.allocator_->flags() & cricket::PORTALLOCATOR_ENABLE_BUNDLE) { 2980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep1_cd2_ch = ice_ufrag_ep1_cd1_ch; 2990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_pwd_ep1_cd2_ch = ice_pwd_ep1_cd1_ch; 3000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (ep2_.allocator_->flags() & cricket::PORTALLOCATOR_ENABLE_BUNDLE) { 3020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep2_cd2_ch = ice_ufrag_ep2_cd1_ch; 3030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_pwd_ep2_cd2_ch = ice_pwd_ep2_cd1_ch; 3040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_.cd2_.ch_.reset(CreateChannel( 3060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 0, cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, 3070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep1_cd2_ch, ice_pwd_ep1_cd2_ch, 3080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep2_cd2_ch, ice_pwd_ep2_cd2_ch)); 3090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_.cd2_.ch_.reset(CreateChannel( 3100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1, cricket::ICE_CANDIDATE_COMPONENT_DEFAULT, 3110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep2_cd2_ch, ice_pwd_ep2_cd2_ch, 3120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ice_ufrag_ep1_cd2_ch, ice_pwd_ep1_cd2_ch)); 3130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* CreateChannel( 3160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int endpoint, 3170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int component, 3180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& local_ice_ufrag, 3190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& local_ice_pwd, 3200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& remote_ice_ufrag, 3210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& remote_ice_pwd) { 3220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* channel = new cricket::P2PTransportChannel( 3230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "test content name", component, NULL, GetAllocator(endpoint)); 3240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->SignalRequestSignaling.connect( 3250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &P2PTransportChannelTestBase::OnChannelRequestSignaling); 3260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->SignalCandidateReady.connect(this, 3270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &P2PTransportChannelTestBase::OnCandidate); 3280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->SignalReadPacket.connect( 3290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &P2PTransportChannelTestBase::OnReadPacket); 3300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->SignalRoleConflict.connect( 3310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org this, &P2PTransportChannelTestBase::OnRoleConflict); 3320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->SetIceProtocolType(GetEndpoint(endpoint)->protocol_type()); 3330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->SetIceCredentials(local_ice_ufrag, local_ice_pwd); 3340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (clear_remote_candidates_ufrag_pwd_) { 3350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // This only needs to be set if we're clearing them from the 3360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // candidates. Some unit tests rely on this not being set. 3370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->SetRemoteIceCredentials(remote_ice_ufrag, remote_ice_pwd); 3380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 339e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org channel->SetIceRole(GetEndpoint(endpoint)->ice_role()); 340e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org channel->SetIceTiebreaker(GetEndpoint(endpoint)->GetIceTiebreaker()); 3410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->Connect(); 3420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channel; 3430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void DestroyChannels() { 3450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_.cd1_.ch_.reset(); 3460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_.cd1_.ch_.reset(); 3470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_.cd2_.ch_.reset(); 3480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_.cd2_.ch_.reset(); 3490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* ep1_ch1() { return ep1_.cd1_.ch_.get(); } 3510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* ep1_ch2() { return ep1_.cd2_.ch_.get(); } 3520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* ep2_ch1() { return ep2_.cd1_.ch_.get(); } 3530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* ep2_ch2() { return ep2_.cd2_.ch_.get(); } 3540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Common results. 3560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kLocalUdpToLocalUdp; 3570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kLocalUdpToStunUdp; 3580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kLocalUdpToPrflxUdp; 3590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kPrflxUdpToLocalUdp; 3600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kStunUdpToLocalUdp; 3610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kStunUdpToStunUdp; 3620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kPrflxUdpToStunUdp; 3630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kLocalUdpToRelayUdp; 3640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kPrflxUdpToRelayUdp; 3650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kLocalTcpToLocalTcp; 3660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kLocalTcpToPrflxTcp; 3670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result kPrflxTcpToLocalTcp; 3680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static void SetUpTestCase() { 3702a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::InitializeSSL(); 371104540ba5b8d056cb0195bcd2e5d20abaa3dde7dmallinath@webrtc.org } 372104540ba5b8d056cb0195bcd2e5d20abaa3dde7dmallinath@webrtc.org 373104540ba5b8d056cb0195bcd2e5d20abaa3dde7dmallinath@webrtc.org static void TearDownTestCase() { 3742a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::CleanupSSL(); 3750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3772a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::NATSocketServer* nat() { return nss_.get(); } 3782a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::FirewallSocketServer* fw() { return ss_.get(); } 3790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Endpoint* GetEndpoint(int endpoint) { 3810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (endpoint == 0) { 3820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return &ep1_; 3830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (endpoint == 1) { 3840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return &ep2_; 3850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 3860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return NULL; 3870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::PortAllocator* GetAllocator(int endpoint) { 3900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetEndpoint(endpoint)->allocator_.get(); 3910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddAddress(int endpoint, const SocketAddress& addr) { 3930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetEndpoint(endpoint)->network_manager_.AddInterface(addr); 3940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void RemoveAddress(int endpoint, const SocketAddress& addr) { 3960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetEndpoint(endpoint)->network_manager_.RemoveInterface(addr); 3970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3982a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org void SetProxy(int endpoint, rtc::ProxyType type) { 3992a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::ProxyInfo info; 4000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org info.type = type; 4012a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org info.address = (type == rtc::PROXY_HTTPS) ? 4020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kHttpsProxyAddrs[endpoint] : kSocksProxyAddrs[endpoint]; 4030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetAllocator(endpoint)->set_proxy("unittest/1.0", info); 4040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetAllocatorFlags(int endpoint, int flags) { 4060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetAllocator(endpoint)->set_flags(flags); 4070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetSignalingDelay(int endpoint, int delay) { 4090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetEndpoint(endpoint)->SetSignalingDelay(delay); 4100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetIceProtocol(int endpoint, cricket::IceProtocolType type) { 4120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetEndpoint(endpoint)->SetIceProtocolType(type); 4130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 414e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org void SetIceRole(int endpoint, cricket::IceRole role) { 415e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org GetEndpoint(endpoint)->SetIceRole(role); 4160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 417e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org void SetIceTiebreaker(int endpoint, uint64 tiebreaker) { 418e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org GetEndpoint(endpoint)->SetIceTiebreaker(tiebreaker); 4190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetRoleConflict(int endpoint) { 4210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetEndpoint(endpoint)->role_conflict(); 4220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetAllocationStepDelay(int endpoint, uint32 delay) { 4240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetEndpoint(endpoint)->SetAllocationStepDelay(delay); 4250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4265aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org void SetAllowTcpListen(int endpoint, bool allow_tcp_listen) { 4275aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org return GetEndpoint(endpoint)->SetAllowTcpListen(allow_tcp_listen); 4285aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org } 4290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void Test(const Result& expected) { 4312a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org int32 connect_start = rtc::Time(), connect_time; 4320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Create the channels and wait for them to connect. 4340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 4350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && 4360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1() != NULL && 4370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->readable() && 4380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->writable() && 4390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->readable() && 4400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->writable(), 4410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org expected.connect_wait, 4420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000); 4432a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org connect_time = rtc::TimeSince(connect_start); 4440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (connect_time < expected.connect_wait) { 4450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_INFO) << "Connect time: " << connect_time << " ms"; 4460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 4470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_INFO) << "Connect time: " << "TIMEOUT (" 4480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org << expected.connect_wait << " ms)"; 4490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Allow a few turns of the crank for the best connections to emerge. 4520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // This may take up to 2 seconds. 4530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (ep1_ch1()->best_connection() && 4540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->best_connection()) { 4552a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org int32 converge_start = rtc::Time(), converge_time; 4560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int converge_wait = 2000; 4570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN( 458353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.org LocalCandidate(ep1_ch1())->type() == expected.local_type && 4590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalCandidate(ep1_ch1())->protocol() == expected.local_proto && 4600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep1_ch1())->type() == expected.remote_type && 4610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep1_ch1())->protocol() == expected.remote_proto, 4620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org converge_wait, 4630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org converge_wait); 4640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Also do EXPECT_EQ on each part so that failures are more verbose. 466353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.org EXPECT_EQ(expected.local_type, LocalCandidate(ep1_ch1())->type()); 4670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected.local_proto, LocalCandidate(ep1_ch1())->protocol()); 4680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected.remote_type, RemoteCandidate(ep1_ch1())->type()); 4690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected.remote_proto, RemoteCandidate(ep1_ch1())->protocol()); 4700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Verifying remote channel best connection information. This is done 4720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // only for the RFC 5245 as controlled agent will use USE-CANDIDATE 4730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // from controlling (ep1) agent. We can easily predict from EP1 result 4740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // matrix. 4750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (ep2_.protocol_type_ == cricket::ICEPROTO_RFC5245) { 4760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Checking for best connection candidates information at remote. 4770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT( 4780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalCandidate(ep2_ch1())->type() == expected.local_type2 && 4790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalCandidate(ep2_ch1())->protocol() == expected.local_proto2 && 4800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep2_ch1())->protocol() == expected.remote_proto2, 4810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultTimeout); 4820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // For verbose 4840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected.local_type2, LocalCandidate(ep2_ch1())->type()); 4850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected.local_proto2, LocalCandidate(ep2_ch1())->protocol()); 4860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(expected.remote_proto2, 4870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep2_ch1())->protocol()); 4880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Removed remote_type comparision aginst best connection remote 4890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // candidate. This is done to handle remote type discrepancy from 4900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // local to stun based on the test type. 4910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // For example in case of Open -> NAT, ep2 channels will have LULU 4920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // and in other cases like NAT -> NAT it will be LUSU. To avoid these 4930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // mismatches and we are doing comparision in different way. 4940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // i.e. when don't match its remote type is either local or stun. 4950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // TODO(ronghuawu): Refine the test criteria. 4960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // https://code.google.com/p/webrtc/issues/detail?id=1953 497ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org if (expected.remote_type2 != RemoteCandidate(ep2_ch1())->type()) { 4980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(expected.remote_type2 == cricket::LOCAL_PORT_TYPE || 4990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org expected.remote_type2 == cricket::STUN_PORT_TYPE); 5000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE( 5010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep2_ch1())->type() == cricket::LOCAL_PORT_TYPE || 5020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep2_ch1())->type() == cricket::STUN_PORT_TYPE || 5030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep2_ch1())->type() == cricket::PRFLX_PORT_TYPE); 504ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org } 5050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5072a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org converge_time = rtc::TimeSince(converge_start); 5080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (converge_time < converge_wait) { 5090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_INFO) << "Converge time: " << converge_time << " ms"; 5100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 5110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_INFO) << "Converge time: " << "TIMEOUT (" 5120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org << converge_wait << " ms)"; 5130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Try sending some data to other end. 5160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestSendRecv(1); 5170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Destroy the channels, and wait for them to be fully cleaned up. 5190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DestroyChannels(); 5200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSendRecv(int channels) { 5230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (int i = 0; i < 10; ++i) { 5240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* data = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; 5250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int len = static_cast<int>(strlen(data)); 5260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // local_channel1 <==> remote_channel1 5270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ_WAIT(len, SendData(ep1_ch1(), data, len), 1000); 5280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckDataOnChannel(ep2_ch1(), data, len), 1000); 5290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ_WAIT(len, SendData(ep2_ch1(), data, len), 1000); 5300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckDataOnChannel(ep1_ch1(), data, len), 1000); 5310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (channels == 2 && ep1_ch2() && ep2_ch2()) { 5320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // local_channel2 <==> remote_channel2 5330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ_WAIT(len, SendData(ep1_ch2(), data, len), 1000); 5340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckDataOnChannel(ep2_ch2(), data, len), 1000); 5350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ_WAIT(len, SendData(ep2_ch2(), data, len), 1000); 5360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(CheckDataOnChannel(ep1_ch2(), data, len), 1000); 5370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // This test waits for the transport to become readable and writable on both 5420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // end points. Once they are, the end points set new local ice credentials to 5430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // restart the ice gathering. Finally it waits for the transport to select a 5440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // new connection using the newly generated ice candidates. 5450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Before calling this function the end points must be configured. 5460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestHandleIceUfragPasswordChanged() { 5470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[1], kIcePwd[1]); 5480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[0], kIcePwd[0]); 5490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->readable() && ep1_ch1()->writable() && 5500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->readable() && ep2_ch1()->writable(), 5510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000, 1000); 5520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::Candidate* old_local_candidate1 = LocalCandidate(ep1_ch1()); 5540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::Candidate* old_local_candidate2 = LocalCandidate(ep2_ch1()); 5550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::Candidate* old_remote_candidate1 = 5560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep1_ch1()); 5570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::Candidate* old_remote_candidate2 = 5580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep2_ch1()); 5590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->SetIceCredentials(kIceUfrag[2], kIcePwd[2]); 5610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->SetRemoteIceCredentials(kIceUfrag[3], kIcePwd[3]); 5620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->SetIceCredentials(kIceUfrag[3], kIcePwd[3]); 5630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->SetRemoteIceCredentials(kIceUfrag[2], kIcePwd[2]); 5640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep1_ch1())->generation() != 5660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org old_local_candidate1->generation(), 5670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000, 1000); 5680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN(LocalCandidate(ep2_ch1())->generation() != 5690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org old_local_candidate2->generation(), 5700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000, 1000); 5710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep1_ch1())->generation() != 5720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org old_remote_candidate1->generation(), 5730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000, 1000); 5740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN(RemoteCandidate(ep2_ch1())->generation() != 5750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org old_remote_candidate2->generation(), 5760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000, 1000); 5770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1u, RemoteCandidate(ep2_ch1())->generation()); 5780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(1u, RemoteCandidate(ep1_ch1())->generation()); 5790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void TestSignalRoleConflict() { 5820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetIceProtocol(0, cricket::ICEPROTO_RFC5245); 583e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org SetIceTiebreaker(0, kTiebreaker1); // Default EP1 is in controlling state. 5840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetIceProtocol(1, cricket::ICEPROTO_RFC5245); 586e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org SetIceRole(1, cricket::ICEROLE_CONTROLLING); 587e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org SetIceTiebreaker(1, kTiebreaker2); 5880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Creating channels with both channels role set to CONTROLLING. 5900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 5910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Since both the channels initiated with controlling state and channel2 5920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // has higher tiebreaker value, channel1 should receive SignalRoleConflict. 5930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(GetRoleConflict(0), 1000); 5940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(GetRoleConflict(1)); 5950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 5960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && 5970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->writable() && 5980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->readable() && 5990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->writable(), 6000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000); 6010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(ep1_ch1()->best_connection() && 6030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->best_connection()); 6040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestSendRecv(1); 6060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 608b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org void TestHybridConnectivity(cricket::IceProtocolType proto) { 609b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org AddAddress(0, kPublicAddrs[0]); 610b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org AddAddress(1, kPublicAddrs[1]); 611b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 612b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org SetAllocationStepDelay(0, kMinimumStepDelay); 613b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org SetAllocationStepDelay(1, kMinimumStepDelay); 614b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 615b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org SetIceRole(0, cricket::ICEROLE_CONTROLLING); 616b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org SetIceProtocol(0, cricket::ICEPROTO_HYBRID); 617b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org SetIceTiebreaker(0, kTiebreaker1); 618b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org SetIceRole(1, cricket::ICEROLE_CONTROLLED); 619b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org SetIceProtocol(1, proto); 620b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org SetIceTiebreaker(1, kTiebreaker2); 621b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 622b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org CreateChannels(1); 623b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // When channel is in hybrid and it's controlling agent, channel will 624b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // receive ping request from the remote. Hence connection is readable. 625b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // Since channel is in hybrid, it will not send any pings, so no writable 626b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // connection. Since channel2 is in controlled state, it will not have 627b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // any connections which are readable or writable, as it didn't received 628b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // pings (or none) with USE-CANDIDATE attribute. 629b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable(), 1000); 630b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 631b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // Set real protocol type. 632b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org ep1_ch1()->SetIceProtocolType(proto); 633b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 634b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // Channel should able to send ping requests and connections become writable 635b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org // in both directions. 636b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && 637b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org ep2_ch1()->readable() && ep2_ch1()->writable(), 638b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 1000); 639b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org EXPECT_TRUE( 640b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 641b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 642b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 643b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 644b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org TestSendRecv(1); 645b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org DestroyChannels(); 646b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org } 647b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 6480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnChannelRequestSignaling(cricket::TransportChannelImpl* channel) { 6490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel->OnSignalingReady(); 6500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // We pass the candidates directly to the other side. 6520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnCandidate(cricket::TransportChannelImpl* ch, 6530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::Candidate& c) { 654ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org if (force_relay_ && c.type() != cricket::RELAY_PORT_TYPE) 655ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org return; 656ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org 6570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org main_->PostDelayed(GetEndpoint(ch)->signaling_delay_, this, 0, 6580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org new CandidateData(ch, c)); 6590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6602a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org void OnMessage(rtc::Message* msg) { 6612a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<CandidateData> data( 6620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static_cast<CandidateData*>(msg->pdata)); 6630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* rch = GetRemoteChannel(data->channel); 6640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::Candidate c = data->candidate; 6650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (clear_remote_candidates_ufrag_pwd_) { 6660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org c.set_username(""); 6670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org c.set_password(""); 6680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_INFO) << "Candidate(" << data->channel->component() << "->" 670e483a6bd4c266d65c82fc72d6480f898f193b27esergeyu@chromium.org << rch->component() << "): " << c.type() << ", " << c.protocol() 671e483a6bd4c266d65c82fc72d6480f898f193b27esergeyu@chromium.org << ", " << c.address().ToString() << ", " << c.username() 672e483a6bd4c266d65c82fc72d6480f898f193b27esergeyu@chromium.org << ", " << c.generation(); 6730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org rch->OnCandidate(c); 6740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnReadPacket(cricket::TransportChannel* channel, const char* data, 6762a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org size_t len, const rtc::PacketTime& packet_time, 677f89a403cd8db88001322bbb0765c4636fd123700wu@webrtc.org int flags) { 6780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::list<std::string>& packets = GetPacketList(channel); 6790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org packets.push_front(std::string(data, len)); 6800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void OnRoleConflict(cricket::TransportChannelImpl* channel) { 6820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org GetEndpoint(channel)->OnRoleConflict(true); 683e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org cricket::IceRole new_role = 684e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org GetEndpoint(channel)->ice_role() == cricket::ICEROLE_CONTROLLING ? 685e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org cricket::ICEROLE_CONTROLLED : cricket::ICEROLE_CONTROLLING; 686e560834da4ee5a5f38a96a8cb9290c5ce1096989mallinath@webrtc.org channel->SetIceRole(new_role); 6870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int SendData(cricket::TransportChannel* channel, 6890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* data, size_t len) { 6902a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::PacketOptions options; 691f5e5b3a9ce372d0e3cc594bf0036dda64a57d81dmallinath@webrtc.org return channel->SendPacket(data, len, options, 0); 6920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool CheckDataOnChannel(cricket::TransportChannel* channel, 6940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char* data, int len) { 6950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetChannelData(channel)->CheckData(data, len); 6960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const cricket::Candidate* LocalCandidate( 6980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* ch) { 6990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (ch && ch->best_connection()) ? 7000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &ch->best_connection()->local_candidate() : NULL; 7010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const cricket::Candidate* RemoteCandidate( 7030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* ch) { 7040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (ch && ch->best_connection()) ? 7050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org &ch->best_connection()->remote_candidate() : NULL; 7060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Endpoint* GetEndpoint(cricket::TransportChannel* ch) { 7080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (ep1_.HasChannel(ch)) { 7090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return &ep1_; 7100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (ep2_.HasChannel(ch)) { 7110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return &ep2_; 7120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 7130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return NULL; 7140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::P2PTransportChannel* GetRemoteChannel( 7170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::TransportChannel* ch) { 7180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (ch == ep1_ch1()) 7190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ep2_ch1(); 7200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else if (ch == ep1_ch2()) 7210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ep2_ch2(); 7220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else if (ch == ep2_ch1()) 7230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ep1_ch1(); 7240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else if (ch == ep2_ch2()) 7250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return ep1_ch2(); 7260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else 7270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return NULL; 7280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::list<std::string>& GetPacketList(cricket::TransportChannel* ch) { 7300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return GetChannelData(ch)->ch_packets_; 7310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_clear_remote_candidates_ufrag_pwd(bool clear) { 7340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org clear_remote_candidates_ufrag_pwd_ = clear; 7350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 737ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org void set_force_relay(bool relay) { 738ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org force_relay_ = relay; 739ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org } 740ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org 7410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 7422a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread* main_; 7432a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::PhysicalSocketServer> pss_; 7442a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::VirtualSocketServer> vss_; 7452a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::NATSocketServer> nss_; 7462a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::scoped_ptr<rtc::FirewallSocketServer> ss_; 7472a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SocketServerScope ss_scope_; 7480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::TestStunServer stun_server_; 749ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org cricket::TestTurnServer turn_server_; 750353ac3047d480819550f0a305849b03e7ff1f8c8buildbot@webrtc.org cricket::TestRelayServer relay_server_; 7512a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SocksProxyServer socks_server1_; 7522a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SocksProxyServer socks_server2_; 7530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Endpoint ep1_; 7540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Endpoint ep2_; 7550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool clear_remote_candidates_ufrag_pwd_; 756ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org bool force_relay_; 7570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 7580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// The tests have only a few outcomes, which we predefine. 7600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kLocalUdpToLocalUdp("local", "udp", "local", "udp", 7620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "local", "udp", "local", "udp", 1000); 7630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kLocalUdpToStunUdp("local", "udp", "stun", "udp", 7650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "local", "udp", "stun", "udp", 1000); 7660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kLocalUdpToPrflxUdp("local", "udp", "prflx", "udp", 7680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "prflx", "udp", "local", "udp", 1000); 7690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPrflxUdpToLocalUdp("prflx", "udp", "local", "udp", 7710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "local", "udp", "prflx", "udp", 1000); 7720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kStunUdpToLocalUdp("stun", "udp", "local", "udp", 7740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "local", "udp", "stun", "udp", 1000); 7750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kStunUdpToStunUdp("stun", "udp", "stun", "udp", 7770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "stun", "udp", "stun", "udp", 1000); 7780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPrflxUdpToStunUdp("prflx", "udp", "stun", "udp", 7800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "local", "udp", "prflx", "udp", 1000); 7810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kLocalUdpToRelayUdp("local", "udp", "relay", "udp", 7830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "relay", "udp", "local", "udp", 2000); 7840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPrflxUdpToRelayUdp("prflx", "udp", "relay", "udp", 7860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "relay", "udp", "prflx", "udp", 2000); 7870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kLocalTcpToLocalTcp("local", "tcp", "local", "tcp", 7890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "local", "tcp", "local", "tcp", 3000); 7900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kLocalTcpToPrflxTcp("local", "tcp", "prflx", "tcp", 7920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "prflx", "tcp", "local", "tcp", 3000); 7930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTestBase::Result P2PTransportChannelTestBase:: 7940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPrflxTcpToLocalTcp("prflx", "tcp", "local", "tcp", 7950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org "local", "tcp", "prflx", "tcp", 3000); 7960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test the matrix of all the connectivity types we expect to see in the wild. 7980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Just test every combination of the configs in the Config enum. 7990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass P2PTransportChannelTest : public P2PTransportChannelTestBase { 8000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 8010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result* kMatrix[NUM_CONFIGS][NUM_CONFIGS]; 8020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result* kMatrixSharedUfrag[NUM_CONFIGS][NUM_CONFIGS]; 8030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result* kMatrixSharedSocketAsGice[NUM_CONFIGS][NUM_CONFIGS]; 8040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org static const Result* kMatrixSharedSocketAsIce[NUM_CONFIGS][NUM_CONFIGS]; 8050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void ConfigureEndpoints(Config config1, Config config2, 8060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int allocator_flags1, int allocator_flags2, 8070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int delay1, int delay2, 8080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::IceProtocolType type) { 809ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org // Ideally we want to use TURN server for both GICE and ICE, but in case 810ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org // of GICE, TURN server usage is not producing results reliabally. 811ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org // TODO(mallinath): Remove Relay and use TURN server for all tests. 812459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org ServerAddresses stun_servers; 813459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org stun_servers.insert(kStunAddr); 814ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org GetEndpoint(0)->allocator_.reset( 815ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org new cricket::BasicPortAllocator(&(GetEndpoint(0)->network_manager_), 816459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org stun_servers, 8172a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SocketAddress(), rtc::SocketAddress(), 8182a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SocketAddress())); 819ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org GetEndpoint(1)->allocator_.reset( 820ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org new cricket::BasicPortAllocator(&(GetEndpoint(1)->network_manager_), 821459f356846e5dc1e9b2c5182568660f5eaacfe3ebuildbot@webrtc.org stun_servers, 8222a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SocketAddress(), rtc::SocketAddress(), 8232a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::SocketAddress())); 824ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org 825ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org cricket::RelayServerConfig relay_server(cricket::RELAY_GTURN); 826ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org if (type == cricket::ICEPROTO_RFC5245) { 827ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org relay_server.type = cricket::RELAY_TURN; 828ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org relay_server.credentials = kRelayCredentials; 829ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org relay_server.ports.push_back(cricket::ProtocolAddress( 830ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org kTurnUdpIntAddr, cricket::PROTO_UDP, false)); 831ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org } else { 832ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org relay_server.ports.push_back(cricket::ProtocolAddress( 833ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org kRelayUdpIntAddr, cricket::PROTO_UDP, false)); 834ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org relay_server.ports.push_back(cricket::ProtocolAddress( 835ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org kRelayTcpIntAddr, cricket::PROTO_TCP, false)); 836ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org relay_server.ports.push_back(cricket::ProtocolAddress( 837ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org kRelaySslTcpIntAddr, cricket::PROTO_SSLTCP, false)); 838ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org } 839ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org GetEndpoint(0)->allocator_->AddRelay(relay_server); 840ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org GetEndpoint(1)->allocator_->AddRelay(relay_server); 841ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org 8420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoint(0, config1); 8430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetIceProtocol(0, type); 8440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(0, allocator_flags1); 8450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocationStepDelay(0, delay1); 8460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoint(1, config2); 8470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetIceProtocol(1, type); 8480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(1, allocator_flags2); 8490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocationStepDelay(1, delay2); 8500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void ConfigureEndpoint(int endpoint, Config config) { 8520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org switch (config) { 8530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case OPEN: 8540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(endpoint, kPublicAddrs[endpoint]); 8550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 8560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case NAT_FULL_CONE: 8570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case NAT_ADDR_RESTRICTED: 8580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case NAT_PORT_RESTRICTED: 8590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case NAT_SYMMETRIC: 8600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(endpoint, kPrivateAddrs[endpoint]); 8610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Add a single NAT of the desired type 8620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nat()->AddTranslator(kPublicAddrs[endpoint], kNatAddrs[endpoint], 8632a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org static_cast<rtc::NATType>(config - NAT_FULL_CONE))-> 8640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddClient(kPrivateAddrs[endpoint]); 8650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 8660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case NAT_DOUBLE_CONE: 8670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case NAT_SYMMETRIC_THEN_CONE: 8680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(endpoint, kCascadedPrivateAddrs[endpoint]); 8690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Add a two cascaded NATs of the desired types 8700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nat()->AddTranslator(kPublicAddrs[endpoint], kNatAddrs[endpoint], 8710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (config == NAT_DOUBLE_CONE) ? 8722a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::NAT_OPEN_CONE : rtc::NAT_SYMMETRIC)-> 8730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddTranslator(kPrivateAddrs[endpoint], kCascadedNatAddrs[endpoint], 8742a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::NAT_OPEN_CONE)-> 8750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddClient(kCascadedPrivateAddrs[endpoint]); 8760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 8770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case BLOCK_UDP: 8780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case BLOCK_UDP_AND_INCOMING_TCP: 8790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case BLOCK_ALL_BUT_OUTGOING_HTTP: 8800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case PROXY_HTTPS: 8810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org case PROXY_SOCKS: 8820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(endpoint, kPublicAddrs[endpoint]); 8830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Block all UDP 8842a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(false, rtc::FP_UDP, rtc::FD_ANY, 8850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPublicAddrs[endpoint]); 8860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (config == BLOCK_UDP_AND_INCOMING_TCP) { 8870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Block TCP inbound to the endpoint 8882a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(false, rtc::FP_TCP, SocketAddress(), 8890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPublicAddrs[endpoint]); 8900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (config == BLOCK_ALL_BUT_OUTGOING_HTTP) { 8910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Block all TCP to/from the endpoint except 80/443 out 8922a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(true, rtc::FP_TCP, kPublicAddrs[endpoint], 8932a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org SocketAddress(rtc::IPAddress(INADDR_ANY), 80)); 8942a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(true, rtc::FP_TCP, kPublicAddrs[endpoint], 8952a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org SocketAddress(rtc::IPAddress(INADDR_ANY), 443)); 8962a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(false, rtc::FP_TCP, rtc::FD_ANY, 8970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPublicAddrs[endpoint]); 8980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (config == PROXY_HTTPS) { 8990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Block all TCP to/from the endpoint except to the proxy server 9002a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(true, rtc::FP_TCP, kPublicAddrs[endpoint], 9010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kHttpsProxyAddrs[endpoint]); 9022a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(false, rtc::FP_TCP, rtc::FD_ANY, 9030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPublicAddrs[endpoint]); 9042a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org SetProxy(endpoint, rtc::PROXY_HTTPS); 9050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (config == PROXY_SOCKS) { 9060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Block all TCP to/from the endpoint except to the proxy server 9072a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(true, rtc::FP_TCP, kPublicAddrs[endpoint], 9080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kSocksProxyAddrs[endpoint]); 9092a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(false, rtc::FP_TCP, rtc::FD_ANY, 9100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPublicAddrs[endpoint]); 9112a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org SetProxy(endpoint, rtc::PROXY_SOCKS5); 9120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 9140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org default: 9150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org break; 9160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 9190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Shorthands for use in the test matrix. 9210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define LULU &kLocalUdpToLocalUdp 9220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define LUSU &kLocalUdpToStunUdp 9230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define LUPU &kLocalUdpToPrflxUdp 9240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define PULU &kPrflxUdpToLocalUdp 9250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define SULU &kStunUdpToLocalUdp 9260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define SUSU &kStunUdpToStunUdp 9270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define PUSU &kPrflxUdpToStunUdp 9280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define LURU &kLocalUdpToRelayUdp 9290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define PURU &kPrflxUdpToRelayUdp 9300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define LTLT &kLocalTcpToLocalTcp 9310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define LTPT &kLocalTcpToPrflxTcp 9320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define PTLT &kPrflxTcpToLocalTcp 9330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// TODO: Enable these once TestRelayServer can accept external TCP. 9340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define LTRT NULL 9350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define LSRS NULL 9360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test matrix. Originator behavior defined by rows, receiever by columns. 9380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Currently the p2ptransportchannel.cc (specifically the 9400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// P2PTransportChannel::OnUnknownAddress) operates in 2 modes depend on the 9410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// remote candidates - ufrag per port or shared ufrag. 9420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// For example, if the remote candidates have the shared ufrag, for the unknown 9430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// address reaches the OnUnknownAddress, we will try to find the matched 9440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// remote candidate based on the address and protocol, if not found, a new 9450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// remote candidate will be created for this address. But if the remote 9460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// candidates have different ufrags, we will try to find the matched remote 9470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// candidate by comparing the ufrag. If not found, an error will be returned. 9480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Because currently the shared ufrag feature is under the experiment and will 9490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// be rolled out gradually. We want to test the different combinations of peers 9500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// with/without the shared ufrag enabled. And those different combinations have 9510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// different expectation of the best connection. For example in the OpenToCONE 9520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// case, an unknown address will be updated to a "host" remote candidate if the 9530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// remote peer uses different ufrag per port. But in the shared ufrag case, 9540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// a "stun" (should be peer-reflexive eventually) candidate will be created for 9550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// that. So the expected best candidate will be LUSU instead of LULU. 9560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// With all these, we have to keep 2 test matrixes for the tests: 9570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// kMatrix - for the tests that the remote peer uses different ufrag per port. 9580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// kMatrixSharedUfrag - for the tests that remote peer uses shared ufrag. 9590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// The different between the two matrixes are on: 9600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// OPToCONE, OPTo2CON, 9610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// COToCONE, COToADDR, COToPORT, COToSYMM, COTo2CON, COToSCON, 9620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// ADToCONE, ADToADDR, ADTo2CON, 9630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// POToADDR, 9640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// SYToADDR, 9650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// 2CToCONE, 2CToADDR, 2CToPORT, 2CToSYMM, 2CTo2CON, 2CToSCON, 9660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// SCToADDR, 9670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// TODO: Fix NULLs caused by lack of TCP support in NATSocket. 9690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// TODO: Fix NULLs caused by no HTTP proxy support. 9700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// TODO: Rearrange rows/columns from best to worst. 9710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// TODO(ronghuawu): Keep only one test matrix once the shared ufrag is enabled. 9720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTest::Result* 9730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2PTransportChannelTest::kMatrix[NUM_CONFIGS][NUM_CONFIGS] = { 9740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// OPEN CONE ADDR PORT SYMM 2CON SCON !UDP !TCP HTTP PRXH PRXS 9750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*OP*/ {LULU, LULU, LULU, LULU, LULU, LULU, LULU, LTLT, LTLT, LSRS, NULL, LTLT}, 9760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*CO*/ {LULU, LULU, LULU, SULU, SULU, LULU, SULU, NULL, NULL, LSRS, NULL, LTRT}, 9770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*AD*/ {LULU, LULU, LULU, SUSU, SUSU, LULU, SUSU, NULL, NULL, LSRS, NULL, LTRT}, 9780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PO*/ {LULU, LUSU, LUSU, SUSU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 9790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*SY*/ {LULU, LUSU, LUSU, LURU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 9800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*2C*/ {LULU, LULU, LULU, SULU, SULU, LULU, SULU, NULL, NULL, LSRS, NULL, LTRT}, 9810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*SC*/ {LULU, LUSU, LUSU, LURU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 9820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*!U*/ {LTLT, NULL, NULL, NULL, NULL, NULL, NULL, LTLT, LTLT, LSRS, NULL, LTRT}, 9830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*!T*/ {LTRT, NULL, NULL, NULL, NULL, NULL, NULL, LTLT, LTRT, LSRS, NULL, LTRT}, 9840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*HT*/ {LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, NULL, LSRS}, 9850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, 9860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PR*/ {LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LSRS, NULL, LTRT}, 9870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 9880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTest::Result* 9890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2PTransportChannelTest::kMatrixSharedUfrag[NUM_CONFIGS][NUM_CONFIGS] = { 9900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// OPEN CONE ADDR PORT SYMM 2CON SCON !UDP !TCP HTTP PRXH PRXS 9910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*OP*/ {LULU, LUSU, LULU, LULU, LULU, LUSU, LULU, LTLT, LTLT, LSRS, NULL, LTLT}, 9920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*CO*/ {LULU, LUSU, LUSU, SUSU, SUSU, LUSU, SUSU, NULL, NULL, LSRS, NULL, LTRT}, 9930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*AD*/ {LULU, LUSU, LUSU, SUSU, SUSU, LUSU, SUSU, NULL, NULL, LSRS, NULL, LTRT}, 9940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PO*/ {LULU, LUSU, LUSU, SUSU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 9950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*SY*/ {LULU, LUSU, LUSU, LURU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 9960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*2C*/ {LULU, LUSU, LUSU, SUSU, SUSU, LUSU, SUSU, NULL, NULL, LSRS, NULL, LTRT}, 9970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*SC*/ {LULU, LUSU, LUSU, LURU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 9980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*!U*/ {LTLT, NULL, NULL, NULL, NULL, NULL, NULL, LTLT, LTLT, LSRS, NULL, LTRT}, 9990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*!T*/ {LTRT, NULL, NULL, NULL, NULL, NULL, NULL, LTLT, LTRT, LSRS, NULL, LTRT}, 10000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*HT*/ {LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, NULL, LSRS}, 10010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, 10020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PR*/ {LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LSRS, NULL, LTRT}, 10030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 10040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTest::Result* 10050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2PTransportChannelTest::kMatrixSharedSocketAsGice 10060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org [NUM_CONFIGS][NUM_CONFIGS] = { 10070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// OPEN CONE ADDR PORT SYMM 2CON SCON !UDP !TCP HTTP PRXH PRXS 10080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*OP*/ {LULU, LUSU, LUSU, LUSU, LUSU, LUSU, LUSU, LTLT, LTLT, LSRS, NULL, LTLT}, 10090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*CO*/ {LULU, LUSU, LUSU, LUSU, LUSU, LUSU, LUSU, NULL, NULL, LSRS, NULL, LTRT}, 10100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*AD*/ {LULU, LUSU, LUSU, LUSU, LUSU, LUSU, LUSU, NULL, NULL, LSRS, NULL, LTRT}, 10110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PO*/ {LULU, LUSU, LUSU, LUSU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 10120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*SY*/ {LULU, LUSU, LUSU, LURU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 10130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*2C*/ {LULU, LUSU, LUSU, LUSU, LUSU, LUSU, LUSU, NULL, NULL, LSRS, NULL, LTRT}, 10140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*SC*/ {LULU, LUSU, LUSU, LURU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 10150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*!U*/ {LTLT, NULL, NULL, NULL, NULL, NULL, NULL, LTLT, LTLT, LSRS, NULL, LTRT}, 10160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*!T*/ {LTRT, NULL, NULL, NULL, NULL, NULL, NULL, LTLT, LTRT, LSRS, NULL, LTRT}, 10170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*HT*/ {LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, NULL, LSRS}, 10180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, 10190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PR*/ {LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LSRS, NULL, LTRT}, 10200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 10210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgconst P2PTransportChannelTest::Result* 10220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2PTransportChannelTest::kMatrixSharedSocketAsIce 10230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org [NUM_CONFIGS][NUM_CONFIGS] = { 10240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// OPEN CONE ADDR PORT SYMM 2CON SCON !UDP !TCP HTTP PRXH PRXS 10250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*OP*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, PTLT, LTPT, LSRS, NULL, PTLT}, 10260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*CO*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, NULL, NULL, LSRS, NULL, LTRT}, 10270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*AD*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, NULL, NULL, LSRS, NULL, LTRT}, 10280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PO*/ {LULU, LUSU, LUSU, LUSU, LURU, LUSU, LURU, NULL, NULL, LSRS, NULL, LTRT}, 10290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*SY*/ {PULU, PUSU, PUSU, PURU, PURU, PUSU, PURU, NULL, NULL, LSRS, NULL, LTRT}, 10300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*2C*/ {LULU, LUSU, LUSU, LUSU, LUPU, LUSU, LUPU, NULL, NULL, LSRS, NULL, LTRT}, 10310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*SC*/ {PULU, PUSU, PUSU, PURU, PURU, PUSU, PURU, NULL, NULL, LSRS, NULL, LTRT}, 10320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*!U*/ {PTLT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTPT, LSRS, NULL, LTRT}, 10330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*!T*/ {LTRT, NULL, NULL, NULL, NULL, NULL, NULL, PTLT, LTRT, LSRS, NULL, LTRT}, 10340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*HT*/ {LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, LSRS, NULL, LSRS}, 10350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PR*/ {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, 10360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/*PR*/ {LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LTRT, LSRS, NULL, LTRT}, 10370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 10380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// The actual tests that exercise all the various configurations. 10400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test names are of the form P2PTransportChannelTest_TestOPENToNAT_FULL_CONE 10410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Same test case is run in both GICE and ICE mode. 10420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// kDefaultStepDelay - is used for all Gice cases. 10430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// kMinimumStepDelay - is used when both end points have 10440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// PORTALLOCATOR_ENABLE_SHARED_UFRAG flag enabled. 10450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Technically we should be able to use kMinimumStepDelay irrespective of 10460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// protocol type. But which might need modifications to current result matrices 10470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// for tests in this file. 10480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define P2P_TEST_DECLARATION(x, y, z) \ 10490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsGiceNoneSharedUfrag) { \ 10500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(x, y, kDefaultPortAllocatorFlags, \ 10510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, \ 10520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, \ 10530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); \ 10540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kMatrix[x][y] != NULL) \ 10550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(*kMatrix[x][y]); \ 10560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else \ 10570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_WARNING) << "Not yet implemented"; \ 10580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } \ 10590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsGiceP0SharedUfrag) { \ 10600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ 10610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, \ 10620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, \ 10630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); \ 10640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kMatrix[x][y] != NULL) \ 10650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(*kMatrix[x][y]); \ 10660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else \ 10670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_WARNING) << "Not yet implemented"; \ 10680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } \ 10690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsGiceP1SharedUfrag) { \ 10700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(x, y, kDefaultPortAllocatorFlags, \ 10710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ 10720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, \ 10730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); \ 10740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kMatrixSharedUfrag[x][y] != NULL) \ 10750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(*kMatrixSharedUfrag[x][y]); \ 10760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else \ 10770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_WARNING) << "Not yet implemented"; \ 10780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } \ 10790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsGiceBothSharedUfrag) { \ 10800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ 10810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ 10820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, \ 10830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); \ 10840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kMatrixSharedUfrag[x][y] != NULL) \ 10850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(*kMatrixSharedUfrag[x][y]); \ 10860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else \ 10870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_WARNING) << "Not yet implemented"; \ 10880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } \ 10890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_F(P2PTransportChannelTest, \ 10900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org z##Test##x##To##y##AsGiceBothSharedUfragWithMinimumStepDelay) { \ 10910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ 10920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, \ 10930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kMinimumStepDelay, kMinimumStepDelay, \ 10940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); \ 10950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kMatrixSharedUfrag[x][y] != NULL) \ 10960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(*kMatrixSharedUfrag[x][y]); \ 10970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else \ 10980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_WARNING) << "Not yet implemented"; \ 10990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } \ 11000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_F(P2PTransportChannelTest, \ 11010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org z##Test##x##To##y##AsGiceBothSharedUfragSocket) { \ 11020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG | \ 11030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ 11040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG | \ 11050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ 11060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kMinimumStepDelay, kMinimumStepDelay, \ 11070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); \ 11080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kMatrixSharedSocketAsGice[x][y] != NULL) \ 11090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(*kMatrixSharedSocketAsGice[x][y]); \ 11100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else \ 11110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_WARNING) << "Not yet implemented"; \ 11120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } \ 11130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TEST_F(P2PTransportChannelTest, z##Test##x##To##y##AsIce) { \ 11140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(x, y, PORTALLOCATOR_ENABLE_SHARED_UFRAG | \ 11150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ 11160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG | \ 11170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_SOCKET, \ 11180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kMinimumStepDelay, kMinimumStepDelay, \ 11190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_RFC5245); \ 11200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kMatrixSharedSocketAsIce[x][y] != NULL) \ 11210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(*kMatrixSharedSocketAsIce[x][y]); \ 11220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org else \ 11230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_WARNING) << "Not yet implemented"; \ 11240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define P2P_TEST(x, y) \ 11270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST_DECLARATION(x, y,) 11280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define FLAKY_P2P_TEST(x, y) \ 11300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST_DECLARATION(x, y, DISABLED_) 11310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 113299133415f463cf3c4559597571657d32a598a7d0stefan@webrtc.org// TODO(holmer): Disabled due to randomly failing on webrtc buildbots. 113399133415f463cf3c4559597571657d32a598a7d0stefan@webrtc.org// Issue: webrtc/2383 11340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define P2P_TEST_SET(x) \ 11350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, OPEN) \ 113699133415f463cf3c4559597571657d32a598a7d0stefan@webrtc.org FLAKY_P2P_TEST(x, NAT_FULL_CONE) \ 11377262c0074086d60e77a075d336d2594fa0234b92asapersson@webrtc.org FLAKY_P2P_TEST(x, NAT_ADDR_RESTRICTED) \ 113894a6ec35222cb4b7ce23e472f0617e260727263ckjellander@webrtc.org FLAKY_P2P_TEST(x, NAT_PORT_RESTRICTED) \ 11390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, NAT_SYMMETRIC) \ 114099133415f463cf3c4559597571657d32a598a7d0stefan@webrtc.org FLAKY_P2P_TEST(x, NAT_DOUBLE_CONE) \ 11410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, NAT_SYMMETRIC_THEN_CONE) \ 11420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, BLOCK_UDP) \ 11430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, BLOCK_UDP_AND_INCOMING_TCP) \ 11440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, BLOCK_ALL_BUT_OUTGOING_HTTP) \ 11450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, PROXY_HTTPS) \ 11460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, PROXY_SOCKS) 11470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define FLAKY_P2P_TEST_SET(x) \ 11490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, OPEN) \ 11500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, NAT_FULL_CONE) \ 11510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, NAT_ADDR_RESTRICTED) \ 11520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, NAT_PORT_RESTRICTED) \ 11530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, NAT_SYMMETRIC) \ 11540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, NAT_DOUBLE_CONE) \ 11550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, NAT_SYMMETRIC_THEN_CONE) \ 11560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, BLOCK_UDP) \ 11570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, BLOCK_UDP_AND_INCOMING_TCP) \ 11580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, BLOCK_ALL_BUT_OUTGOING_HTTP) \ 11590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, PROXY_HTTPS) \ 11600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org P2P_TEST(x, PROXY_SOCKS) 11610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(OPEN) 11630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(NAT_FULL_CONE) 11640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(NAT_ADDR_RESTRICTED) 11650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(NAT_PORT_RESTRICTED) 11660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(NAT_SYMMETRIC) 11670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(NAT_DOUBLE_CONE) 11680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(NAT_SYMMETRIC_THEN_CONE) 11690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(BLOCK_UDP) 11700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(BLOCK_UDP_AND_INCOMING_TCP) 11710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(BLOCK_ALL_BUT_OUTGOING_HTTP) 11720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(PROXY_HTTPS) 11730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgP2P_TEST_SET(PROXY_SOCKS) 11740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we restart candidate allocation when local ufrag&pwd changed. 11760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Standard Ice protocol is used. 11770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelTest, HandleUfragPwdChangeAsIce) { 11780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(OPEN, OPEN, 11790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 11800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 11810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kMinimumStepDelay, kMinimumStepDelay, 11820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_RFC5245); 11830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 11840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestHandleIceUfragPasswordChanged(); 1185b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org DestroyChannels(); 11860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 11870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we restart candidate allocation when local ufrag&pwd changed. 11890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Standard Ice protocol is used. 11900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelTest, HandleUfragPwdChangeBundleAsIce) { 11910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(OPEN, OPEN, 11920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 11930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 11940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kMinimumStepDelay, kMinimumStepDelay, 11950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_RFC5245); 11960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 11970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(1, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 11980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 11990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(2); 12000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestHandleIceUfragPasswordChanged(); 1201b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org DestroyChannels(); 12020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 12030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we restart candidate allocation when local ufrag&pwd changed. 12050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Google Ice protocol is used. 12060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelTest, HandleUfragPwdChangeAsGice) { 12070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(OPEN, OPEN, 12080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 12090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 12100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, 12110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); 12120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 12130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestHandleIceUfragPasswordChanged(); 1214b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org DestroyChannels(); 12150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 12160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that ICE restart works when bundle is enabled. 12180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Google Ice protocol is used. 12190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelTest, HandleUfragPwdChangeBundleAsGice) { 12200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(OPEN, OPEN, 12210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 12220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 12230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, 12240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); 12250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 12260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(1, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 12270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(2); 12290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestHandleIceUfragPasswordChanged(); 1230b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org DestroyChannels(); 12310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 12320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test the operation of GetStats. 12340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelTest, GetStats) { 12350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(OPEN, OPEN, 12360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, 12370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, 12380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, 12390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); 12400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 12410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN(ep1_ch1()->readable() && ep1_ch1()->writable() && 12420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->readable() && ep2_ch1()->writable(), 12430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000, 1000); 12440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org TestSendRecv(1); 12450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ConnectionInfos infos; 12460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_TRUE(ep1_ch1()->GetStats(&infos)); 12470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT_EQ(1U, infos.size()); 12480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(infos[0].new_connection); 12490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(infos[0].best_connection); 12500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(infos[0].readable); 12510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(infos[0].writable); 12520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(infos[0].timeout); 12530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(10 * 36U, infos[0].sent_total_bytes); 12540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(10 * 36U, infos[0].recv_total_bytes); 12550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_GT(infos[0].rtt, 0U); 12560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DestroyChannels(); 12570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 12580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we properly handle getting a STUN error due to slow signaling. 12607262c0074086d60e77a075d336d2594fa0234b92asapersson@webrtc.orgTEST_F(P2PTransportChannelTest, DISABLED_SlowSignaling) { 12610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(OPEN, NAT_SYMMETRIC, 12620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, 12630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, 12640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, 12650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); 12660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Make signaling from the callee take 500ms, so that the initial STUN pings 12670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // from the callee beat the signaling, and so the caller responds with a 12680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // unknown username error. We should just eat that and carry on; mishandling 12690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // this will instead cause all the callee's connections to be discarded. 12700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetSignalingDelay(1, 1000); 12710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 12720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::Connection* best_connection = NULL; 12730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Wait until the callee's connections are created. 12740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 1000); 12750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Wait to see if they get culled; they shouldn't. 12760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WAIT(ep2_ch1()->best_connection() != best_connection, 1000); 12770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(ep2_ch1()->best_connection() == best_connection); 12780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DestroyChannels(); 12790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 12800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that if remote candidates don't have ufrag and pwd, we still work. 12820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelTest, RemoteCandidatesWithoutUfragPwd) { 12830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org set_clear_remote_candidates_ufrag_pwd(true); 12840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(OPEN, OPEN, 12850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 12860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org PORTALLOCATOR_ENABLE_SHARED_UFRAG, 12870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kMinimumStepDelay, kMinimumStepDelay, 12880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); 12890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 12900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::Connection* best_connection = NULL; 12910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Wait until the callee's connections are created. 12920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WAIT((best_connection = ep2_ch1()->best_connection()) != NULL, 1000); 12930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Wait to see if they get culled; they shouldn't. 12940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WAIT(ep2_ch1()->best_connection() != best_connection, 1000); 12950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(ep2_ch1()->best_connection() == best_connection); 12960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DestroyChannels(); 12970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 12980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that a host behind NAT cannot be reached when incoming_only 13000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// is set to true. 13010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelTest, IncomingOnlyBlocked) { 13020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(NAT_FULL_CONE, OPEN, 13030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, 13040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, 13050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, 13060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); 13070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(0, kOnlyLocalPorts); 13090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 13100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->set_incoming_only(true); 13110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Pump for 1 second and verify that the channels are not connected. 13132a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Thread::Current()->ProcessMessages(1000); 13140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(ep1_ch1()->readable()); 13160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(ep1_ch1()->writable()); 13170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(ep2_ch1()->readable()); 13180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_FALSE(ep2_ch1()->writable()); 13190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DestroyChannels(); 13210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 13220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that a peer behind NAT can connect to a peer that has 13240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// incoming_only flag set. 13250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelTest, IncomingOnlyOpen) { 13260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(OPEN, NAT_FULL_CONE, 13270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, 13280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultPortAllocatorFlags, 13290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kDefaultStepDelay, kDefaultStepDelay, 13300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org cricket::ICEPROTO_GOOGLE); 13310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(0, kOnlyLocalPorts); 13330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 13340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->set_incoming_only(true); 13350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT_MARGIN(ep1_ch1() != NULL && ep2_ch1() != NULL && 13370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->readable() && ep1_ch1()->writable() && 13380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->readable() && ep2_ch1()->writable(), 13390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000, 1000); 13400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DestroyChannels(); 13420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 13430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 13445aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.orgTEST_F(P2PTransportChannelTest, TestTcpConnectionsFromActiveToPassive) { 13455aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org AddAddress(0, kPublicAddrs[0]); 13465aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org AddAddress(1, kPublicAddrs[1]); 13475aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 13485aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org SetAllocationStepDelay(0, kMinimumStepDelay); 13495aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org SetAllocationStepDelay(1, kMinimumStepDelay); 13505aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 13515aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org int kOnlyLocalTcpPorts = cricket::PORTALLOCATOR_DISABLE_UDP | 13525aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org cricket::PORTALLOCATOR_DISABLE_STUN | 13535aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org cricket::PORTALLOCATOR_DISABLE_RELAY | 13545aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG; 13555aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org // Disable all protocols except TCP. 13565aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org SetAllocatorFlags(0, kOnlyLocalTcpPorts); 13575aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org SetAllocatorFlags(1, kOnlyLocalTcpPorts); 13585aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 13595aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org SetAllowTcpListen(0, true); // actpass. 13605aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org SetAllowTcpListen(1, false); // active. 13615aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 13625aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org CreateChannels(1); 13635aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 13645aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && 13655aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org ep2_ch1()->readable() && ep2_ch1()->writable(), 13665aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 1000); 13675aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org EXPECT_TRUE( 13685aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 13695aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 13705aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 13715aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 13725aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org std::string kTcpProtocol = "tcp"; 13735aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org EXPECT_EQ(kTcpProtocol, RemoteCandidate(ep1_ch1())->protocol()); 13745aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org EXPECT_EQ(kTcpProtocol, LocalCandidate(ep1_ch1())->protocol()); 13755aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org EXPECT_EQ(kTcpProtocol, RemoteCandidate(ep2_ch1())->protocol()); 13765aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org EXPECT_EQ(kTcpProtocol, LocalCandidate(ep2_ch1())->protocol()); 13775aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 13785aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org TestSendRecv(1); 13795aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org DestroyChannels(); 13805aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org} 13815aed3bb9fb287faecd773b88bb68732c31579590wu@webrtc.org 1382391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.orgTEST_F(P2PTransportChannelTest, TestBundleAllocatorToBundleAllocator) { 1383391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(0, kPublicAddrs[0]); 1384391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(1, kPublicAddrs[1]); 1385391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 1386391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetAllocatorFlags(1, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 1387391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1388391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org CreateChannels(2); 1389391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1390391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && 1391391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep1_ch1()->writable() && 1392391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->readable() && 1393391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->writable(), 1394391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1000); 1395391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_TRUE(ep1_ch1()->best_connection() && 1396391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->best_connection()); 1397391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1398391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_FALSE(ep1_ch2()->readable()); 1399391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_FALSE(ep1_ch2()->writable()); 1400391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_FALSE(ep2_ch2()->readable()); 1401391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_FALSE(ep2_ch2()->writable()); 1402391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1403391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org TestSendRecv(1); // Only 1 channel is writable per Endpoint. 1404391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org DestroyChannels(); 1405391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org} 1406391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1407391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.orgTEST_F(P2PTransportChannelTest, TestBundleAllocatorToNonBundleAllocator) { 1408391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(0, kPublicAddrs[0]); 1409391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(1, kPublicAddrs[1]); 1410391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org // Enable BUNDLE flag at one side. 1411391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 1412391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1413391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org CreateChannels(2); 1414391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1415391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && 1416391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep1_ch1()->writable() && 1417391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->readable() && 1418391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->writable(), 1419391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1000); 1420391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_TRUE_WAIT(ep1_ch2()->readable() && 1421391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep1_ch2()->writable() && 1422391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch2()->readable() && 1423391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch2()->writable(), 1424391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1000); 1425391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1426391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_TRUE(ep1_ch1()->best_connection() && 1427391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->best_connection()); 1428391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_TRUE(ep1_ch2()->best_connection() && 1429391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch2()->best_connection()); 1430391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1431391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org TestSendRecv(2); 1432391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org DestroyChannels(); 1433391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org} 1434391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1435391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.orgTEST_F(P2PTransportChannelTest, TestIceRoleConflictWithoutBundle) { 1436391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(0, kPublicAddrs[0]); 1437391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(1, kPublicAddrs[1]); 1438391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org TestSignalRoleConflict(); 1439391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org} 1440391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1441391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.orgTEST_F(P2PTransportChannelTest, TestIceRoleConflictWithBundle) { 1442391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(0, kPublicAddrs[0]); 1443391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(1, kPublicAddrs[1]); 1444391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 1445391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetAllocatorFlags(1, cricket::PORTALLOCATOR_ENABLE_BUNDLE); 1446391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org TestSignalRoleConflict(); 1447391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org} 1448391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1449391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org// Tests that the ice configs (protocol, tiebreaker and role) can be passed 1450391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org// down to ports. 1451391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.orgTEST_F(P2PTransportChannelTest, TestIceConfigWillPassDownToPort) { 1452391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(0, kPublicAddrs[0]); 1453391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(1, kPublicAddrs[1]); 1454391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1455391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetIceRole(0, cricket::ICEROLE_CONTROLLING); 1456391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetIceProtocol(0, cricket::ICEPROTO_GOOGLE); 1457391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetIceTiebreaker(0, kTiebreaker1); 1458391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetIceRole(1, cricket::ICEROLE_CONTROLLING); 1459391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetIceProtocol(1, cricket::ICEPROTO_RFC5245); 1460391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org SetIceTiebreaker(1, kTiebreaker2); 1461391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1462391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org CreateChannels(1); 1463391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1464391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_EQ_WAIT(2u, ep1_ch1()->ports().size(), 1000); 1465391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1466391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org const std::vector<cricket::PortInterface *> ports_before = ep1_ch1()->ports(); 1467391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org for (size_t i = 0; i < ports_before.size(); ++i) { 1468391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_EQ(cricket::ICEROLE_CONTROLLING, ports_before[i]->GetIceRole()); 1469391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_EQ(cricket::ICEPROTO_GOOGLE, ports_before[i]->IceProtocol()); 1470391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); 1471391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org } 1472391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1473391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep1_ch1()->SetIceRole(cricket::ICEROLE_CONTROLLED); 1474391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep1_ch1()->SetIceProtocolType(cricket::ICEPROTO_RFC5245); 1475391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep1_ch1()->SetIceTiebreaker(kTiebreaker2); 1476391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1477391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org const std::vector<cricket::PortInterface *> ports_after = ep1_ch1()->ports(); 1478391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org for (size_t i = 0; i < ports_after.size(); ++i) { 1479391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_EQ(cricket::ICEROLE_CONTROLLED, ports_before[i]->GetIceRole()); 1480391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_EQ(cricket::ICEPROTO_RFC5245, ports_before[i]->IceProtocol()); 1481391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org // SetIceTiebreaker after Connect() has been called will fail. So expect the 1482391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org // original value. 1483391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_EQ(kTiebreaker1, ports_before[i]->IceTiebreaker()); 1484391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org } 1485391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1486391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && 1487391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep1_ch1()->writable() && 1488391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->readable() && 1489391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->writable(), 1490391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1000); 1491391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1492391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org EXPECT_TRUE(ep1_ch1()->best_connection() && 1493391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org ep2_ch1()->best_connection()); 1494391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1495391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org TestSendRecv(1); 1496b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org DestroyChannels(); 1497b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org} 1498b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 1499b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org// This test verifies channel can handle ice messages when channel is in 1500b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org// hybrid mode. 1501b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.orgTEST_F(P2PTransportChannelTest, TestConnectivityBetweenHybridandIce) { 1502b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org TestHybridConnectivity(cricket::ICEPROTO_RFC5245); 1503b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org} 1504b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org 1505b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org// This test verifies channel can handle Gice messages when channel is in 1506b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org// hybrid mode. 1507b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.orgTEST_F(P2PTransportChannelTest, TestConnectivityBetweenHybridandGice) { 1508b881d27f23e9a8f52dc6a60fc66ebd75f9c2f15cmallinath@webrtc.org TestHybridConnectivity(cricket::ICEPROTO_GOOGLE); 1509391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org} 1510391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1511391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org// Verify that we can set DSCP value and retrieve properly from P2PTC. 1512391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.orgTEST_F(P2PTransportChannelTest, TestDefaultDscpValue) { 1513391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(0, kPublicAddrs[0]); 1514391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org AddAddress(1, kPublicAddrs[1]); 1515391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org 1516391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org CreateChannels(1); 15172a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::DSCP_NO_CHANGE, 1518391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(0)->cd1_.ch_->DefaultDscpValue()); 15192a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::DSCP_NO_CHANGE, 1520391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(1)->cd1_.ch_->DefaultDscpValue()); 1521391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(0)->cd1_.ch_->SetOption( 15222a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Socket::OPT_DSCP, rtc::DSCP_CS6); 1523391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(1)->cd1_.ch_->SetOption( 15242a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Socket::OPT_DSCP, rtc::DSCP_CS6); 15252a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::DSCP_CS6, 1526391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(0)->cd1_.ch_->DefaultDscpValue()); 15272a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::DSCP_CS6, 1528391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(1)->cd1_.ch_->DefaultDscpValue()); 1529391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(0)->cd1_.ch_->SetOption( 15302a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Socket::OPT_DSCP, rtc::DSCP_AF41); 1531391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(1)->cd1_.ch_->SetOption( 15322a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::Socket::OPT_DSCP, rtc::DSCP_AF41); 15332a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::DSCP_AF41, 1534391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(0)->cd1_.ch_->DefaultDscpValue()); 15352a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org EXPECT_EQ(rtc::DSCP_AF41, 1536391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org GetEndpoint(1)->cd1_.ch_->DefaultDscpValue()); 1537391247d05a663265807c400947ab6eb01ae3d690mallinath@webrtc.org} 1538952740e2dafeb2599d21778eb2e1b8f1c8f2bb07wu@webrtc.org 15395c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org// Verify IPv6 connection is preferred over IPv4. 154095ed1960f457b29b7b2bfba563b3581288b1778fphoglund@webrtc.org// Flaky: https://code.google.com/p/webrtc/issues/detail?id=3317 154195ed1960f457b29b7b2bfba563b3581288b1778fphoglund@webrtc.orgTEST_F(P2PTransportChannelTest, DISABLED_TestIPv6Connections) { 15425c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org AddAddress(0, kIPv6PublicAddrs[0]); 15435c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org AddAddress(0, kPublicAddrs[0]); 15445c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org AddAddress(1, kIPv6PublicAddrs[1]); 15455c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org AddAddress(1, kPublicAddrs[1]); 15465c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 15475c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org SetAllocationStepDelay(0, kMinimumStepDelay); 15485c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org SetAllocationStepDelay(1, kMinimumStepDelay); 15495c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 15505c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org // Enable IPv6 15515c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org SetAllocatorFlags(0, cricket::PORTALLOCATOR_ENABLE_IPV6); 15525c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org SetAllocatorFlags(1, cricket::PORTALLOCATOR_ENABLE_IPV6); 15535c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 15545c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org CreateChannels(1); 15555c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 15565c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && 15575c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org ep2_ch1()->readable() && ep2_ch1()->writable(), 15585c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 1000); 15595c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org EXPECT_TRUE( 15605c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 15615c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org LocalCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[0]) && 15625c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org RemoteCandidate(ep1_ch1())->address().EqualIPs(kIPv6PublicAddrs[1])); 15635c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 15645c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org TestSendRecv(1); 15655c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org DestroyChannels(); 15665c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org} 15675c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org 1568ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org// Testing forceful TURN connections. 1569ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.orgTEST_F(P2PTransportChannelTest, TestForceTurn) { 1570ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org ConfigureEndpoints(NAT_PORT_RESTRICTED, NAT_SYMMETRIC, 1571ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org kDefaultPortAllocatorFlags | 1572ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | 1573ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG, 1574ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org kDefaultPortAllocatorFlags | 1575ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org cricket::PORTALLOCATOR_ENABLE_SHARED_SOCKET | 1576ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org cricket::PORTALLOCATOR_ENABLE_SHARED_UFRAG, 1577ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org kDefaultStepDelay, kDefaultStepDelay, 1578ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org cricket::ICEPROTO_RFC5245); 1579ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org set_force_relay(true); 1580bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org 1581bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org SetAllocationStepDelay(0, kMinimumStepDelay); 1582bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org SetAllocationStepDelay(1, kMinimumStepDelay); 1583bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org 1584bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org CreateChannels(1); 1585bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org 1586bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && 1587bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org ep1_ch1()->writable() && 1588bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org ep2_ch1()->readable() && 1589bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org ep2_ch1()->writable(), 1590bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org 1000); 1591bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org 1592bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org EXPECT_TRUE(ep1_ch1()->best_connection() && 1593bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org ep2_ch1()->best_connection()); 1594bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org 1595ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org EXPECT_EQ("relay", RemoteCandidate(ep1_ch1())->type()); 1596ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org EXPECT_EQ("relay", LocalCandidate(ep1_ch1())->type()); 1597ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org EXPECT_EQ("relay", RemoteCandidate(ep2_ch1())->type()); 1598ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org EXPECT_EQ("relay", LocalCandidate(ep2_ch1())->type()); 1599ba4b69f4755d1bfb1a956f390cb3ce2713189cf2buildbot@webrtc.org 1600bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org TestSendRecv(1); 1601bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org DestroyChannels(); 1602bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org} 1603bf9b1e0e3c606f615851d9f33f4d5222acfc921emallinath@webrtc.org 16040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test what happens when we have 2 users behind the same NAT. This can lead 16050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// to interesting behavior because the STUN server will only give out the 16060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// address of the outermost NAT. 16070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass P2PTransportChannelSameNatTest : public P2PTransportChannelTestBase { 16080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org protected: 16090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void ConfigureEndpoints(Config nat_type, Config config1, Config config2) { 16100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT(nat_type >= NAT_FULL_CONE && nat_type <= NAT_SYMMETRIC); 16112a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org rtc::NATSocketServer::Translator* outer_nat = 16120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nat()->AddTranslator(kPublicAddrs[0], kNatAddrs[0], 16132a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org static_cast<rtc::NATType>(nat_type - NAT_FULL_CONE)); 16140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoint(outer_nat, 0, config1); 16150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoint(outer_nat, 1, config2); 16160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 16172a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org void ConfigureEndpoint(rtc::NATSocketServer::Translator* nat, 16180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int endpoint, Config config) { 16190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT(config <= NAT_SYMMETRIC); 16200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (config == OPEN) { 16210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(endpoint, kPrivateAddrs[endpoint]); 16220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nat->AddClient(kPrivateAddrs[endpoint]); 16230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 16240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(endpoint, kCascadedPrivateAddrs[endpoint]); 16250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nat->AddTranslator(kPrivateAddrs[endpoint], kCascadedNatAddrs[endpoint], 16262a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org static_cast<rtc::NATType>(config - NAT_FULL_CONE))->AddClient( 16270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kCascadedPrivateAddrs[endpoint]); 16280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 16290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 16300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 16310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelSameNatTest, TestConesBehindSameCone) { 16330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ConfigureEndpoints(NAT_FULL_CONE, NAT_FULL_CONE, NAT_FULL_CONE); 16340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(kLocalUdpToStunUdp); 16350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 16360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test what happens when we have multiple available pathways. 16380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// In the future we will try different RTTs and configs for the different 16390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// interfaces, so that we can simulate a user with Ethernet and VPN networks. 16400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass P2PTransportChannelMultihomedTest : public P2PTransportChannelTestBase { 16410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 16420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we can establish connectivity when both peers are multihomed. 16447262c0074086d60e77a075d336d2594fa0234b92asapersson@webrtc.orgTEST_F(P2PTransportChannelMultihomedTest, DISABLED_TestBasic) { 16450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(0, kPublicAddrs[0]); 16460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(0, kAlternateAddrs[0]); 16470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(1, kPublicAddrs[1]); 16480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(1, kAlternateAddrs[1]); 16490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Test(kLocalUdpToLocalUdp); 16500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 16510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we can quickly switch links if an interface goes down. 16530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelMultihomedTest, TestFailover) { 16540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(0, kPublicAddrs[0]); 16558a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org // Adding alternate address will make sure |kPublicAddrs| has the higher 16568a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org // priority than others. This is due to FakeNetwork::AddInterface method. 1657f5b8e7a761959709cf8201685deaf35ed074cb83wu@webrtc.org AddAddress(1, kAlternateAddrs[1]); 16588a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org AddAddress(1, kPublicAddrs[1]); 16598a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org 16600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Use only local ports for simplicity. 16610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(0, kOnlyLocalPorts); 16620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(1, kOnlyLocalPorts); 16630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Create channels and let them go writable, as usual. 16650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 16660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && 16670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->readable() && ep2_ch1()->writable(), 16680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000); 16690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE( 16700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 16710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 16720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 16730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Blackhole any traffic to or from the public addrs. 16750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_INFO) << "Failing over..."; 16762a86ce22ccc387dfa6f8a98ce3eba5c1e6f9e538buildbot@webrtc.org fw()->AddRule(false, rtc::FP_ANY, rtc::FD_ANY, 16770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org kPublicAddrs[1]); 16780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // We should detect loss of connectivity within 5 seconds or so. 16800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(!ep1_ch1()->writable(), 7000); 16810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // We should switch over to use the alternate addr immediately 16830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // when we lose writability. 16840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT( 16850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 16860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 16870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), 16880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3000); 16890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DestroyChannels(); 16910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 16920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 16930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Test that we can switch links in a coordinated fashion. 16940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgTEST_F(P2PTransportChannelMultihomedTest, TestDrain) { 16950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(0, kPublicAddrs[0]); 16960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(1, kPublicAddrs[1]); 16970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Use only local ports for simplicity. 16980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(0, kOnlyLocalPorts); 16990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org SetAllocatorFlags(1, kOnlyLocalPorts); 17000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Create channels and let them go writable, as usual. 17020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org CreateChannels(1); 17030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT(ep1_ch1()->readable() && ep1_ch1()->writable() && 17040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->readable() && ep2_ch1()->writable(), 17050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1000); 17060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE( 17070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 17080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 17090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[1])); 17100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Remove the public interface, add the alternate interface, and allocate 17120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // a new generation of candidates for the new interface (via Connect()). 17130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LOG(LS_INFO) << "Draining..."; 17140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org AddAddress(1, kAlternateAddrs[1]); 17150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoveAddress(1, kPublicAddrs[1]); 17160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep2_ch1()->Connect(); 17170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // We should switch over to use the alternate address after 17190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // an exchange of pings. 17200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE_WAIT( 17210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ep1_ch1()->best_connection() && ep2_ch1()->best_connection() && 17220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org LocalCandidate(ep1_ch1())->address().EqualIPs(kPublicAddrs[0]) && 17230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org RemoteCandidate(ep1_ch1())->address().EqualIPs(kAlternateAddrs[1]), 17240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3000); 17250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 17260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org DestroyChannels(); 17270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} 1728