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

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

Issue 1920043002: Replace scoped_ptr with unique_ptr in webrtc/base/ (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 4 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
« no previous file with comments | « webrtc/base/physicalsocketserver.h ('k') | webrtc/base/platform_thread.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 <memory>
11 #include <signal.h> 12 #include <signal.h>
12 #include <stdarg.h> 13 #include <stdarg.h>
13 14
14 #include "webrtc/base/gunit.h" 15 #include "webrtc/base/gunit.h"
15 #include "webrtc/base/logging.h" 16 #include "webrtc/base/logging.h"
16 #include "webrtc/base/physicalsocketserver.h" 17 #include "webrtc/base/physicalsocketserver.h"
17 #include "webrtc/base/scoped_ptr.h"
18 #include "webrtc/base/socket_unittest.h" 18 #include "webrtc/base/socket_unittest.h"
19 #include "webrtc/base/testutils.h" 19 #include "webrtc/base/testutils.h"
20 #include "webrtc/base/thread.h" 20 #include "webrtc/base/thread.h"
21 21
22 namespace rtc { 22 namespace rtc {
23 23
24 class PhysicalSocketTest; 24 class PhysicalSocketTest;
25 25
26 class FakeSocketDispatcher : public SocketDispatcher { 26 class FakeSocketDispatcher : public SocketDispatcher {
27 public: 27 public:
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 PhysicalSocketTest() 93 PhysicalSocketTest()
94 : server_(new FakePhysicalSocketServer(this)), 94 : server_(new FakePhysicalSocketServer(this)),
95 scope_(server_.get()), 95 scope_(server_.get()),
96 fail_accept_(false), 96 fail_accept_(false),
97 max_send_size_(-1) { 97 max_send_size_(-1) {
98 } 98 }
99 99
100 void ConnectInternalAcceptError(const IPAddress& loopback); 100 void ConnectInternalAcceptError(const IPAddress& loopback);
101 void WritableAfterPartialWrite(const IPAddress& loopback); 101 void WritableAfterPartialWrite(const IPAddress& loopback);
102 102
103 rtc::scoped_ptr<FakePhysicalSocketServer> server_; 103 std::unique_ptr<FakePhysicalSocketServer> server_;
104 SocketServerScope scope_; 104 SocketServerScope scope_;
105 bool fail_accept_; 105 bool fail_accept_;
106 int max_send_size_; 106 int max_send_size_;
107 }; 107 };
108 108
109 SOCKET FakeSocketDispatcher::DoAccept(SOCKET socket, 109 SOCKET FakeSocketDispatcher::DoAccept(SOCKET socket,
110 sockaddr* addr, 110 sockaddr* addr,
111 socklen_t* addrlen) { 111 socklen_t* addrlen) {
112 FakePhysicalSocketServer* ss = 112 FakePhysicalSocketServer* ss =
113 static_cast<FakePhysicalSocketServer*>(socketserver()); 113 static_cast<FakePhysicalSocketServer*>(socketserver());
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 165
166 TEST_F(PhysicalSocketTest, TestConnectFailIPv4) { 166 TEST_F(PhysicalSocketTest, TestConnectFailIPv4) {
167 SocketTest::TestConnectFailIPv4(); 167 SocketTest::TestConnectFailIPv4();
168 } 168 }
169 169
170 void PhysicalSocketTest::ConnectInternalAcceptError(const IPAddress& loopback) { 170 void PhysicalSocketTest::ConnectInternalAcceptError(const IPAddress& loopback) {
171 testing::StreamSink sink; 171 testing::StreamSink sink;
172 SocketAddress accept_addr; 172 SocketAddress accept_addr;
173 173
174 // Create two clients. 174 // Create two clients.
175 scoped_ptr<AsyncSocket> client1(server_->CreateAsyncSocket(loopback.family(), 175 std::unique_ptr<AsyncSocket> client1(
176 SOCK_STREAM)); 176 server_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
177 sink.Monitor(client1.get()); 177 sink.Monitor(client1.get());
178 EXPECT_EQ(AsyncSocket::CS_CLOSED, client1->GetState()); 178 EXPECT_EQ(AsyncSocket::CS_CLOSED, client1->GetState());
179 EXPECT_PRED1(IsUnspecOrEmptyIP, client1->GetLocalAddress().ipaddr()); 179 EXPECT_PRED1(IsUnspecOrEmptyIP, client1->GetLocalAddress().ipaddr());
180 180
181 scoped_ptr<AsyncSocket> client2(server_->CreateAsyncSocket(loopback.family(), 181 std::unique_ptr<AsyncSocket> client2(
182 SOCK_STREAM)); 182 server_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
183 sink.Monitor(client2.get()); 183 sink.Monitor(client2.get());
184 EXPECT_EQ(AsyncSocket::CS_CLOSED, client2->GetState()); 184 EXPECT_EQ(AsyncSocket::CS_CLOSED, client2->GetState());
185 EXPECT_PRED1(IsUnspecOrEmptyIP, client2->GetLocalAddress().ipaddr()); 185 EXPECT_PRED1(IsUnspecOrEmptyIP, client2->GetLocalAddress().ipaddr());
186 186
187 // Create server and listen. 187 // Create server and listen.
188 scoped_ptr<AsyncSocket> server( 188 std::unique_ptr<AsyncSocket> server(
189 server_->CreateAsyncSocket(loopback.family(), SOCK_STREAM)); 189 server_->CreateAsyncSocket(loopback.family(), SOCK_STREAM));
190 sink.Monitor(server.get()); 190 sink.Monitor(server.get());
191 EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0))); 191 EXPECT_EQ(0, server->Bind(SocketAddress(loopback, 0)));
192 EXPECT_EQ(0, server->Listen(5)); 192 EXPECT_EQ(0, server->Listen(5));
193 EXPECT_EQ(AsyncSocket::CS_CONNECTING, server->GetState()); 193 EXPECT_EQ(AsyncSocket::CS_CONNECTING, server->GetState());
194 194
195 // Ensure no pending server connections, since we haven't done anything yet. 195 // Ensure no pending server connections, since we haven't done anything yet.
196 EXPECT_FALSE(sink.Check(server.get(), testing::SSE_READ)); 196 EXPECT_FALSE(sink.Check(server.get(), testing::SSE_READ));
197 EXPECT_TRUE(nullptr == server->Accept(&accept_addr)); 197 EXPECT_TRUE(nullptr == server->Accept(&accept_addr));
198 EXPECT_TRUE(accept_addr.IsNil()); 198 EXPECT_TRUE(accept_addr.IsNil());
199 199
200 // Attempt first connect to listening socket. 200 // Attempt first connect to listening socket.
201 EXPECT_EQ(0, client1->Connect(server->GetLocalAddress())); 201 EXPECT_EQ(0, client1->Connect(server->GetLocalAddress()));
202 EXPECT_FALSE(client1->GetLocalAddress().IsNil()); 202 EXPECT_FALSE(client1->GetLocalAddress().IsNil());
203 EXPECT_NE(server->GetLocalAddress(), client1->GetLocalAddress()); 203 EXPECT_NE(server->GetLocalAddress(), client1->GetLocalAddress());
204 204
205 // Client is connecting, outcome not yet determined. 205 // Client is connecting, outcome not yet determined.
206 EXPECT_EQ(AsyncSocket::CS_CONNECTING, client1->GetState()); 206 EXPECT_EQ(AsyncSocket::CS_CONNECTING, client1->GetState());
207 EXPECT_FALSE(sink.Check(client1.get(), testing::SSE_OPEN)); 207 EXPECT_FALSE(sink.Check(client1.get(), testing::SSE_OPEN));
208 EXPECT_FALSE(sink.Check(client1.get(), testing::SSE_CLOSE)); 208 EXPECT_FALSE(sink.Check(client1.get(), testing::SSE_CLOSE));
209 209
210 // Server has pending connection, try to accept it (will fail). 210 // Server has pending connection, try to accept it (will fail).
211 EXPECT_TRUE_WAIT((sink.Check(server.get(), testing::SSE_READ)), kTimeout); 211 EXPECT_TRUE_WAIT((sink.Check(server.get(), testing::SSE_READ)), kTimeout);
212 // Simulate "::accept" returning an error. 212 // Simulate "::accept" returning an error.
213 SetFailAccept(true); 213 SetFailAccept(true);
214 scoped_ptr<AsyncSocket> accepted(server->Accept(&accept_addr)); 214 std::unique_ptr<AsyncSocket> accepted(server->Accept(&accept_addr));
215 EXPECT_FALSE(accepted); 215 EXPECT_FALSE(accepted);
216 ASSERT_TRUE(accept_addr.IsNil()); 216 ASSERT_TRUE(accept_addr.IsNil());
217 217
218 // Ensure no more pending server connections. 218 // Ensure no more pending server connections.
219 EXPECT_FALSE(sink.Check(server.get(), testing::SSE_READ)); 219 EXPECT_FALSE(sink.Check(server.get(), testing::SSE_READ));
220 EXPECT_TRUE(nullptr == server->Accept(&accept_addr)); 220 EXPECT_TRUE(nullptr == server->Accept(&accept_addr));
221 EXPECT_TRUE(accept_addr.IsNil()); 221 EXPECT_TRUE(accept_addr.IsNil());
222 222
223 // Attempt second connect to listening socket. 223 // Attempt second connect to listening socket.
224 EXPECT_EQ(0, client2->Connect(server->GetLocalAddress())); 224 EXPECT_EQ(0, client2->Connect(server->GetLocalAddress()));
225 EXPECT_FALSE(client2->GetLocalAddress().IsNil()); 225 EXPECT_FALSE(client2->GetLocalAddress().IsNil());
226 EXPECT_NE(server->GetLocalAddress(), client2->GetLocalAddress()); 226 EXPECT_NE(server->GetLocalAddress(), client2->GetLocalAddress());
227 227
228 // Client is connecting, outcome not yet determined. 228 // Client is connecting, outcome not yet determined.
229 EXPECT_EQ(AsyncSocket::CS_CONNECTING, client2->GetState()); 229 EXPECT_EQ(AsyncSocket::CS_CONNECTING, client2->GetState());
230 EXPECT_FALSE(sink.Check(client2.get(), testing::SSE_OPEN)); 230 EXPECT_FALSE(sink.Check(client2.get(), testing::SSE_OPEN));
231 EXPECT_FALSE(sink.Check(client2.get(), testing::SSE_CLOSE)); 231 EXPECT_FALSE(sink.Check(client2.get(), testing::SSE_CLOSE));
232 232
233 // Server has pending connection, try to accept it (will succeed). 233 // Server has pending connection, try to accept it (will succeed).
234 EXPECT_TRUE_WAIT((sink.Check(server.get(), testing::SSE_READ)), kTimeout); 234 EXPECT_TRUE_WAIT((sink.Check(server.get(), testing::SSE_READ)), kTimeout);
235 SetFailAccept(false); 235 SetFailAccept(false);
236 scoped_ptr<AsyncSocket> accepted2(server->Accept(&accept_addr)); 236 std::unique_ptr<AsyncSocket> accepted2(server->Accept(&accept_addr));
237 ASSERT_TRUE(accepted2); 237 ASSERT_TRUE(accepted2);
238 EXPECT_FALSE(accept_addr.IsNil()); 238 EXPECT_FALSE(accept_addr.IsNil());
239 EXPECT_EQ(accepted2->GetRemoteAddress(), accept_addr); 239 EXPECT_EQ(accepted2->GetRemoteAddress(), accept_addr);
240 } 240 }
241 241
242 TEST_F(PhysicalSocketTest, TestConnectAcceptErrorIPv4) { 242 TEST_F(PhysicalSocketTest, TestConnectAcceptErrorIPv4) {
243 ConnectInternalAcceptError(kIPv4Loopback); 243 ConnectInternalAcceptError(kIPv4Loopback);
244 } 244 }
245 245
246 // Crashes on Linux. See webrtc:4923. 246 // Crashes on Linux. See webrtc:4923.
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 if (!ret) { 508 if (!ret) {
509 LOG(LS_ERROR) << "ExpectNone(): Received signal " << signals_received_[0] 509 LOG(LS_ERROR) << "ExpectNone(): Received signal " << signals_received_[0]
510 << ", expected none"; 510 << ", expected none";
511 } 511 }
512 return ret; 512 return ret;
513 } 513 }
514 514
515 static std::vector<int> signals_received_; 515 static std::vector<int> signals_received_;
516 static Thread *signaled_thread_; 516 static Thread *signaled_thread_;
517 517
518 scoped_ptr<PhysicalSocketServer> ss_; 518 std::unique_ptr<PhysicalSocketServer> ss_;
519 }; 519 };
520 520
521 std::vector<int> PosixSignalDeliveryTest::signals_received_; 521 std::vector<int> PosixSignalDeliveryTest::signals_received_;
522 Thread *PosixSignalDeliveryTest::signaled_thread_ = NULL; 522 Thread *PosixSignalDeliveryTest::signaled_thread_ = NULL;
523 523
524 // Test receiving a synchronous signal while not in Wait() and then entering 524 // Test receiving a synchronous signal while not in Wait() and then entering
525 // Wait() afterwards. 525 // Wait() afterwards.
526 TEST_F(PosixSignalDeliveryTest, RaiseThenWait) { 526 TEST_F(PosixSignalDeliveryTest, RaiseThenWait) {
527 ASSERT_TRUE(ss_->SetPosixSignalHandler(SIGTERM, &RecordSignal)); 527 ASSERT_TRUE(ss_->SetPosixSignalHandler(SIGTERM, &RecordSignal));
528 raise(SIGTERM); 528 raise(SIGTERM);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
576 TEST_F(PosixSignalDeliveryTest, SignalOnDifferentThread) { 576 TEST_F(PosixSignalDeliveryTest, SignalOnDifferentThread) {
577 ss_->SetPosixSignalHandler(SIGTERM, &RecordSignal); 577 ss_->SetPosixSignalHandler(SIGTERM, &RecordSignal);
578 // Mask out SIGTERM so that it can't be delivered to this thread. 578 // Mask out SIGTERM so that it can't be delivered to this thread.
579 sigset_t mask; 579 sigset_t mask;
580 sigemptyset(&mask); 580 sigemptyset(&mask);
581 sigaddset(&mask, SIGTERM); 581 sigaddset(&mask, SIGTERM);
582 EXPECT_EQ(0, pthread_sigmask(SIG_SETMASK, &mask, NULL)); 582 EXPECT_EQ(0, pthread_sigmask(SIG_SETMASK, &mask, NULL));
583 // Start a new thread that raises it. It will have to be delivered to that 583 // Start a new thread that raises it. It will have to be delivered to that
584 // thread. Our implementation should safely handle it and dispatch 584 // thread. Our implementation should safely handle it and dispatch
585 // RecordSignal() on this thread. 585 // RecordSignal() on this thread.
586 scoped_ptr<Thread> thread(new Thread()); 586 std::unique_ptr<Thread> thread(new Thread());
587 scoped_ptr<RaiseSigTermRunnable> runnable(new RaiseSigTermRunnable()); 587 std::unique_ptr<RaiseSigTermRunnable> runnable(new RaiseSigTermRunnable());
588 thread->Start(runnable.get()); 588 thread->Start(runnable.get());
589 EXPECT_TRUE(ss_->Wait(1500, true)); 589 EXPECT_TRUE(ss_->Wait(1500, true));
590 EXPECT_TRUE(ExpectSignal(SIGTERM)); 590 EXPECT_TRUE(ExpectSignal(SIGTERM));
591 EXPECT_EQ(Thread::Current(), signaled_thread_); 591 EXPECT_EQ(Thread::Current(), signaled_thread_);
592 EXPECT_TRUE(ExpectNone()); 592 EXPECT_TRUE(ExpectNone());
593 } 593 }
594 594
595 #endif 595 #endif
596 596
597 } // namespace rtc 597 } // namespace rtc
OLDNEW
« no previous file with comments | « webrtc/base/physicalsocketserver.h ('k') | webrtc/base/platform_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698