Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(200)

Side by Side Diff: webrtc/base/nat_unittest.cc

Issue 1215713003: Ensuring that UDP TURN servers are always used as STUN servers. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixing compiler warning from size_t->int cast Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/base/natserver.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include <string> 11 #include <string>
12 12
13 #include "webrtc/base/gunit.h" 13 #include "webrtc/base/gunit.h"
14 #include "webrtc/base/logging.h" 14 #include "webrtc/base/logging.h"
15 #include "webrtc/base/natserver.h" 15 #include "webrtc/base/natserver.h"
16 #include "webrtc/base/natsocketfactory.h" 16 #include "webrtc/base/natsocketfactory.h"
17 #include "webrtc/base/nethelpers.h" 17 #include "webrtc/base/nethelpers.h"
18 #include "webrtc/base/network.h" 18 #include "webrtc/base/network.h"
19 #include "webrtc/base/physicalsocketserver.h" 19 #include "webrtc/base/physicalsocketserver.h"
20 #include "webrtc/base/testclient.h" 20 #include "webrtc/base/testclient.h"
21 #include "webrtc/base/asynctcpsocket.h"
21 #include "webrtc/base/virtualsocketserver.h" 22 #include "webrtc/base/virtualsocketserver.h"
22 #include "webrtc/test/testsupport/gtest_disable.h" 23 #include "webrtc/test/testsupport/gtest_disable.h"
23 24
24 using namespace rtc; 25 using namespace rtc;
25 26
26 bool CheckReceive( 27 bool CheckReceive(
27 TestClient* client, bool should_receive, const char* buf, size_t size) { 28 TestClient* client, bool should_receive, const char* buf, size_t size) {
28 return (should_receive) ? 29 return (should_receive) ?
29 client->CheckNextPacket(buf, size, 0) : 30 client->CheckNextPacket(buf, size, 0) :
30 client->CheckNoPacket(); 31 client->CheckNoPacket();
31 } 32 }
32 33
33 TestClient* CreateTestClient( 34 TestClient* CreateTestClient(
34 SocketFactory* factory, const SocketAddress& local_addr) { 35 SocketFactory* factory, const SocketAddress& local_addr) {
35 AsyncUDPSocket* socket = AsyncUDPSocket::Create(factory, local_addr); 36 AsyncUDPSocket* socket = AsyncUDPSocket::Create(factory, local_addr);
36 return new TestClient(socket); 37 return new TestClient(socket);
37 } 38 }
38 39
40 TestClient* CreateTCPTestClient(AsyncSocket* socket) {
41 AsyncTCPSocket* packet_socket = new AsyncTCPSocket(socket, false);
42 return new TestClient(packet_socket);
43 }
44
39 // Tests that when sending from internal_addr to external_addrs through the 45 // Tests that when sending from internal_addr to external_addrs through the
40 // NAT type specified by nat_type, all external addrs receive the sent packet 46 // NAT type specified by nat_type, all external addrs receive the sent packet
41 // and, if exp_same is true, all use the same mapped-address on the NAT. 47 // and, if exp_same is true, all use the same mapped-address on the NAT.
42 void TestSend( 48 void TestSend(
43 SocketServer* internal, const SocketAddress& internal_addr, 49 SocketServer* internal, const SocketAddress& internal_addr,
44 SocketServer* external, const SocketAddress external_addrs[4], 50 SocketServer* external, const SocketAddress external_addrs[4],
45 NATType nat_type, bool exp_same) { 51 NATType nat_type, bool exp_same) {
46 Thread th_int(internal); 52 Thread th_int(internal);
47 Thread th_ext(external); 53 Thread th_ext(external);
48 54
49 SocketAddress server_addr = internal_addr; 55 SocketAddress server_addr = internal_addr;
50 server_addr.SetPort(0); // Auto-select a port 56 server_addr.SetPort(0); // Auto-select a port
51 NATServer* nat = new NATServer( 57 NATServer* nat = new NATServer(nat_type, internal, server_addr, server_addr,
52 nat_type, internal, server_addr, external, external_addrs[0]); 58 external, external_addrs[0]);
53 NATSocketFactory* natsf = new NATSocketFactory(internal, 59 NATSocketFactory* natsf = new NATSocketFactory(internal,
54 nat->internal_address()); 60 nat->internal_udp_address(),
61 nat->internal_tcp_address());
55 62
56 TestClient* in = CreateTestClient(natsf, internal_addr); 63 TestClient* in = CreateTestClient(natsf, internal_addr);
57 TestClient* out[4]; 64 TestClient* out[4];
58 for (int i = 0; i < 4; i++) 65 for (int i = 0; i < 4; i++)
59 out[i] = CreateTestClient(external, external_addrs[i]); 66 out[i] = CreateTestClient(external, external_addrs[i]);
60 67
61 th_int.Start(); 68 th_int.Start();
62 th_ext.Start(); 69 th_ext.Start();
63 70
64 const char* buf = "filter_test"; 71 const char* buf = "filter_test";
(...skipping 27 matching lines...) Expand all
92 // is delivered according to the specified filter_ip and filter_port rules. 99 // is delivered according to the specified filter_ip and filter_port rules.
93 void TestRecv( 100 void TestRecv(
94 SocketServer* internal, const SocketAddress& internal_addr, 101 SocketServer* internal, const SocketAddress& internal_addr,
95 SocketServer* external, const SocketAddress external_addrs[4], 102 SocketServer* external, const SocketAddress external_addrs[4],
96 NATType nat_type, bool filter_ip, bool filter_port) { 103 NATType nat_type, bool filter_ip, bool filter_port) {
97 Thread th_int(internal); 104 Thread th_int(internal);
98 Thread th_ext(external); 105 Thread th_ext(external);
99 106
100 SocketAddress server_addr = internal_addr; 107 SocketAddress server_addr = internal_addr;
101 server_addr.SetPort(0); // Auto-select a port 108 server_addr.SetPort(0); // Auto-select a port
102 NATServer* nat = new NATServer( 109 NATServer* nat = new NATServer(nat_type, internal, server_addr, server_addr,
103 nat_type, internal, server_addr, external, external_addrs[0]); 110 external, external_addrs[0]);
104 NATSocketFactory* natsf = new NATSocketFactory(internal, 111 NATSocketFactory* natsf = new NATSocketFactory(internal,
105 nat->internal_address()); 112 nat->internal_udp_address(),
113 nat->internal_tcp_address());
106 114
107 TestClient* in = CreateTestClient(natsf, internal_addr); 115 TestClient* in = CreateTestClient(natsf, internal_addr);
108 TestClient* out[4]; 116 TestClient* out[4];
109 for (int i = 0; i < 4; i++) 117 for (int i = 0; i < 4; i++)
110 out[i] = CreateTestClient(external, external_addrs[i]); 118 out[i] = CreateTestClient(external, external_addrs[i]);
111 119
112 th_int.Start(); 120 th_int.Start();
113 th_ext.Start(); 121 th_ext.Start();
114 122
115 const char* buf = "filter_test"; 123 const char* buf = "filter_test";
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 } 296 }
289 297
290 TEST(NatTest, TestVirtualIPv6) { 298 TEST(NatTest, TestVirtualIPv6) {
291 if (HasIPv6Enabled()) { 299 if (HasIPv6Enabled()) {
292 TestVirtualInternal(AF_INET6); 300 TestVirtualInternal(AF_INET6);
293 } else { 301 } else {
294 LOG(LS_WARNING) << "No IPv6, skipping"; 302 LOG(LS_WARNING) << "No IPv6, skipping";
295 } 303 }
296 } 304 }
297 305
298 // TODO: Finish this test
299 class NatTcpTest : public testing::Test, public sigslot::has_slots<> { 306 class NatTcpTest : public testing::Test, public sigslot::has_slots<> {
300 public: 307 public:
301 NatTcpTest() : connected_(false) {} 308 NatTcpTest()
302 virtual void SetUp() { 309 : int_addr_("192.168.0.1", 0),
303 int_vss_ = new TestVirtualSocketServer(new PhysicalSocketServer()); 310 ext_addr_("10.0.0.1", 0),
304 ext_vss_ = new TestVirtualSocketServer(new PhysicalSocketServer()); 311 connected_(false),
305 nat_ = new NATServer(NAT_OPEN_CONE, int_vss_, SocketAddress(), 312 int_pss_(new PhysicalSocketServer()),
306 ext_vss_, SocketAddress()); 313 ext_pss_(new PhysicalSocketServer()),
307 natsf_ = new NATSocketFactory(int_vss_, nat_->internal_address()); 314 int_vss_(new TestVirtualSocketServer(int_pss_)),
315 ext_vss_(new TestVirtualSocketServer(ext_pss_)),
316 int_thread_(new Thread(int_vss_.get())),
317 ext_thread_(new Thread(ext_vss_.get())),
318 nat_(new NATServer(NAT_OPEN_CONE, int_vss_.get(), int_addr_, int_addr_,
319 ext_vss_.get(), ext_addr_)),
320 natsf_(new NATSocketFactory(int_vss_.get(),
321 nat_->internal_udp_address(),
322 nat_->internal_tcp_address())) {
323 int_thread_->Start();
324 ext_thread_->Start();
308 } 325 }
326
309 void OnConnectEvent(AsyncSocket* socket) { 327 void OnConnectEvent(AsyncSocket* socket) {
310 connected_ = true; 328 connected_ = true;
311 } 329 }
330
312 void OnAcceptEvent(AsyncSocket* socket) { 331 void OnAcceptEvent(AsyncSocket* socket) {
313 accepted_ = server_->Accept(NULL); 332 accepted_.reset(server_->Accept(NULL));
314 } 333 }
334
315 void OnCloseEvent(AsyncSocket* socket, int error) { 335 void OnCloseEvent(AsyncSocket* socket, int error) {
316 } 336 }
337
317 void ConnectEvents() { 338 void ConnectEvents() {
318 server_->SignalReadEvent.connect(this, &NatTcpTest::OnAcceptEvent); 339 server_->SignalReadEvent.connect(this, &NatTcpTest::OnAcceptEvent);
319 client_->SignalConnectEvent.connect(this, &NatTcpTest::OnConnectEvent); 340 client_->SignalConnectEvent.connect(this, &NatTcpTest::OnConnectEvent);
320 } 341 }
321 TestVirtualSocketServer* int_vss_; 342
322 TestVirtualSocketServer* ext_vss_; 343 SocketAddress int_addr_;
323 NATServer* nat_; 344 SocketAddress ext_addr_;
324 NATSocketFactory* natsf_;
325 AsyncSocket* client_;
326 AsyncSocket* server_;
327 AsyncSocket* accepted_;
328 bool connected_; 345 bool connected_;
346 PhysicalSocketServer* int_pss_;
347 PhysicalSocketServer* ext_pss_;
348 rtc::scoped_ptr<TestVirtualSocketServer> int_vss_;
349 rtc::scoped_ptr<TestVirtualSocketServer> ext_vss_;
350 rtc::scoped_ptr<Thread> int_thread_;
351 rtc::scoped_ptr<Thread> ext_thread_;
352 rtc::scoped_ptr<NATServer> nat_;
353 rtc::scoped_ptr<NATSocketFactory> natsf_;
354 rtc::scoped_ptr<AsyncSocket> client_;
355 rtc::scoped_ptr<AsyncSocket> server_;
356 rtc::scoped_ptr<AsyncSocket> accepted_;
329 }; 357 };
330 358
331 TEST_F(NatTcpTest, DISABLED_TestConnectOut) { 359 TEST_F(NatTcpTest, TestConnectOut) {
332 server_ = ext_vss_->CreateAsyncSocket(SOCK_STREAM); 360 server_.reset(ext_vss_->CreateAsyncSocket(SOCK_STREAM));
333 server_->Bind(SocketAddress()); 361 server_->Bind(ext_addr_);
334 server_->Listen(5); 362 server_->Listen(5);
335 363
336 client_ = int_vss_->CreateAsyncSocket(SOCK_STREAM); 364 client_.reset(natsf_->CreateAsyncSocket(SOCK_STREAM));
337 EXPECT_GE(0, client_->Bind(SocketAddress())); 365 EXPECT_GE(0, client_->Bind(int_addr_));
338 EXPECT_GE(0, client_->Connect(server_->GetLocalAddress())); 366 EXPECT_GE(0, client_->Connect(server_->GetLocalAddress()));
339 367
340
341 ConnectEvents(); 368 ConnectEvents();
342 369
343 EXPECT_TRUE_WAIT(connected_, 1000); 370 EXPECT_TRUE_WAIT(connected_, 1000);
344 EXPECT_EQ(client_->GetRemoteAddress(), server_->GetLocalAddress()); 371 EXPECT_EQ(client_->GetRemoteAddress(), server_->GetLocalAddress());
345 EXPECT_EQ(client_->GetRemoteAddress(), accepted_->GetLocalAddress()); 372 EXPECT_EQ(accepted_->GetRemoteAddress().ipaddr(), ext_addr_.ipaddr());
346 EXPECT_EQ(client_->GetLocalAddress(), accepted_->GetRemoteAddress());
347 373
348 client_->Close(); 374 rtc::scoped_ptr<rtc::TestClient> in(CreateTCPTestClient(client_.release()));
375 rtc::scoped_ptr<rtc::TestClient> out(
376 CreateTCPTestClient(accepted_.release()));
377
378 const char* buf = "test_packet";
379 size_t len = strlen(buf);
380
381 in->Send(buf, len);
382 SocketAddress trans_addr;
383 EXPECT_TRUE(out->CheckNextPacket(buf, len, &trans_addr));
384
385 out->Send(buf, len);
386 EXPECT_TRUE(in->CheckNextPacket(buf, len, &trans_addr));
349 } 387 }
350 //#endif 388 // #endif
OLDNEW
« no previous file with comments | « no previous file | webrtc/base/natserver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698