Index: jingle/glue/chrome_async_socket_unittest.cc |
diff --git a/jingle/glue/chrome_async_socket_unittest.cc b/jingle/glue/chrome_async_socket_unittest.cc |
index db3d2b09c9ffd6a60cf631264b35c08436c4e558..b3c81b1bbc6e11440d0a8ca743c0d127a4c56399 100644 |
--- a/jingle/glue/chrome_async_socket_unittest.cc |
+++ b/jingle/glue/chrome_async_socket_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop/message_loop.h" |
+#include "base/message_loop/message_pump_default.h" |
#include "jingle/glue/resolving_client_socket_factory.h" |
#include "net/base/address_list.h" |
#include "net/base/net_errors.h" |
@@ -143,7 +144,15 @@ |
protected: |
ChromeAsyncSocketTest() |
: ssl_socket_data_provider_(net::ASYNC, net::OK), |
- addr_("localhost", 35) {} |
+ addr_("localhost", 35) { |
+ // GTest death tests execute in a fork()ed but not exec()ed process. |
+ // On OS X a CoreFoundation-backed message loop will exit with a |
+ // __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__ |
+ // when called. |
+ // Explicitly create a MessagePumpDefault which can run in this enivronment. |
+ scoped_ptr<base::MessagePump> pump(new base::MessagePumpDefault()); |
+ message_loop_.reset(new base::MessageLoop(pump.Pass())); |
+ } |
virtual ~ChromeAsyncSocketTest() {} |
@@ -182,7 +191,7 @@ |
virtual void TearDown() { |
// Run any tasks that we forgot to pump. |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectClosed(); |
ExpectNoSignal(); |
chrome_async_socket_.reset(); |
@@ -342,7 +351,7 @@ |
EXPECT_TRUE(chrome_async_socket_->Connect(addr_)); |
ExpectNonErrorState(ChromeAsyncSocket::STATE_CONNECTING); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
// We may not necessarily be open; may have been other events |
// queued up. |
ExpectSignalSocketState( |
@@ -372,7 +381,7 @@ |
EXPECT_EQ(kDummyData, DrainRead(1)); |
EXPECT_TRUE(chrome_async_socket_->StartTls("fakedomain.com")); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSSLConnectSignal(); |
ExpectNoSignal(); |
ExpectNonErrorState(ChromeAsyncSocket::STATE_TLS_OPEN); |
@@ -415,7 +424,7 @@ |
} |
// ChromeAsyncSocket expects a message loop. |
- base::MessageLoop message_loop_; |
+ scoped_ptr<base::MessageLoop> message_loop_; |
AsyncSocketDataProvider async_socket_data_provider_; |
net::SSLSocketDataProvider ssl_socket_data_provider_; |
@@ -510,7 +519,7 @@ |
SignalSocketState::NoError( |
SIGNAL_CLOSE, ChromeAsyncSocket::STATE_CLOSED)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
} |
TEST_F(ChromeAsyncSocketTest, HangingConnect) { |
@@ -532,14 +541,14 @@ |
ExpectNonErrorState(ChromeAsyncSocket::STATE_CONNECTING); |
ExpectNoSignal(); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectNonErrorState(ChromeAsyncSocket::STATE_OPEN); |
ExpectSignalSocketState( |
SignalSocketState::NoError( |
SIGNAL_CONNECT, ChromeAsyncSocket::STATE_OPEN)); |
ExpectNoSignal(); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
DoCloseOpenedNoError(); |
} |
@@ -552,14 +561,14 @@ |
net::MockConnect(net::ASYNC, net::OK)); |
EXPECT_TRUE(chrome_async_socket_->Connect(addr_)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSignalSocketState( |
SignalSocketState::NoError( |
SIGNAL_CONNECT, ChromeAsyncSocket::STATE_OPEN)); |
DoCloseOpenedNoError(); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
} |
TEST_F(ChromeAsyncSocketTest, PendingConnectError) { |
@@ -567,7 +576,7 @@ |
net::MockConnect(net::ASYNC, net::ERR_TIMED_OUT)); |
EXPECT_TRUE(chrome_async_socket_->Connect(addr_)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSignalSocketState( |
SignalSocketState( |
@@ -629,7 +638,7 @@ |
EXPECT_EQ(kReadData, DrainRead(1)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
DoCloseOpenedNoError(); |
} |
@@ -643,7 +652,7 @@ |
EXPECT_EQ(kReadData, DrainRead(1)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
const char kReadData2[] = "mydatatoread2"; |
async_socket_data_provider_.AddRead(net::MockRead(kReadData2)); |
@@ -665,7 +674,7 @@ |
EXPECT_EQ(kReadData, DrainRead(1)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
async_socket_data_provider_.AddRead( |
net::MockRead(net::SYNCHRONOUS, net::ERR_TIMED_OUT)); |
@@ -699,7 +708,7 @@ |
EXPECT_EQ(kReadData, DrainRead(1)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
DoCloseOpenedNoError(); |
} |
@@ -755,12 +764,12 @@ |
DoOpenClosed(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, |
arraysize(kWriteData) - 8)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectNoSignal(); |
@@ -778,12 +787,12 @@ |
net::MockWrite(net::ASYNC, kWriteData + 8, arraysize(kWriteData) - 8)); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, |
arraysize(kWriteData) - 8)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectNoSignal(); |
@@ -801,12 +810,12 @@ |
net::MockWrite(net::ASYNC, net::ERR_TIMED_OUT)); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, |
arraysize(kWriteData) - 8)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSignalSocketState( |
SignalSocketState( |
@@ -874,7 +883,7 @@ |
ExpectReadSignal(); |
EXPECT_TRUE(chrome_async_socket_->StartTls("fakedomain.com")); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSSLConnectSignal(); |
ExpectNoSignal(); |
ExpectNonErrorState(ChromeAsyncSocket::STATE_TLS_OPEN); |
@@ -889,7 +898,7 @@ |
ExpectReadSignal(); |
EXPECT_TRUE(chrome_async_socket_->StartTls("fakedomain.com")); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSSLConnectSignal(); |
ExpectNoSignal(); |
ExpectNonErrorState(ChromeAsyncSocket::STATE_TLS_OPEN); |
@@ -913,7 +922,7 @@ |
ExpectReadSignal(); |
EXPECT_TRUE(chrome_async_socket_->StartTls("fakedomain.com")); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSignalSocketState( |
SignalSocketState( |
SIGNAL_CLOSE, ChromeAsyncSocket::STATE_CLOSED, |
@@ -941,7 +950,7 @@ |
EXPECT_TRUE(chrome_async_socket_->Read(buf, sizeof(buf), &len_read)); |
EXPECT_EQ(0U, len_read); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSSLConnectSignal(); |
ExpectSSLReadSignal(); |
ExpectNoSignal(); |
@@ -972,11 +981,11 @@ |
// TODO(akalin): Figure out how to test that the write happens |
// *after* the SSL connect. |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSSLConnectSignal(); |
ExpectNoSignal(); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
DoSSLCloseOpenedNoError(); |
} |
@@ -1005,7 +1014,7 @@ |
EXPECT_FALSE(chrome_async_socket_->StartTls("fakedomain.com")); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
DoCloseOpened( |
SignalSocketState(SIGNAL_CLOSE, |
@@ -1020,14 +1029,14 @@ |
TEST_F(ChromeAsyncSocketTest, SSLRead) { |
DoSSLOpenClosed(); |
async_socket_data_provider_.AddRead(net::MockRead(kReadData)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectSSLReadSignal(); |
ExpectNoSignal(); |
EXPECT_EQ(kReadData, DrainRead(1)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
DoSSLCloseOpenedNoError(); |
} |
@@ -1043,12 +1052,12 @@ |
DoSSLOpenClosed(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, |
arraysize(kWriteData) - 8)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectNoSignal(); |
@@ -1066,12 +1075,12 @@ |
net::MockWrite(net::ASYNC, kWriteData + 8, arraysize(kWriteData) - 8)); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData, 3)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 3, 5)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
EXPECT_TRUE(chrome_async_socket_->Write(kWriteData + 8, |
arraysize(kWriteData) - 8)); |
- message_loop_.RunUntilIdle(); |
+ message_loop_->RunUntilIdle(); |
ExpectNoSignal(); |