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

Side by Side Diff: blimp/net/thread_pipe_manager_unittest.cc

Issue 1933053003: Used oneof in blimp_message.proto (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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 "blimp/common/create_blimp_message.h"
Kevin M 2016/05/02 17:47:48 Move this to the second block of includes; this to
shaktisahu 2016/05/16 20:19:03 Done.
5 #include "blimp/net/thread_pipe_manager.h" 6 #include "blimp/net/thread_pipe_manager.h"
6 7
7 #include "base/location.h" 8 #include "base/location.h"
8 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
9 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
10 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
11 #include "base/threading/sequenced_task_runner_handle.h" 12 #include "base/threading/sequenced_task_runner_handle.h"
12 #include "base/threading/thread.h" 13 #include "base/threading/thread.h"
13 #include "blimp/net/blimp_message_thread_pipe.h" 14 #include "blimp/net/blimp_message_thread_pipe.h"
14 #include "blimp/net/browser_connection_handler.h" 15 #include "blimp/net/browser_connection_handler.h"
15 #include "blimp/net/test_common.h" 16 #include "blimp/net/test_common.h"
16 #include "net/base/net_errors.h" 17 #include "net/base/net_errors.h"
17 #include "net/base/test_completion_callback.h" 18 #include "net/base/test_completion_callback.h"
18 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
20 21
21 using testing::_; 22 using testing::_;
22 using testing::SaveArg; 23 using testing::SaveArg;
23 24
24 namespace blimp { 25 namespace blimp {
25 namespace { 26 namespace {
26 27
27 std::unique_ptr<BlimpMessage> CreateMessage(BlimpMessage::Type type) { 28 std::unique_ptr<BlimpMessage> CreateMessage(BlimpMessage::FeatureCase type) {
28 std::unique_ptr<BlimpMessage> output(new BlimpMessage); 29 std::unique_ptr<BlimpMessage> output(new BlimpMessage);
29 output->set_type(type); 30 SetBlimpMessageType(output.get(), type);
30 return output; 31 return output;
31 } 32 }
32 33
33 // A feature that registers itself with ThreadPipeManager. 34 // A feature that registers itself with ThreadPipeManager.
34 class FakeFeature { 35 class FakeFeature {
35 public: 36 public:
36 FakeFeature(BlimpMessage::Type type, ThreadPipeManager* pipe_manager_) { 37 FakeFeature(BlimpMessage::FeatureCase type,
38 ThreadPipeManager* pipe_manager_) {
37 outgoing_message_processor_ = 39 outgoing_message_processor_ =
38 pipe_manager_->RegisterFeature(type, &incoming_message_processor_); 40 pipe_manager_->RegisterFeature(type, &incoming_message_processor_);
39 } 41 }
40 42
41 ~FakeFeature() {} 43 ~FakeFeature() {}
42 44
43 BlimpMessageProcessor* outgoing_message_processor() { 45 BlimpMessageProcessor* outgoing_message_processor() {
44 return outgoing_message_processor_.get(); 46 return outgoing_message_processor_.get();
45 } 47 }
46 48
47 MockBlimpMessageProcessor* incoming_message_processor() { 49 MockBlimpMessageProcessor* incoming_message_processor() {
48 return &incoming_message_processor_; 50 return &incoming_message_processor_;
49 } 51 }
50 52
51 private: 53 private:
52 testing::StrictMock<MockBlimpMessageProcessor> incoming_message_processor_; 54 testing::StrictMock<MockBlimpMessageProcessor> incoming_message_processor_;
53 std::unique_ptr<BlimpMessageProcessor> outgoing_message_processor_; 55 std::unique_ptr<BlimpMessageProcessor> outgoing_message_processor_;
54 }; 56 };
55 57
56 // A feature peer on |thread_| that forwards incoming messages to 58 // A feature peer on |thread_| that forwards incoming messages to
57 // |message_processor|. 59 // |message_processor|.
58 class FakeFeaturePeer : public BlimpMessageProcessor { 60 class FakeFeaturePeer : public BlimpMessageProcessor {
59 public: 61 public:
60 FakeFeaturePeer(BlimpMessage::Type type, 62 FakeFeaturePeer(BlimpMessage::FeatureCase type,
61 BlimpMessageProcessor* message_processor, 63 BlimpMessageProcessor* message_processor,
62 const scoped_refptr<base::SequencedTaskRunner>& task_runner) 64 const scoped_refptr<base::SequencedTaskRunner>& task_runner)
63 : type_(type), 65 : type_(type),
64 message_processor_(message_processor), 66 message_processor_(message_processor),
65 task_runner_(task_runner) {} 67 task_runner_(task_runner) {}
66 68
67 ~FakeFeaturePeer() override {} 69 ~FakeFeaturePeer() override {}
68 70
69 private: 71 private:
70 void ForwardMessage(std::unique_ptr<BlimpMessage> message) { 72 void ForwardMessage(std::unique_ptr<BlimpMessage> message) {
71 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 73 DCHECK(task_runner_->RunsTasksOnCurrentThread());
72 message_processor_->ProcessMessage(std::move(message), 74 message_processor_->ProcessMessage(std::move(message),
73 net::CompletionCallback()); 75 net::CompletionCallback());
74 } 76 }
75 77
76 // BlimpMessageProcessor implementation. 78 // BlimpMessageProcessor implementation.
77 void ProcessMessage(std::unique_ptr<BlimpMessage> message, 79 void ProcessMessage(std::unique_ptr<BlimpMessage> message,
78 const net::CompletionCallback& callback) override { 80 const net::CompletionCallback& callback) override {
79 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 81 DCHECK(task_runner_->RunsTasksOnCurrentThread());
80 ASSERT_EQ(type_, message->type()); 82 ASSERT_EQ(type_, message->feature_case());
81 base::MessageLoop::current()->PostTask( 83 base::MessageLoop::current()->PostTask(
82 FROM_HERE, base::Bind(&FakeFeaturePeer::ForwardMessage, 84 FROM_HERE, base::Bind(&FakeFeaturePeer::ForwardMessage,
83 base::Unretained(this), base::Passed(&message))); 85 base::Unretained(this), base::Passed(&message)));
84 if (!callback.is_null()) 86 if (!callback.is_null())
85 callback.Run(net::OK); 87 callback.Run(net::OK);
86 } 88 }
87 89
88 BlimpMessage::Type type_; 90 BlimpMessage::FeatureCase type_;
89 BlimpMessageProcessor* message_processor_ = nullptr; 91 BlimpMessageProcessor* message_processor_ = nullptr;
90 scoped_refptr<base::SequencedTaskRunner> task_runner_; 92 scoped_refptr<base::SequencedTaskRunner> task_runner_;
91 }; 93 };
92 94
93 // A browser connection handler that returns FakeFeaturePeer to allow it 95 // A browser connection handler that returns FakeFeaturePeer to allow it
94 // forwarding message back so that FakeFeature can check message it receives 96 // forwarding message back so that FakeFeature can check message it receives
95 // with one it just sent. 97 // with one it just sent.
96 class FakeBrowserConnectionHandler : public BrowserConnectionHandler { 98 class FakeBrowserConnectionHandler : public BrowserConnectionHandler {
97 public: 99 public:
98 FakeBrowserConnectionHandler( 100 FakeBrowserConnectionHandler(
99 const scoped_refptr<base::SequencedTaskRunner>& task_runner) 101 const scoped_refptr<base::SequencedTaskRunner>& task_runner)
100 : task_runner_(task_runner) {} 102 : task_runner_(task_runner) {}
101 std::unique_ptr<BlimpMessageProcessor> RegisterFeature( 103 std::unique_ptr<BlimpMessageProcessor> RegisterFeature(
102 BlimpMessage::Type type, 104 BlimpMessage::FeatureCase type,
103 BlimpMessageProcessor* incoming_processor) override { 105 BlimpMessageProcessor* incoming_processor) override {
104 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 106 DCHECK(task_runner_->RunsTasksOnCurrentThread());
105 return base::WrapUnique( 107 return base::WrapUnique(
106 new FakeFeaturePeer(type, incoming_processor, task_runner_)); 108 new FakeFeaturePeer(type, incoming_processor, task_runner_));
107 } 109 }
108 110
109 private: 111 private:
110 scoped_refptr<base::SequencedTaskRunner> task_runner_; 112 scoped_refptr<base::SequencedTaskRunner> task_runner_;
111 }; 113 };
112 114
113 } // namespace 115 } // namespace
114 116
115 class ThreadPipeManagerTest : public testing::Test { 117 class ThreadPipeManagerTest : public testing::Test {
116 public: 118 public:
117 ThreadPipeManagerTest() : thread_("IoThread") {} 119 ThreadPipeManagerTest() : thread_("IoThread") {}
118 120
119 ~ThreadPipeManagerTest() override {} 121 ~ThreadPipeManagerTest() override {}
120 122
121 void SetUp() override { 123 void SetUp() override {
122 ASSERT_TRUE(thread_.Start()); 124 ASSERT_TRUE(thread_.Start());
123 connection_handler_ = base::WrapUnique( 125 connection_handler_ = base::WrapUnique(
124 new FakeBrowserConnectionHandler(thread_.task_runner())); 126 new FakeBrowserConnectionHandler(thread_.task_runner()));
125 pipe_manager_ = base::WrapUnique(new ThreadPipeManager( 127 pipe_manager_ = base::WrapUnique(new ThreadPipeManager(
126 thread_.task_runner(), base::SequencedTaskRunnerHandle::Get(), 128 thread_.task_runner(), base::SequencedTaskRunnerHandle::Get(),
127 connection_handler_.get())); 129 connection_handler_.get()));
128 130
129 input_feature_.reset( 131 input_feature_.reset(
130 new FakeFeature(BlimpMessage::INPUT, pipe_manager_.get())); 132 new FakeFeature(BlimpMessage::kInput, pipe_manager_.get()));
131 tab_control_feature_.reset( 133 tab_control_feature_.reset(
132 new FakeFeature(BlimpMessage::TAB_CONTROL, pipe_manager_.get())); 134 new FakeFeature(BlimpMessage::kTabControl, pipe_manager_.get()));
133 } 135 }
134 136
135 void TearDown() override { SynchronizeWithThread(); } 137 void TearDown() override { SynchronizeWithThread(); }
136 138
137 // Synchronize with |thread_| to ensure that any pending work is done. 139 // Synchronize with |thread_| to ensure that any pending work is done.
138 void SynchronizeWithThread() { 140 void SynchronizeWithThread() {
139 net::TestCompletionCallback cb; 141 net::TestCompletionCallback cb;
140 thread_.task_runner()->PostTaskAndReply(FROM_HERE, 142 thread_.task_runner()->PostTaskAndReply(FROM_HERE,
141 base::Bind(&base::DoNothing), 143 base::Bind(&base::DoNothing),
142 base::Bind(cb.callback(), net::OK)); 144 base::Bind(cb.callback(), net::OK));
143 ASSERT_EQ(net::OK, cb.WaitForResult()); 145 ASSERT_EQ(net::OK, cb.WaitForResult());
144 } 146 }
145 147
146 protected: 148 protected:
147 base::MessageLoop message_loop_; 149 base::MessageLoop message_loop_;
148 std::unique_ptr<BrowserConnectionHandler> connection_handler_; 150 std::unique_ptr<BrowserConnectionHandler> connection_handler_;
149 std::unique_ptr<ThreadPipeManager> pipe_manager_; 151 std::unique_ptr<ThreadPipeManager> pipe_manager_;
150 base::Thread thread_; 152 base::Thread thread_;
151 153
152 std::unique_ptr<FakeFeature> input_feature_; 154 std::unique_ptr<FakeFeature> input_feature_;
153 std::unique_ptr<FakeFeature> tab_control_feature_; 155 std::unique_ptr<FakeFeature> tab_control_feature_;
154 }; 156 };
155 157
156 // Features send out message and receive the same message due to 158 // Features send out message and receive the same message due to
157 // |FakeFeaturePeer| loops the message back on |thread_|. 159 // |FakeFeaturePeer| loops the message back on |thread_|.
158 TEST_F(ThreadPipeManagerTest, MessageSentIsReceived) { 160 TEST_F(ThreadPipeManagerTest, MessageSentIsReceived) {
159 std::unique_ptr<BlimpMessage> input_message = 161 std::unique_ptr<BlimpMessage> input_message =
160 CreateMessage(BlimpMessage::INPUT); 162 CreateMessage(BlimpMessage::kInput);
161 std::unique_ptr<BlimpMessage> tab_control_message = 163 std::unique_ptr<BlimpMessage> tab_control_message =
162 CreateMessage(BlimpMessage::TAB_CONTROL); 164 CreateMessage(BlimpMessage::kTabControl);
163 165
164 EXPECT_CALL(*(input_feature_->incoming_message_processor()), 166 EXPECT_CALL(*(input_feature_->incoming_message_processor()),
165 MockableProcessMessage(EqualsProto(*input_message), _)) 167 MockableProcessMessage(EqualsProto(*input_message), _))
166 .RetiresOnSaturation(); 168 .RetiresOnSaturation();
167 EXPECT_CALL(*(tab_control_feature_->incoming_message_processor()), 169 EXPECT_CALL(*(tab_control_feature_->incoming_message_processor()),
168 MockableProcessMessage(EqualsProto(*tab_control_message), _)) 170 MockableProcessMessage(EqualsProto(*tab_control_message), _))
169 .RetiresOnSaturation(); 171 .RetiresOnSaturation();
170 172
171 net::TestCompletionCallback cb1; 173 net::TestCompletionCallback cb1;
172 input_feature_->outgoing_message_processor()->ProcessMessage( 174 input_feature_->outgoing_message_processor()->ProcessMessage(
173 std::move(input_message), cb1.callback()); 175 std::move(input_message), cb1.callback());
174 net::TestCompletionCallback cb2; 176 net::TestCompletionCallback cb2;
175 tab_control_feature_->outgoing_message_processor()->ProcessMessage( 177 tab_control_feature_->outgoing_message_processor()->ProcessMessage(
176 std::move(tab_control_message), cb2.callback()); 178 std::move(tab_control_message), cb2.callback());
177 179
178 EXPECT_EQ(net::OK, cb1.WaitForResult()); 180 EXPECT_EQ(net::OK, cb1.WaitForResult());
179 EXPECT_EQ(net::OK, cb2.WaitForResult()); 181 EXPECT_EQ(net::OK, cb2.WaitForResult());
180 } 182 }
181 183
182 } // namespace blimp 184 } // namespace blimp
OLDNEW
« blimp/net/engine_authentication_handler.cc ('K') | « blimp/net/thread_pipe_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698