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

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

Issue 2859373003: Refactor TestClient to use std::unique_ptr, and fix VirtualSocketServerTest leaks. (Closed)
Patch Set: Created 3 years, 7 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
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2006 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 <math.h> 11 #include <math.h>
12 #include <time.h> 12 #include <time.h>
13 #if defined(WEBRTC_POSIX) 13 #if defined(WEBRTC_POSIX)
14 #include <netinet/in.h> 14 #include <netinet/in.h>
15 #endif 15 #endif
16 16
17 #include <memory> 17 #include <memory>
18 18
19 #include "webrtc/base/arraysize.h" 19 #include "webrtc/base/arraysize.h"
20 #include "webrtc/base/gunit.h"
20 #include "webrtc/base/logging.h" 21 #include "webrtc/base/logging.h"
21 #include "webrtc/base/gunit.h" 22 #include "webrtc/base/ptr_util.h"
22 #include "webrtc/base/testclient.h" 23 #include "webrtc/base/testclient.h"
23 #include "webrtc/base/testutils.h" 24 #include "webrtc/base/testutils.h"
24 #include "webrtc/base/thread.h" 25 #include "webrtc/base/thread.h"
25 #include "webrtc/base/timeutils.h" 26 #include "webrtc/base/timeutils.h"
26 #include "webrtc/base/virtualsocketserver.h" 27 #include "webrtc/base/virtualsocketserver.h"
27 28
28 using namespace rtc; 29 using namespace rtc;
29 30
30 using webrtc::testing::SSE_CLOSE; 31 using webrtc::testing::SSE_CLOSE;
31 using webrtc::testing::SSE_ERROR; 32 using webrtc::testing::SSE_ERROR;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 // to the default route. 174 // to the default route.
174 void TestDefaultRoute(const IPAddress& default_route) { 175 void TestDefaultRoute(const IPAddress& default_route) {
175 ss_->SetDefaultRoute(default_route); 176 ss_->SetDefaultRoute(default_route);
176 177
177 // Create client1 bound to the any address. 178 // Create client1 bound to the any address.
178 AsyncSocket* socket = 179 AsyncSocket* socket =
179 ss_->CreateAsyncSocket(default_route.family(), SOCK_DGRAM); 180 ss_->CreateAsyncSocket(default_route.family(), SOCK_DGRAM);
180 socket->Bind(EmptySocketAddressWithFamily(default_route.family())); 181 socket->Bind(EmptySocketAddressWithFamily(default_route.family()));
181 SocketAddress client1_any_addr = socket->GetLocalAddress(); 182 SocketAddress client1_any_addr = socket->GetLocalAddress();
182 EXPECT_TRUE(client1_any_addr.IsAnyIP()); 183 EXPECT_TRUE(client1_any_addr.IsAnyIP());
183 TestClient* client1 = new TestClient(new AsyncUDPSocket(socket)); 184 std::unique_ptr<TestClient> client1(
185 new TestClient(MakeUnique<AsyncUDPSocket>(socket)));
kwiberg-webrtc 2017/05/05 11:04:42 Why not use MakeUnique for TestClient too? auto
nisse-webrtc 2017/05/05 12:12:56 Done. I take it you don't want to see any use of t
kwiberg-webrtc 2017/05/05 12:40:31 No; as I said in an earlier comment, I think consi
184 186
185 // Create client2 bound to the default route. 187 // Create client2 bound to the default route.
186 AsyncSocket* socket2 = 188 AsyncSocket* socket2 =
187 ss_->CreateAsyncSocket(default_route.family(), SOCK_DGRAM); 189 ss_->CreateAsyncSocket(default_route.family(), SOCK_DGRAM);
188 socket2->Bind(SocketAddress(default_route, 0)); 190 socket2->Bind(SocketAddress(default_route, 0));
189 SocketAddress client2_addr = socket2->GetLocalAddress(); 191 SocketAddress client2_addr = socket2->GetLocalAddress();
190 EXPECT_FALSE(client2_addr.IsAnyIP()); 192 EXPECT_FALSE(client2_addr.IsAnyIP());
191 TestClient* client2 = new TestClient(new AsyncUDPSocket(socket2)); 193 std::unique_ptr<TestClient> client2(
194 new TestClient(MakeUnique<AsyncUDPSocket>(socket2)));
192 195
193 // Client1 sends to client2, client2 should see the default route as 196 // Client1 sends to client2, client2 should see the default route as
194 // client1's address. 197 // client1's address.
195 SocketAddress client1_addr; 198 SocketAddress client1_addr;
196 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr)); 199 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr));
197 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr)); 200 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr));
198 EXPECT_EQ(client1_addr, 201 EXPECT_EQ(client1_addr,
199 SocketAddress(default_route, client1_any_addr.port())); 202 SocketAddress(default_route, client1_any_addr.port()));
200 203
201 // Client2 can send back to client1's default route address. 204 // Client2 can send back to client1's default route address.
202 EXPECT_EQ(3, client2->SendTo("foo", 3, client1_addr)); 205 EXPECT_EQ(3, client2->SendTo("foo", 3, client1_addr));
203 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr)); 206 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr));
204 } 207 }
205 208
206 void BasicTest(const SocketAddress& initial_addr) { 209 void BasicTest(const SocketAddress& initial_addr) {
207 AsyncSocket* socket = ss_->CreateAsyncSocket(initial_addr.family(), 210 AsyncSocket* socket = ss_->CreateAsyncSocket(initial_addr.family(),
208 SOCK_DGRAM); 211 SOCK_DGRAM);
209 socket->Bind(initial_addr); 212 socket->Bind(initial_addr);
210 SocketAddress server_addr = socket->GetLocalAddress(); 213 SocketAddress server_addr = socket->GetLocalAddress();
211 // Make sure VSS didn't switch families on us. 214 // Make sure VSS didn't switch families on us.
212 EXPECT_EQ(server_addr.family(), initial_addr.family()); 215 EXPECT_EQ(server_addr.family(), initial_addr.family());
213 216
214 TestClient* client1 = new TestClient(new AsyncUDPSocket(socket)); 217 std::unique_ptr<TestClient> client1(
218 new TestClient(MakeUnique<AsyncUDPSocket>(socket)));
215 AsyncSocket* socket2 = 219 AsyncSocket* socket2 =
216 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_DGRAM); 220 ss_->CreateAsyncSocket(initial_addr.family(), SOCK_DGRAM);
217 TestClient* client2 = new TestClient(new AsyncUDPSocket(socket2)); 221 std::unique_ptr<TestClient> client2(
222 new TestClient(MakeUnique<AsyncUDPSocket>(socket2)));
218 223
219 SocketAddress client2_addr; 224 SocketAddress client2_addr;
220 EXPECT_EQ(3, client2->SendTo("foo", 3, server_addr)); 225 EXPECT_EQ(3, client2->SendTo("foo", 3, server_addr));
221 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr)); 226 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr));
222 227
223 SocketAddress client1_addr; 228 SocketAddress client1_addr;
224 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr)); 229 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr));
225 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr)); 230 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr));
226 EXPECT_EQ(client1_addr, server_addr); 231 EXPECT_EQ(client1_addr, server_addr);
227 232
228 SocketAddress empty = EmptySocketAddressWithFamily(initial_addr.family()); 233 SocketAddress empty = EmptySocketAddressWithFamily(initial_addr.family());
229 for (int i = 0; i < 10; i++) { 234 for (int i = 0; i < 10; i++) {
230 client2 = new TestClient(AsyncUDPSocket::Create(ss_, empty)); 235 client2.reset(
236 new TestClient(WrapUnique(AsyncUDPSocket::Create(ss_, empty))));
231 237
232 SocketAddress next_client2_addr; 238 SocketAddress next_client2_addr;
233 EXPECT_EQ(3, client2->SendTo("foo", 3, server_addr)); 239 EXPECT_EQ(3, client2->SendTo("foo", 3, server_addr));
234 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &next_client2_addr)); 240 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &next_client2_addr));
235 CheckPortIncrementalization(next_client2_addr, client2_addr); 241 CheckPortIncrementalization(next_client2_addr, client2_addr);
236 // EXPECT_EQ(next_client2_addr.port(), client2_addr.port() + 1); 242 // EXPECT_EQ(next_client2_addr.port(), client2_addr.port() + 1);
237 243
238 SocketAddress server_addr2; 244 SocketAddress server_addr2;
239 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, next_client2_addr)); 245 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, next_client2_addr));
240 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &server_addr2)); 246 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &server_addr2));
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 800
795 // Test cross-family datagram sending between a client bound to client_addr 801 // Test cross-family datagram sending between a client bound to client_addr
796 // and a server bound to server_addr. shouldSucceed indicates if sending is 802 // and a server bound to server_addr. shouldSucceed indicates if sending is
797 // expected to succeed or not. 803 // expected to succeed or not.
798 void CrossFamilyDatagramTest(const SocketAddress& client_addr, 804 void CrossFamilyDatagramTest(const SocketAddress& client_addr,
799 const SocketAddress& server_addr, 805 const SocketAddress& server_addr,
800 bool shouldSucceed) { 806 bool shouldSucceed) {
801 AsyncSocket* socket = ss_->CreateAsyncSocket(SOCK_DGRAM); 807 AsyncSocket* socket = ss_->CreateAsyncSocket(SOCK_DGRAM);
802 socket->Bind(server_addr); 808 socket->Bind(server_addr);
803 SocketAddress bound_server_addr = socket->GetLocalAddress(); 809 SocketAddress bound_server_addr = socket->GetLocalAddress();
804 TestClient* client1 = new TestClient(new AsyncUDPSocket(socket)); 810 std::unique_ptr<TestClient> client1(
811 new TestClient(MakeUnique<AsyncUDPSocket>(socket)));
805 812
806 AsyncSocket* socket2 = ss_->CreateAsyncSocket(SOCK_DGRAM); 813 AsyncSocket* socket2 = ss_->CreateAsyncSocket(SOCK_DGRAM);
807 socket2->Bind(client_addr); 814 socket2->Bind(client_addr);
808 TestClient* client2 = new TestClient(new AsyncUDPSocket(socket2)); 815 std::unique_ptr<TestClient> client2(
816 new TestClient(MakeUnique<AsyncUDPSocket>(socket2)));
809 SocketAddress client2_addr; 817 SocketAddress client2_addr;
810 818
811 if (shouldSucceed) { 819 if (shouldSucceed) {
812 EXPECT_EQ(3, client2->SendTo("foo", 3, bound_server_addr)); 820 EXPECT_EQ(3, client2->SendTo("foo", 3, bound_server_addr));
813 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr)); 821 EXPECT_TRUE(client1->CheckNextPacket("foo", 3, &client2_addr));
814 SocketAddress client1_addr; 822 SocketAddress client1_addr;
815 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr)); 823 EXPECT_EQ(6, client1->SendTo("bizbaz", 6, client2_addr));
816 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr)); 824 EXPECT_TRUE(client2->CheckNextPacket("bizbaz", 6, &client1_addr));
817 EXPECT_EQ(client1_addr, bound_server_addr); 825 EXPECT_EQ(client1_addr, bound_server_addr);
818 } else { 826 } else {
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 true); 1031 true);
1024 } 1032 }
1025 1033
1026 TEST_F(VirtualSocketServerTest, SetSendingBlockedWithUdpSocket) { 1034 TEST_F(VirtualSocketServerTest, SetSendingBlockedWithUdpSocket) {
1027 AsyncSocket* socket1 = 1035 AsyncSocket* socket1 =
1028 ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_DGRAM); 1036 ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_DGRAM);
1029 AsyncSocket* socket2 = 1037 AsyncSocket* socket2 =
1030 ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_DGRAM); 1038 ss_->CreateAsyncSocket(kIPv4AnyAddress.family(), SOCK_DGRAM);
1031 socket1->Bind(kIPv4AnyAddress); 1039 socket1->Bind(kIPv4AnyAddress);
1032 socket2->Bind(kIPv4AnyAddress); 1040 socket2->Bind(kIPv4AnyAddress);
1033 TestClient* client1 = new TestClient(new AsyncUDPSocket(socket1)); 1041 std::unique_ptr<TestClient> client1(
1042 new TestClient(MakeUnique<AsyncUDPSocket>(socket1)));
1034 1043
1035 ss_->SetSendingBlocked(true); 1044 ss_->SetSendingBlocked(true);
1036 EXPECT_EQ(-1, client1->SendTo("foo", 3, socket2->GetLocalAddress())); 1045 EXPECT_EQ(-1, client1->SendTo("foo", 3, socket2->GetLocalAddress()));
1037 EXPECT_TRUE(socket1->IsBlocking()); 1046 EXPECT_TRUE(socket1->IsBlocking());
1038 EXPECT_EQ(0, client1->ready_to_send_count()); 1047 EXPECT_EQ(0, client1->ready_to_send_count());
1039 1048
1040 ss_->SetSendingBlocked(false); 1049 ss_->SetSendingBlocked(false);
1041 EXPECT_EQ(1, client1->ready_to_send_count()); 1050 EXPECT_EQ(1, client1->ready_to_send_count());
1042 EXPECT_EQ(3, client1->SendTo("foo", 3, socket2->GetLocalAddress())); 1051 EXPECT_EQ(3, client1->SendTo("foo", 3, socket2->GetLocalAddress()));
1043 } 1052 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1120 << " N=" << kTestSamples[sidx]; 1129 << " N=" << kTestSamples[sidx];
1121 EXPECT_NEAR(kStdDev, stddev, 0.1 * kStdDev) 1130 EXPECT_NEAR(kStdDev, stddev, 0.1 * kStdDev)
1122 << "M=" << kTestMean[midx] 1131 << "M=" << kTestMean[midx]
1123 << " SD=" << kStdDev 1132 << " SD=" << kStdDev
1124 << " N=" << kTestSamples[sidx]; 1133 << " N=" << kTestSamples[sidx];
1125 delete f; 1134 delete f;
1126 } 1135 }
1127 } 1136 }
1128 } 1137 }
1129 } 1138 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698