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

Side by Side Diff: media/remoting/rpc/rpc_broker_unittest.cc

Issue 2643253003: Media Remoting Clean-up: Less-redundant naming, style consistency, etc. (Closed)
Patch Set: REBASE Created 3 years, 11 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 | « media/remoting/rpc/rpc_broker.cc ('k') | media/remoting/rpc_broker.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/remoting/rpc/rpc_broker.h"
6
7 #include <memory>
8 #include <vector>
9
10 #include "base/bind.h"
11 #include "base/callback_helpers.h"
12 #include "base/macros.h"
13 #include "base/memory/ref_counted.h"
14 #include "base/message_loop/message_loop.h"
15 #include "base/run_loop.h"
16 #include "media/remoting/remoting_rpc_message.pb.h"
17 #include "testing/gmock/include/gmock/gmock.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19
20 using testing::_;
21 using testing::Invoke;
22 using testing::Return;
23
24 namespace media {
25 namespace remoting {
26
27 class FakeMessageSender {
28 public:
29 FakeMessageSender()
30 : received_rpc_(new pb::RpcMessage()),
31 has_sent_message_(false),
32 send_count_(0),
33 weak_factory_(this) {}
34 ~FakeMessageSender() {}
35
36 void OnSendMessageAndQuit(std::unique_ptr<std::vector<uint8_t>> message) {
37 EXPECT_TRUE(
38 received_rpc_->ParseFromArray(message->data(), message->size()));
39 has_sent_message_ = true;
40 }
41
42 void OnSendMessage(std::unique_ptr<std::vector<uint8_t>> message) {
43 ++send_count_;
44 }
45 base::WeakPtr<FakeMessageSender> GetWeakPtr() {
46 return weak_factory_.GetWeakPtr();
47 }
48 bool has_sent_message() const { return has_sent_message_; }
49 const pb::RpcMessage* received_rpc() const { return received_rpc_.get(); }
50 int send_count() const { return send_count_; }
51
52 private:
53 std::unique_ptr<pb::RpcMessage> received_rpc_;
54 bool has_sent_message_;
55 int send_count_;
56 base::WeakPtrFactory<FakeMessageSender> weak_factory_;
57
58 DISALLOW_COPY_AND_ASSIGN(FakeMessageSender);
59 };
60
61 class FakeMessageReceiver {
62 public:
63 FakeMessageReceiver() : has_received_message_(false), weak_factory_(this) {}
64 ~FakeMessageReceiver() {}
65
66 // RpcBroker::MessageReceiver implementation.
67 void OnReceivedRpc(std::unique_ptr<pb::RpcMessage> message) {
68 received_rpc_ = std::move(message);
69 has_received_message_++;
70 }
71
72 void OnSendMessage(std::unique_ptr<std::vector<uint8_t>> message) {}
73 base::WeakPtr<FakeMessageReceiver> GetWeakPtr() {
74 return weak_factory_.GetWeakPtr();
75 }
76 int has_received_message() const { return has_received_message_; }
77 const pb::RpcMessage* received_rpc() const { return received_rpc_.get(); }
78
79 private:
80 std::unique_ptr<pb::RpcMessage> received_rpc_;
81 int has_received_message_;
82 base::WeakPtrFactory<FakeMessageReceiver> weak_factory_;
83
84 DISALLOW_COPY_AND_ASSIGN(FakeMessageReceiver);
85 };
86
87 class RpcBrokerTest : public testing::Test {
88 protected:
89 void SetUp() override {}
90 };
91
92 TEST_F(RpcBrokerTest, TestProcessMessageFromRemoteRegistered) {
93 std::unique_ptr<FakeMessageReceiver> fake_receiver(new FakeMessageReceiver());
94 ASSERT_FALSE(fake_receiver->has_received_message());
95
96 // Creates receiver RpcBroker and registers FakeMessageReceiver.
97 std::unique_ptr<RpcBroker> rpc_broker(new RpcBroker(base::Bind(
98 &FakeMessageReceiver::OnSendMessage, fake_receiver->GetWeakPtr())));
99
100 int handle = rpc_broker->GetUniqueHandle();
101 const remoting::RpcBroker::ReceiveMessageCallback receive_callback =
102 base::Bind(&FakeMessageReceiver::OnReceivedRpc,
103 fake_receiver->GetWeakPtr());
104 rpc_broker->RegisterMessageReceiverCallback(handle, receive_callback);
105
106 std::unique_ptr<pb::RpcMessage> rpc(new pb::RpcMessage());
107 rpc->set_handle(handle);
108 rpc_broker->ProcessMessageFromRemote(std::move(rpc));
109 ASSERT_EQ(fake_receiver->has_received_message(), 1);
110 }
111
112 TEST_F(RpcBrokerTest, TestProcessMessageFromRemoteUnregistered) {
113 std::unique_ptr<FakeMessageReceiver> fake_receiver(new FakeMessageReceiver());
114 ASSERT_FALSE(fake_receiver->has_received_message());
115
116 // Creates receiver RpcBroker and registers FakeMessageReceiver.
117 std::unique_ptr<RpcBroker> rpc_broker(new RpcBroker(base::Bind(
118 &FakeMessageReceiver::OnSendMessage, fake_receiver->GetWeakPtr())));
119
120 int handle = rpc_broker->GetUniqueHandle();
121 const remoting::RpcBroker::ReceiveMessageCallback receive_callback =
122 base::Bind(&FakeMessageReceiver::OnReceivedRpc,
123 fake_receiver->GetWeakPtr());
124 rpc_broker->RegisterMessageReceiverCallback(handle, receive_callback);
125
126 std::unique_ptr<pb::RpcMessage> rpc(new pb::RpcMessage());
127 rpc_broker->UnregisterMessageReceiverCallback(handle);
128 rpc_broker->ProcessMessageFromRemote(std::move(rpc));
129 ASSERT_EQ(fake_receiver->has_received_message(), 0);
130 }
131
132 TEST_F(RpcBrokerTest, TestSendMessageToRemote) {
133 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
134
135 std::unique_ptr<FakeMessageSender> fake_sender(new FakeMessageSender());
136 ASSERT_FALSE(fake_sender->has_sent_message());
137
138 // Creates RpcBroker and set message callback.
139 std::unique_ptr<RpcBroker> rpc_broker(new RpcBroker(base::Bind(
140 &FakeMessageSender::OnSendMessage, fake_sender->GetWeakPtr())));
141
142 for (int i = 0; i < 10; ++i) {
143 std::unique_ptr<pb::RpcMessage> rpc(new pb::RpcMessage());
144 rpc_broker->SendMessageToRemote(std::move(rpc));
145 }
146 EXPECT_EQ(10, fake_sender->send_count());
147 }
148
149 TEST_F(RpcBrokerTest, RpcBrokerSendMessageCallback) {
150 std::unique_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
151
152 std::unique_ptr<FakeMessageSender> fake_sender(new FakeMessageSender());
153 ASSERT_FALSE(fake_sender->has_sent_message());
154
155 // Creates RpcBroker and set message callback.
156 std::unique_ptr<RpcBroker> rpc_broker(new RpcBroker(base::Bind(
157 &FakeMessageSender::OnSendMessageAndQuit, fake_sender->GetWeakPtr())));
158
159 // Sends RPC message.
160 std::unique_ptr<pb::RpcMessage> sent_rpc(new pb::RpcMessage());
161 sent_rpc->set_handle(2);
162 sent_rpc->set_proc(pb::RpcMessage::RPC_R_SETVOLUME);
163 sent_rpc->set_double_value(2.2);
164 rpc_broker->SendMessageToRemote(std::move(sent_rpc));
165
166 // Wait for messge callback.
167 // message_loop->Run();
168 base::RunLoop().RunUntilIdle();
169
170 // Check if received message is identical to the one sent earlier.
171 ASSERT_TRUE(fake_sender->has_sent_message());
172 const auto* received_rpc = fake_sender->received_rpc();
173 ASSERT_EQ(2, received_rpc->handle());
174 ASSERT_EQ(pb::RpcMessage::RPC_R_SETVOLUME, received_rpc->proc());
175 ASSERT_EQ(2.2, received_rpc->double_value());
176 }
177
178 TEST_F(RpcBrokerTest, RpcBrokerProcessMessageWithRegisteredHandle) {
179 std::unique_ptr<FakeMessageReceiver> fake_receiver(new FakeMessageReceiver());
180 ASSERT_FALSE(fake_receiver->has_received_message());
181
182 // Creates receiver RpcBroker and registers FakeMessageReceiver.
183 std::unique_ptr<RpcBroker> rpc_broker(new RpcBroker(base::Bind(
184 &FakeMessageReceiver::OnSendMessage, fake_receiver->GetWeakPtr())));
185 int handle = rpc_broker->GetUniqueHandle();
186 const remoting::RpcBroker::ReceiveMessageCallback receive_callback =
187 base::Bind(&FakeMessageReceiver::OnReceivedRpc,
188 fake_receiver->GetWeakPtr());
189 rpc_broker->RegisterMessageReceiverCallback(handle, receive_callback);
190
191 // Generates RPC message with handle value |handle| and send it to receover
192 // RpcBroker to process.
193 std::unique_ptr<pb::RpcMessage> sent_rpc(new pb::RpcMessage());
194 sent_rpc->set_handle(handle);
195 sent_rpc->set_proc(pb::RpcMessage::RPC_R_SETVOLUME);
196 sent_rpc->set_double_value(2.2);
197 rpc_broker->ProcessMessageFromRemote(std::move(sent_rpc));
198
199 // Checks if received message is identical to the one sent earlier.
200 ASSERT_TRUE(fake_receiver->has_received_message());
201 auto* received_rpc = fake_receiver->received_rpc();
202 ASSERT_EQ(handle, received_rpc->handle());
203 ASSERT_EQ(pb::RpcMessage::RPC_R_SETVOLUME, received_rpc->proc());
204 ASSERT_EQ(2.2, received_rpc->double_value());
205
206 // Unregisters FakeMessageReceiver.
207 rpc_broker->UnregisterMessageReceiverCallback(handle);
208 }
209
210 TEST_F(RpcBrokerTest, RpcBrokerProcessMessageWithUnregisteredHandle) {
211 std::unique_ptr<FakeMessageReceiver> fake_receiver(new FakeMessageReceiver());
212 ASSERT_FALSE(fake_receiver->has_received_message());
213
214 // Creates receiver RpcBroker and registers FakeMessageReceiver.
215 std::unique_ptr<RpcBroker> rpc_broker(new RpcBroker(base::Bind(
216 &FakeMessageReceiver::OnSendMessage, fake_receiver->GetWeakPtr())));
217 int handle = rpc_broker->GetUniqueHandle();
218 const remoting::RpcBroker::ReceiveMessageCallback receive_callback =
219 base::Bind(&FakeMessageReceiver::OnReceivedRpc,
220 fake_receiver->GetWeakPtr());
221 rpc_broker->RegisterMessageReceiverCallback(handle, receive_callback);
222
223 // Generates RPC message with handle value |handle| and send it to receover
224 // RpcBroker to process.
225 std::unique_ptr<pb::RpcMessage> sent_rpc(new pb::RpcMessage());
226 int different_handle = handle + 1;
227 sent_rpc->set_handle(different_handle);
228 sent_rpc->set_proc(pb::RpcMessage::RPC_R_SETVOLUME);
229 sent_rpc->set_double_value(2.2);
230 rpc_broker->ProcessMessageFromRemote(std::move(sent_rpc));
231
232 // Check if received message is identical to the one sent earlier.
233 ASSERT_FALSE(fake_receiver->has_received_message());
234
235 // Unregisters FakeMessageReceiver.
236 rpc_broker->UnregisterMessageReceiverCallback(handle);
237 }
238
239 } // namespace remoting
240 } // namespace media
OLDNEW
« no previous file with comments | « media/remoting/rpc/rpc_broker.cc ('k') | media/remoting/rpc_broker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698