| Index: net/socket/unix_domain_socket_posix_unittest.cc
|
| diff --git a/net/socket/unix_domain_socket_posix_unittest.cc b/net/socket/unix_domain_socket_posix_unittest.cc
|
| index b1857e62e0e19df8f1d226def89fc954d4f8f951..2bd133830520a0fea351ffca9784dd2e73bd5abd 100644
|
| --- a/net/socket/unix_domain_socket_posix_unittest.cc
|
| +++ b/net/socket/unix_domain_socket_posix_unittest.cc
|
| @@ -2,6 +2,8 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "net/socket/unix_domain_socket_posix.h"
|
| +
|
| #include <errno.h>
|
| #include <fcntl.h>
|
| #include <poll.h>
|
| @@ -21,6 +23,7 @@
|
| #include "base/compiler_specific.h"
|
| #include "base/file_util.h"
|
| #include "base/files/file_path.h"
|
| +#include "base/files/scoped_temp_dir.h"
|
| #include "base/memory/ref_counted.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/message_loop/message_loop.h"
|
| @@ -30,7 +33,6 @@
|
| #include "base/threading/platform_thread.h"
|
| #include "base/threading/thread.h"
|
| #include "net/socket/socket_descriptor.h"
|
| -#include "net/socket/unix_domain_socket_posix.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| using std::queue;
|
| @@ -52,16 +54,6 @@ enum EventType {
|
| EVENT_READ,
|
| };
|
|
|
| -string MakeSocketPath(const string& socket_file_name) {
|
| - base::FilePath temp_dir;
|
| - base::GetTempDir(&temp_dir);
|
| - return temp_dir.Append(socket_file_name).value();
|
| -}
|
| -
|
| -string MakeSocketPath() {
|
| - return MakeSocketPath(kSocketFilename);
|
| -}
|
| -
|
| class EventManager : public base::RefCounted<EventManager> {
|
| public:
|
| EventManager() : condition_(&mutex_) {}
|
| @@ -151,41 +143,46 @@ bool UserCanConnectCallback(
|
| return allow_user;
|
| }
|
|
|
| -class UnixDomainSocketTestHelper : public testing::Test {
|
| +class UnixDomainListenSocketTestHelper : public testing::Test {
|
| public:
|
| void CreateAndListen() {
|
| - socket_ = UnixDomainSocket::CreateAndListen(
|
| + socket_ = UnixDomainListenSocket::CreateAndListen(
|
| file_path_.value(), socket_delegate_.get(), MakeAuthCallback());
|
| socket_delegate_->OnListenCompleted();
|
| }
|
|
|
| protected:
|
| - UnixDomainSocketTestHelper(const string& path, bool allow_user)
|
| - : file_path_(path),
|
| - allow_user_(allow_user) {}
|
| + UnixDomainListenSocketTestHelper(const string& path_str, bool allow_user)
|
| + : allow_user_(allow_user) {
|
| + file_path_ = base::FilePath(path_str);
|
| + if (!file_path_.IsAbsolute()) {
|
| + EXPECT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| + file_path_ = GetTempSocketPath(file_path_.value());
|
| + }
|
| + // Beware that if path_str is an absolute path, this class doesn't delete
|
| + // the file. It must be an invalid path and cannot be created by unittests.
|
| + }
|
| +
|
| + base::FilePath GetTempSocketPath(const std::string socket_name) {
|
| + DCHECK(temp_dir_.IsValid());
|
| + return temp_dir_.path().Append(socket_name);
|
| + }
|
|
|
| virtual void SetUp() OVERRIDE {
|
| event_manager_ = new EventManager();
|
| socket_delegate_.reset(new TestListenSocketDelegate(event_manager_));
|
| - DeleteSocketFile();
|
| }
|
|
|
| virtual void TearDown() OVERRIDE {
|
| - DeleteSocketFile();
|
| socket_.reset();
|
| socket_delegate_.reset();
|
| event_manager_ = NULL;
|
| }
|
|
|
| - UnixDomainSocket::AuthCallback MakeAuthCallback() {
|
| + UnixDomainListenSocket::AuthCallback MakeAuthCallback() {
|
| return base::Bind(&UserCanConnectCallback, allow_user_, event_manager_);
|
| }
|
|
|
| - void DeleteSocketFile() {
|
| - ASSERT_FALSE(file_path_.empty());
|
| - base::DeleteFile(file_path_, false /* not recursive */);
|
| - }
|
| -
|
| SocketDescriptor CreateClientSocket() {
|
| const SocketDescriptor sock = CreatePlatformSocket(PF_UNIX, SOCK_STREAM, 0);
|
| if (sock < 0) {
|
| @@ -199,7 +196,7 @@ class UnixDomainSocketTestHelper : public testing::Test {
|
| strncpy(addr.sun_path, file_path_.value().c_str(), sizeof(addr.sun_path));
|
| addr_len = sizeof(sockaddr_un);
|
| if (connect(sock, reinterpret_cast<sockaddr*>(&addr), addr_len) != 0) {
|
| - LOG(ERROR) << "connect() error";
|
| + LOG(ERROR) << "connect() error: errno=" << errno;
|
| return kInvalidSocket;
|
| }
|
| return sock;
|
| @@ -212,43 +209,48 @@ class UnixDomainSocketTestHelper : public testing::Test {
|
| thread->StartWithOptions(options);
|
| thread->message_loop()->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&UnixDomainSocketTestHelper::CreateAndListen,
|
| + base::Bind(&UnixDomainListenSocketTestHelper::CreateAndListen,
|
| base::Unretained(this)));
|
| return thread.Pass();
|
| }
|
|
|
| - const base::FilePath file_path_;
|
| + base::ScopedTempDir temp_dir_;
|
| + base::FilePath file_path_;
|
| const bool allow_user_;
|
| scoped_refptr<EventManager> event_manager_;
|
| scoped_ptr<TestListenSocketDelegate> socket_delegate_;
|
| - scoped_ptr<UnixDomainSocket> socket_;
|
| + scoped_ptr<UnixDomainListenSocket> socket_;
|
| };
|
|
|
| -class UnixDomainSocketTest : public UnixDomainSocketTestHelper {
|
| +class UnixDomainListenSocketTest : public UnixDomainListenSocketTestHelper {
|
| protected:
|
| - UnixDomainSocketTest()
|
| - : UnixDomainSocketTestHelper(MakeSocketPath(), true /* allow user */) {}
|
| + UnixDomainListenSocketTest()
|
| + : UnixDomainListenSocketTestHelper(kSocketFilename,
|
| + true /* allow user */) {}
|
| };
|
|
|
| -class UnixDomainSocketTestWithInvalidPath : public UnixDomainSocketTestHelper {
|
| +class UnixDomainListenSocketTestWithInvalidPath
|
| + : public UnixDomainListenSocketTestHelper {
|
| protected:
|
| - UnixDomainSocketTestWithInvalidPath()
|
| - : UnixDomainSocketTestHelper(kInvalidSocketPath, true) {}
|
| + UnixDomainListenSocketTestWithInvalidPath()
|
| + : UnixDomainListenSocketTestHelper(kInvalidSocketPath, true) {}
|
| };
|
|
|
| -class UnixDomainSocketTestWithForbiddenUser
|
| - : public UnixDomainSocketTestHelper {
|
| +class UnixDomainListenSocketTestWithForbiddenUser
|
| + : public UnixDomainListenSocketTestHelper {
|
| protected:
|
| - UnixDomainSocketTestWithForbiddenUser()
|
| - : UnixDomainSocketTestHelper(MakeSocketPath(), false /* forbid user */) {}
|
| + UnixDomainListenSocketTestWithForbiddenUser()
|
| + : UnixDomainListenSocketTestHelper(kSocketFilename,
|
| + false /* forbid user */) {}
|
| };
|
|
|
| -TEST_F(UnixDomainSocketTest, CreateAndListen) {
|
| +TEST_F(UnixDomainListenSocketTest, CreateAndListen) {
|
| CreateAndListen();
|
| EXPECT_FALSE(socket_.get() == NULL);
|
| }
|
|
|
| -TEST_F(UnixDomainSocketTestWithInvalidPath, CreateAndListenWithInvalidPath) {
|
| +TEST_F(UnixDomainListenSocketTestWithInvalidPath,
|
| + CreateAndListenWithInvalidPath) {
|
| CreateAndListen();
|
| EXPECT_TRUE(socket_.get() == NULL);
|
| }
|
| @@ -256,35 +258,35 @@ TEST_F(UnixDomainSocketTestWithInvalidPath, CreateAndListenWithInvalidPath) {
|
| #ifdef SOCKET_ABSTRACT_NAMESPACE_SUPPORTED
|
| // Test with an invalid path to make sure that the socket is not backed by a
|
| // file.
|
| -TEST_F(UnixDomainSocketTestWithInvalidPath,
|
| +TEST_F(UnixDomainListenSocketTestWithInvalidPath,
|
| CreateAndListenWithAbstractNamespace) {
|
| - socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace(
|
| + socket_ = UnixDomainListenSocket::CreateAndListenWithAbstractNamespace(
|
| file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback());
|
| EXPECT_FALSE(socket_.get() == NULL);
|
| }
|
|
|
| -TEST_F(UnixDomainSocketTest, TestFallbackName) {
|
| - scoped_ptr<UnixDomainSocket> existing_socket =
|
| - UnixDomainSocket::CreateAndListenWithAbstractNamespace(
|
| +TEST_F(UnixDomainListenSocketTest, TestFallbackName) {
|
| + scoped_ptr<UnixDomainListenSocket> existing_socket =
|
| + UnixDomainListenSocket::CreateAndListenWithAbstractNamespace(
|
| file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback());
|
| EXPECT_FALSE(existing_socket.get() == NULL);
|
| // First, try to bind socket with the same name with no fallback name.
|
| socket_ =
|
| - UnixDomainSocket::CreateAndListenWithAbstractNamespace(
|
| + UnixDomainListenSocket::CreateAndListenWithAbstractNamespace(
|
| file_path_.value(), "", socket_delegate_.get(), MakeAuthCallback());
|
| EXPECT_TRUE(socket_.get() == NULL);
|
| // Now with a fallback name.
|
| const char kFallbackSocketName[] = "unix_domain_socket_for_testing_2";
|
| - socket_ = UnixDomainSocket::CreateAndListenWithAbstractNamespace(
|
| + socket_ = UnixDomainListenSocket::CreateAndListenWithAbstractNamespace(
|
| file_path_.value(),
|
| - MakeSocketPath(kFallbackSocketName),
|
| + GetTempSocketPath(kFallbackSocketName).value(),
|
| socket_delegate_.get(),
|
| MakeAuthCallback());
|
| EXPECT_FALSE(socket_.get() == NULL);
|
| }
|
| #endif
|
|
|
| -TEST_F(UnixDomainSocketTest, TestWithClient) {
|
| +TEST_F(UnixDomainListenSocketTest, TestWithClient) {
|
| const scoped_ptr<base::Thread> server_thread = CreateAndRunServerThread();
|
| EventType event = event_manager_->WaitForEvent();
|
| ASSERT_EQ(EVENT_LISTEN, event);
|
| @@ -311,7 +313,7 @@ TEST_F(UnixDomainSocketTest, TestWithClient) {
|
| ASSERT_EQ(EVENT_CLOSE, event);
|
| }
|
|
|
| -TEST_F(UnixDomainSocketTestWithForbiddenUser, TestWithForbiddenUser) {
|
| +TEST_F(UnixDomainListenSocketTestWithForbiddenUser, TestWithForbiddenUser) {
|
| const scoped_ptr<base::Thread> server_thread = CreateAndRunServerThread();
|
| EventType event = event_manager_->WaitForEvent();
|
| ASSERT_EQ(EVENT_LISTEN, event);
|
|
|