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

Side by Side Diff: net/socket/unix_domain_socket_posix_unittest.cc

Issue 20142003: Remove ref-counting from StreamListenSocket (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixup Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <errno.h> 5 #include <errno.h>
6 #include <fcntl.h> 6 #include <fcntl.h>
7 #include <poll.h> 7 #include <poll.h>
8 #include <sys/socket.h> 8 #include <sys/socket.h>
9 #include <sys/stat.h> 9 #include <sys/stat.h>
10 #include <sys/time.h> 10 #include <sys/time.h>
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 base::ConditionVariable condition_; 95 base::ConditionVariable condition_;
96 }; 96 };
97 97
98 class TestListenSocketDelegate : public StreamListenSocket::Delegate { 98 class TestListenSocketDelegate : public StreamListenSocket::Delegate {
99 public: 99 public:
100 explicit TestListenSocketDelegate( 100 explicit TestListenSocketDelegate(
101 const scoped_refptr<EventManager>& event_manager) 101 const scoped_refptr<EventManager>& event_manager)
102 : event_manager_(event_manager) {} 102 : event_manager_(event_manager) {}
103 103
104 virtual void DidAccept(StreamListenSocket* server, 104 virtual void DidAccept(StreamListenSocket* server,
105 StreamListenSocket* connection) OVERRIDE { 105 scoped_ptr<StreamListenSocket> connection) OVERRIDE {
106 LOG(ERROR) << __PRETTY_FUNCTION__; 106 LOG(ERROR) << __PRETTY_FUNCTION__;
107 connection_ = connection; 107 connection_ = connection.Pass();
108 Notify(EVENT_ACCEPT); 108 Notify(EVENT_ACCEPT);
109 } 109 }
110 110
111 virtual void DidRead(StreamListenSocket* connection, 111 virtual void DidRead(StreamListenSocket* connection,
112 const char* data, 112 const char* data,
113 int len) OVERRIDE { 113 int len) OVERRIDE {
114 { 114 {
115 base::AutoLock lock(mutex_); 115 base::AutoLock lock(mutex_);
116 DCHECK(len); 116 DCHECK(len);
117 data_.assign(data, len - 1); 117 data_.assign(data, len - 1);
(...skipping 13 matching lines...) Expand all
131 base::AutoLock lock(mutex_); 131 base::AutoLock lock(mutex_);
132 return data_; 132 return data_;
133 } 133 }
134 134
135 private: 135 private:
136 void Notify(EventType event) { 136 void Notify(EventType event) {
137 event_manager_->Notify(event); 137 event_manager_->Notify(event);
138 } 138 }
139 139
140 const scoped_refptr<EventManager> event_manager_; 140 const scoped_refptr<EventManager> event_manager_;
141 scoped_refptr<StreamListenSocket> connection_; 141 scoped_ptr<StreamListenSocket> connection_;
142 base::Lock mutex_; 142 base::Lock mutex_;
143 string data_; 143 string data_;
144 }; 144 };
145 145
146 bool UserCanConnectCallback( 146 bool UserCanConnectCallback(
147 bool allow_user, const scoped_refptr<EventManager>& event_manager, 147 bool allow_user, const scoped_refptr<EventManager>& event_manager,
148 uid_t, gid_t) { 148 uid_t, gid_t) {
149 event_manager->Notify( 149 event_manager->Notify(
150 allow_user ? EVENT_AUTH_GRANTED : EVENT_AUTH_DENIED); 150 allow_user ? EVENT_AUTH_GRANTED : EVENT_AUTH_DENIED);
151 return allow_user; 151 return allow_user;
(...skipping 13 matching lines...) Expand all
165 allow_user_(allow_user) {} 165 allow_user_(allow_user) {}
166 166
167 virtual void SetUp() OVERRIDE { 167 virtual void SetUp() OVERRIDE {
168 event_manager_ = new EventManager(); 168 event_manager_ = new EventManager();
169 socket_delegate_.reset(new TestListenSocketDelegate(event_manager_)); 169 socket_delegate_.reset(new TestListenSocketDelegate(event_manager_));
170 DeleteSocketFile(); 170 DeleteSocketFile();
171 } 171 }
172 172
173 virtual void TearDown() OVERRIDE { 173 virtual void TearDown() OVERRIDE {
174 DeleteSocketFile(); 174 DeleteSocketFile();
175 socket_ = NULL; 175 socket_.reset();
176 socket_delegate_.reset(); 176 socket_delegate_.reset();
177 event_manager_ = NULL; 177 event_manager_ = NULL;
178 } 178 }
179 179
180 UnixDomainSocket::AuthCallback MakeAuthCallback() { 180 UnixDomainSocket::AuthCallback MakeAuthCallback() {
181 return base::Bind(&UserCanConnectCallback, allow_user_, event_manager_); 181 return base::Bind(&UserCanConnectCallback, allow_user_, event_manager_);
182 } 182 }
183 183
184 void DeleteSocketFile() { 184 void DeleteSocketFile() {
185 ASSERT_FALSE(file_path_.empty()); 185 ASSERT_FALSE(file_path_.empty());
(...skipping 28 matching lines...) Expand all
214 FROM_HERE, 214 FROM_HERE,
215 base::Bind(&UnixDomainSocketTestHelper::CreateAndListen, 215 base::Bind(&UnixDomainSocketTestHelper::CreateAndListen,
216 base::Unretained(this))); 216 base::Unretained(this)));
217 return thread.Pass(); 217 return thread.Pass();
218 } 218 }
219 219
220 const base::FilePath file_path_; 220 const base::FilePath file_path_;
221 const bool allow_user_; 221 const bool allow_user_;
222 scoped_refptr<EventManager> event_manager_; 222 scoped_refptr<EventManager> event_manager_;
223 scoped_ptr<TestListenSocketDelegate> socket_delegate_; 223 scoped_ptr<TestListenSocketDelegate> socket_delegate_;
224 scoped_refptr<UnixDomainSocket> socket_; 224 scoped_ptr<UnixDomainSocket> socket_;
225 }; 225 };
226 226
227 class UnixDomainSocketTest : public UnixDomainSocketTestHelper { 227 class UnixDomainSocketTest : public UnixDomainSocketTestHelper {
228 protected: 228 protected:
229 UnixDomainSocketTest() 229 UnixDomainSocketTest()
230 : UnixDomainSocketTestHelper(MakeSocketPath(), true /* allow user */) {} 230 : UnixDomainSocketTestHelper(MakeSocketPath(), true /* allow user */) {}
231 }; 231 };
232 232
233 class UnixDomainSocketTestWithInvalidPath : public UnixDomainSocketTestHelper { 233 class UnixDomainSocketTestWithInvalidPath : public UnixDomainSocketTestHelper {
234 protected: 234 protected:
(...skipping 22 matching lines...) Expand all
257 // Test with an invalid path to make sure that the socket is not backed by a 257 // Test with an invalid path to make sure that the socket is not backed by a
258 // file. 258 // file.
259 TEST_F(UnixDomainSocketTestWithInvalidPath, 259 TEST_F(UnixDomainSocketTestWithInvalidPath,
260 CreateAndListenWithAbstractNamespace) { 260 CreateAndListenWithAbstractNamespace) {
261 socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace( 261 socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace(
262 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); 262 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback());
263 EXPECT_FALSE(socket_.get() == NULL); 263 EXPECT_FALSE(socket_.get() == NULL);
264 } 264 }
265 265
266 TEST_F(UnixDomainSocketTest, TestFallbackName) { 266 TEST_F(UnixDomainSocketTest, TestFallbackName) {
267 scoped_refptr<UnixDomainSocket> existing_socket = 267 scoped_ptr<UnixDomainSocket> existing_socket =
268 UnixDomainSocket::CreateAndListenWithAbstractNamespace( 268 UnixDomainSocket::CreateAndListenWithAbstractNamespace(
269 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); 269 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback());
270 EXPECT_FALSE(existing_socket.get() == NULL); 270 EXPECT_FALSE(existing_socket.get() == NULL);
271 // First, try to bind socket with the same name with no fallback name. 271 // First, try to bind socket with the same name with no fallback name.
272 socket_ = 272 socket_ =
273 UnixDomainSocket::CreateAndListenWithAbstractNamespace( 273 UnixDomainSocket::CreateAndListenWithAbstractNamespace(
274 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback()); 274 file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback());
275 EXPECT_TRUE(socket_.get() == NULL); 275 EXPECT_TRUE(socket_.get() == NULL);
276 // Now with a fallback name. 276 // Now with a fallback name.
277 socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace( 277 socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace(
278 file_path_.value(), 278 file_path_.value(),
279 MakeSocketPath(kFallbackSocketName), 279 MakeSocketPath(kFallbackSocketName),
280 socket_delegate_.get(), 280 socket_delegate_.get(),
281 MakeAuthCallback()); 281 MakeAuthCallback());
282 EXPECT_FALSE(socket_.get() == NULL); 282 EXPECT_FALSE(socket_.get() == NULL);
283 existing_socket = NULL;
284 } 283 }
285 #endif 284 #endif
286 285
287 TEST_F(UnixDomainSocketTest, TestWithClient) { 286 TEST_F(UnixDomainSocketTest, TestWithClient) {
288 const scoped_ptr<base::Thread> server_thread = CreateAndRunServerThread(); 287 const scoped_ptr<base::Thread> server_thread = CreateAndRunServerThread();
289 EventType event = event_manager_->WaitForEvent(); 288 EventType event = event_manager_->WaitForEvent();
290 ASSERT_EQ(EVENT_LISTEN, event); 289 ASSERT_EQ(EVENT_LISTEN, event);
291 290
292 // Create the client socket. 291 // Create the client socket.
293 const SocketDescriptor sock = CreateClientSocket(); 292 const SocketDescriptor sock = CreateClientSocket();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 328
330 // Send() must fail. 329 // Send() must fail.
331 ssize_t ret = HANDLE_EINTR(send(sock, kMsg, sizeof(kMsg), 0)); 330 ssize_t ret = HANDLE_EINTR(send(sock, kMsg, sizeof(kMsg), 0));
332 ASSERT_EQ(-1, ret); 331 ASSERT_EQ(-1, ret);
333 ASSERT_EQ(EPIPE, errno); 332 ASSERT_EQ(EPIPE, errno);
334 ASSERT_FALSE(event_manager_->HasPendingEvent()); 333 ASSERT_FALSE(event_manager_->HasPendingEvent());
335 } 334 }
336 335
337 } // namespace 336 } // namespace
338 } // namespace net 337 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698