Index: mojo/services/network/udp_socket_apptest.cc |
diff --git a/mojo/services/network/udp_socket_apptest.cc b/mojo/services/network/udp_socket_apptest.cc |
index 86f3387a6232f30fda270f1b17020a5d36a42773..9c783f604910e7186c9a84d89595c840152bf1aa 100644 |
--- a/mojo/services/network/udp_socket_apptest.cc |
+++ b/mojo/services/network/udp_socket_apptest.cc |
@@ -129,6 +129,42 @@ class TestCallback : public TestCallbackBase<Callback<void(NetworkErrorPtr)>> { |
NetworkErrorPtr result_; |
}; |
+class TestCallbackWithAddressAndReceiver |
+ : public TestCallbackBase< |
+ Callback<void(NetworkErrorPtr, |
+ NetAddressPtr, |
+ InterfaceRequest<UDPSocketReceiver>)>> { |
+ public: |
+ TestCallbackWithAddressAndReceiver() { Initialize(new State()); } |
+ ~TestCallbackWithAddressAndReceiver() {} |
+ |
+ const NetworkErrorPtr& result() const { return result_; } |
+ const NetAddressPtr& net_address() const { return net_address_; } |
+ InterfaceRequest<UDPSocketReceiver>& receiver() { return receiver_; } |
+ |
+ private: |
+ struct State : public StateBase { |
+ ~State() override {} |
+ |
+ void Run(NetworkErrorPtr result, |
+ NetAddressPtr net_address, |
+ InterfaceRequest<UDPSocketReceiver> receiver) const override { |
+ if (test_callback_) { |
+ TestCallbackWithAddressAndReceiver* callback = |
+ static_cast<TestCallbackWithAddressAndReceiver*>(test_callback_); |
+ callback->result_ = result.Pass(); |
+ callback->net_address_ = net_address.Pass(); |
+ callback->receiver_ = receiver.Pass(); |
+ } |
+ NotifyRun(); |
+ } |
+ }; |
+ |
+ NetworkErrorPtr result_; |
+ NetAddressPtr net_address_; |
+ InterfaceRequest<UDPSocketReceiver> receiver_; |
+}; |
+ |
class TestCallbackWithAddress |
: public TestCallbackBase<Callback<void(NetworkErrorPtr, NetAddressPtr)>> { |
public: |
@@ -228,11 +264,11 @@ struct ReceiveResult { |
Array<uint8_t> data; |
}; |
-class UDPSocketClientImpl : public UDPSocketClient { |
+class UDPSocketReceiverImpl : public UDPSocketReceiver { |
public: |
- UDPSocketClientImpl() : run_loop_(nullptr), expected_receive_count_(0) {} |
+ UDPSocketReceiverImpl() : run_loop_(nullptr), expected_receive_count_(0) {} |
- ~UDPSocketClientImpl() override { |
+ ~UDPSocketReceiverImpl() override { |
while (!results_.empty()) { |
delete results_.front(); |
results_.pop(); |
@@ -275,12 +311,12 @@ class UDPSocketClientImpl : public UDPSocketClient { |
std::queue<ReceiveResult*> results_; |
size_t expected_receive_count_; |
- DISALLOW_COPY_AND_ASSIGN(UDPSocketClientImpl); |
+ DISALLOW_COPY_AND_ASSIGN(UDPSocketReceiverImpl); |
}; |
class UDPSocketAppTest : public test::ApplicationTestBase { |
public: |
- UDPSocketAppTest() {} |
+ UDPSocketAppTest() : receiver_binding_(&receiver_) {} |
~UDPSocketAppTest() override {} |
void SetUp() override { |
@@ -291,13 +327,13 @@ class UDPSocketAppTest : public test::ApplicationTestBase { |
connection->ConnectToService(&network_service_); |
network_service_->CreateUDPSocket(GetProxy(&socket_)); |
- socket_.set_client(&receiver_); |
} |
protected: |
NetworkServicePtr network_service_; |
UDPSocketPtr socket_; |
- UDPSocketClientImpl receiver_; |
+ UDPSocketReceiverImpl receiver_; |
+ Binding<UDPSocketReceiver> receiver_binding_; |
DISALLOW_COPY_AND_ASSIGN(UDPSocketAppTest); |
}; |
@@ -322,7 +358,7 @@ TEST_F(UDPSocketAppTest, Settings) { |
callback3.WaitForResult(); |
EXPECT_NE(net::OK, callback3.result()->code); |
- TestCallbackWithAddress callback4; |
+ TestCallbackWithAddressAndReceiver callback4; |
socket_->Bind(GetLocalHostWithAnyPort(), callback4.callback()); |
callback4.WaitForResult(); |
EXPECT_EQ(net::OK, callback4.result()->code); |
@@ -356,18 +392,20 @@ TEST_F(UDPSocketAppTest, Settings) { |
} |
TEST_F(UDPSocketAppTest, TestReadWrite) { |
- TestCallbackWithAddress callback1; |
+ TestCallbackWithAddressAndReceiver callback1; |
socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback()); |
callback1.WaitForResult(); |
ASSERT_EQ(net::OK, callback1.result()->code); |
ASSERT_NE(0u, callback1.net_address()->ipv4->port); |
+ receiver_binding_.Bind(callback1.receiver().Pass()); |
+ |
NetAddressPtr server_addr = callback1.net_address().Clone(); |
UDPSocketPtr client_socket; |
network_service_->CreateUDPSocket(GetProxy(&client_socket)); |
- TestCallbackWithAddress callback2; |
+ TestCallbackWithAddressAndReceiver callback2; |
client_socket->Bind(GetLocalHostWithAnyPort(), callback2.callback()); |
callback2.WaitForResult(); |
ASSERT_EQ(net::OK, callback2.result()->code); |
@@ -402,25 +440,29 @@ TEST_F(UDPSocketAppTest, TestReadWrite) { |
} |
TEST_F(UDPSocketAppTest, TestConnectedReadWrite) { |
- TestCallbackWithAddress callback1; |
+ TestCallbackWithAddressAndReceiver callback1; |
socket_->Bind(GetLocalHostWithAnyPort(), callback1.callback()); |
callback1.WaitForResult(); |
ASSERT_EQ(net::OK, callback1.result()->code); |
ASSERT_NE(0u, callback1.net_address()->ipv4->port); |
+ receiver_binding_.Bind(callback1.receiver().Pass()); |
+ |
NetAddressPtr server_addr = callback1.net_address().Clone(); |
UDPSocketPtr client_socket; |
network_service_->CreateUDPSocket(GetProxy(&client_socket)); |
- UDPSocketClientImpl client_socket_receiver; |
- client_socket.set_client(&client_socket_receiver); |
- TestCallbackWithAddress callback2; |
+ TestCallbackWithAddressAndReceiver callback2; |
client_socket->Connect(server_addr.Clone(), callback2.callback()); |
callback2.WaitForResult(); |
ASSERT_EQ(net::OK, callback2.result()->code); |
ASSERT_NE(0u, callback2.net_address()->ipv4->port); |
+ UDPSocketReceiverImpl client_socket_receiver; |
+ Binding<UDPSocketReceiver> client_receiver_binding( |
+ &client_socket_receiver, callback2.receiver().Pass()); |
+ |
NetAddressPtr client_addr = callback2.net_address().Clone(); |
const size_t kDatagramCount = 6; |