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

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

Issue 2236093002: Decouple Blimp transport output from BlimpConnections using MessagePort. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@statistics-singleton
Patch Set: Created 4 years, 4 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/net/blimp_connection.h" 5 #include "blimp/net/blimp_connection.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <string> 9 #include <string>
10 #include <utility>
10 11
11 #include "base/callback_helpers.h" 12 #include "base/callback_helpers.h"
12 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
13 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
14 #include "blimp/common/create_blimp_message.h" 15 #include "blimp/common/create_blimp_message.h"
15 #include "blimp/common/proto/blimp_message.pb.h" 16 #include "blimp/common/proto/blimp_message.pb.h"
16 #include "blimp/net/common.h" 17 #include "blimp/net/common.h"
17 #include "blimp/net/connection_error_observer.h" 18 #include "blimp/net/connection_error_observer.h"
19 #include "blimp/net/message_port.h"
18 #include "blimp/net/test_common.h" 20 #include "blimp/net/test_common.h"
19 #include "net/base/completion_callback.h" 21 #include "net/base/completion_callback.h"
20 #include "net/base/io_buffer.h" 22 #include "net/base/io_buffer.h"
21 #include "net/base/net_errors.h" 23 #include "net/base/net_errors.h"
22 #include "net/base/test_completion_callback.h" 24 #include "net/base/test_completion_callback.h"
23 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
25 27
26 using testing::_; 28 using testing::_;
27 using testing::InSequence; 29 using testing::InSequence;
28 using testing::Return; 30 using testing::Return;
29 using testing::SaveArg; 31 using testing::SaveArg;
30 32
31 namespace blimp { 33 namespace blimp {
32 namespace { 34 namespace {
33 35
34 class BlimpConnectionTest : public testing::Test { 36 class BlimpConnectionTest : public testing::Test {
35 public: 37 public:
36 BlimpConnectionTest() { 38 BlimpConnectionTest() {
37 std::unique_ptr<testing::StrictMock<MockPacketWriter>> writer( 39 std::unique_ptr<MockPacketReader> mock_reader(new MockPacketReader);
38 new testing::StrictMock<MockPacketWriter>); 40 std::unique_ptr<MockPacketWriter> mock_writer(new MockPacketWriter);
39 writer_ = writer.get(); 41 mock_reader_ = mock_reader.get();
40 std::unique_ptr<testing::StrictMock<MockPacketReader>> reader( 42 mock_writer_ = mock_writer.get();
41 new testing::StrictMock<MockPacketReader>); 43 connection_ =
42 reader_ = reader.get(); 44 base::MakeUnique<BlimpConnection>(base::MakeUnique<MessagePort>(
43 connection_.reset( 45 std::move(mock_reader), std::move(mock_writer)));
44 new BlimpConnection(std::move(reader), std::move(writer))); 46
45 connection_->AddConnectionErrorObserver(&error_observer1_); 47 connection_->AddConnectionErrorObserver(&error_observer1_);
46 connection_->AddConnectionErrorObserver(&error_observer2_); 48 connection_->AddConnectionErrorObserver(&error_observer2_);
47 connection_->AddConnectionErrorObserver(&error_observer3_); 49 connection_->AddConnectionErrorObserver(&error_observer3_);
48 connection_->RemoveConnectionErrorObserver(&error_observer3_); 50 connection_->RemoveConnectionErrorObserver(&error_observer3_);
49 } 51 }
50 52
51 ~BlimpConnectionTest() override {} 53 ~BlimpConnectionTest() override {}
52 54
53 void DropConnection() { connection_.reset(); } 55 void DropConnection() { connection_.reset(); }
54 56
55 protected: 57 protected:
56 std::unique_ptr<BlimpMessage> CreateInputMessage() { 58 std::unique_ptr<BlimpMessage> CreateInputMessage() {
57 InputMessage* input; 59 InputMessage* input;
58 return CreateBlimpMessage(&input); 60 return CreateBlimpMessage(&input);
59 } 61 }
60 62
61 std::unique_ptr<BlimpMessage> CreateControlMessage() { 63 std::unique_ptr<BlimpMessage> CreateControlMessage() {
62 TabControlMessage* control; 64 TabControlMessage* control;
63 return CreateBlimpMessage(&control); 65 return CreateBlimpMessage(&control);
64 } 66 }
65 67
66 base::MessageLoop message_loop_; 68 base::MessageLoop message_loop_;
67 testing::StrictMock<MockPacketReader>* reader_; 69 MockPacketReader* mock_reader_;
68 testing::StrictMock<MockPacketWriter>* writer_; 70 MockPacketWriter* mock_writer_;
69 testing::StrictMock<MockConnectionErrorObserver> error_observer1_; 71 testing::StrictMock<MockConnectionErrorObserver> error_observer1_;
70 testing::StrictMock<MockConnectionErrorObserver> error_observer2_; 72 testing::StrictMock<MockConnectionErrorObserver> error_observer2_;
71 73
72 // This error observer is Removed() immediately after it's added; 74 // This error observer is Removed() immediately after it's added;
73 // it should never be called. 75 // it should never be called.
74 testing::StrictMock<MockConnectionErrorObserver> error_observer3_; 76 testing::StrictMock<MockConnectionErrorObserver> error_observer3_;
75 77
76 testing::StrictMock<MockBlimpMessageProcessor> receiver_; 78 testing::StrictMock<MockBlimpMessageProcessor> receiver_;
77 std::unique_ptr<BlimpConnection> connection_; 79 std::unique_ptr<BlimpConnection> connection_;
78 }; 80 };
79 81
80 // Write completes writing two packets asynchronously. 82 // Write completes writing two packets asynchronously.
81 TEST_F(BlimpConnectionTest, AsyncTwoPacketsWrite) { 83 TEST_F(BlimpConnectionTest, AsyncTwoPacketsWrite) {
82 net::CompletionCallback write_packet_cb; 84 net::CompletionCallback write_packet_cb;
83 85
84 InSequence s; 86 InSequence s;
85 EXPECT_CALL(*writer_, 87 EXPECT_CALL(*mock_writer_,
86 WritePacket(BufferEqualsProto(*CreateInputMessage()), _)) 88 WritePacket(BufferEqualsProto(*CreateInputMessage()), _))
87 .WillOnce(SaveArg<1>(&write_packet_cb)) 89 .WillOnce(SaveArg<1>(&write_packet_cb))
88 .RetiresOnSaturation(); 90 .RetiresOnSaturation();
89 EXPECT_CALL(*writer_, 91 EXPECT_CALL(*mock_writer_,
90 WritePacket(BufferEqualsProto(*CreateControlMessage()), _)) 92 WritePacket(BufferEqualsProto(*CreateControlMessage()), _))
91 .WillOnce(SaveArg<1>(&write_packet_cb)) 93 .WillOnce(SaveArg<1>(&write_packet_cb))
92 .RetiresOnSaturation(); 94 .RetiresOnSaturation();
93 EXPECT_CALL(error_observer1_, OnConnectionError(_)).Times(0); 95 EXPECT_CALL(error_observer1_, OnConnectionError(_)).Times(0);
94 EXPECT_CALL(error_observer2_, OnConnectionError(_)).Times(0); 96 EXPECT_CALL(error_observer2_, OnConnectionError(_)).Times(0);
95 EXPECT_CALL(error_observer3_, OnConnectionError(_)).Times(0); 97 EXPECT_CALL(error_observer3_, OnConnectionError(_)).Times(0);
96 98
97 BlimpMessageProcessor* sender = connection_->GetOutgoingMessageProcessor(); 99 BlimpMessageProcessor* sender = connection_->GetOutgoingMessageProcessor();
98 net::TestCompletionCallback complete_cb_1; 100 net::TestCompletionCallback complete_cb_1;
99 ASSERT_TRUE(write_packet_cb.is_null()); 101 ASSERT_TRUE(write_packet_cb.is_null());
(...skipping 11 matching lines...) Expand all
111 base::ResetAndReturn(&write_packet_cb).Run(net::OK); 113 base::ResetAndReturn(&write_packet_cb).Run(net::OK);
112 EXPECT_EQ(net::OK, complete_cb_2.WaitForResult()); 114 EXPECT_EQ(net::OK, complete_cb_2.WaitForResult());
113 } 115 }
114 116
115 // Writer completes writing two packets asynchronously. 117 // Writer completes writing two packets asynchronously.
116 // First write succeeds, second fails. 118 // First write succeeds, second fails.
117 TEST_F(BlimpConnectionTest, AsyncTwoPacketsWriteWithError) { 119 TEST_F(BlimpConnectionTest, AsyncTwoPacketsWriteWithError) {
118 net::CompletionCallback write_packet_cb; 120 net::CompletionCallback write_packet_cb;
119 121
120 InSequence s; 122 InSequence s;
121 EXPECT_CALL(*writer_, 123 EXPECT_CALL(*mock_writer_,
122 WritePacket(BufferEqualsProto(*CreateInputMessage()), _)) 124 WritePacket(BufferEqualsProto(*CreateInputMessage()), _))
123 .WillOnce(SaveArg<1>(&write_packet_cb)) 125 .WillOnce(SaveArg<1>(&write_packet_cb))
124 .RetiresOnSaturation(); 126 .RetiresOnSaturation();
125 EXPECT_CALL(*writer_, 127 EXPECT_CALL(*mock_writer_,
126 WritePacket(BufferEqualsProto(*CreateControlMessage()), _)) 128 WritePacket(BufferEqualsProto(*CreateControlMessage()), _))
127 .WillOnce(SaveArg<1>(&write_packet_cb)) 129 .WillOnce(SaveArg<1>(&write_packet_cb))
128 .RetiresOnSaturation(); 130 .RetiresOnSaturation();
129 EXPECT_CALL(error_observer1_, OnConnectionError(net::ERR_FAILED)); 131 EXPECT_CALL(error_observer1_, OnConnectionError(net::ERR_FAILED));
130 EXPECT_CALL(error_observer2_, OnConnectionError(net::ERR_FAILED)); 132 EXPECT_CALL(error_observer2_, OnConnectionError(net::ERR_FAILED));
131 EXPECT_CALL(error_observer3_, OnConnectionError(_)).Times(0); 133 EXPECT_CALL(error_observer3_, OnConnectionError(_)).Times(0);
132 134
133 BlimpMessageProcessor* sender = connection_->GetOutgoingMessageProcessor(); 135 BlimpMessageProcessor* sender = connection_->GetOutgoingMessageProcessor();
134 net::TestCompletionCallback complete_cb_1; 136 net::TestCompletionCallback complete_cb_1;
135 sender->ProcessMessage(CreateInputMessage(), 137 sender->ProcessMessage(CreateInputMessage(),
136 complete_cb_1.callback()); 138 complete_cb_1.callback());
137 base::ResetAndReturn(&write_packet_cb).Run(net::OK); 139 base::ResetAndReturn(&write_packet_cb).Run(net::OK);
138 EXPECT_EQ(net::OK, complete_cb_1.WaitForResult()); 140 EXPECT_EQ(net::OK, complete_cb_1.WaitForResult());
139 141
140 net::TestCompletionCallback complete_cb_2; 142 net::TestCompletionCallback complete_cb_2;
141 sender->ProcessMessage(CreateControlMessage(), 143 sender->ProcessMessage(CreateControlMessage(),
142 complete_cb_2.callback()); 144 complete_cb_2.callback());
143 base::ResetAndReturn(&write_packet_cb).Run(net::ERR_FAILED); 145 base::ResetAndReturn(&write_packet_cb).Run(net::ERR_FAILED);
144 EXPECT_EQ(net::ERR_FAILED, complete_cb_2.WaitForResult()); 146 EXPECT_EQ(net::ERR_FAILED, complete_cb_2.WaitForResult());
145 } 147 }
146 148
147 TEST_F(BlimpConnectionTest, DeleteHappyObserversAreOK) { 149 TEST_F(BlimpConnectionTest, DeleteHappyObserversAreOK) {
148 net::CompletionCallback write_packet_cb; 150 net::CompletionCallback write_packet_cb;
149 151
150 InSequence s; 152 InSequence s;
151 EXPECT_CALL(*writer_, 153 EXPECT_CALL(*mock_writer_,
152 WritePacket(BufferEqualsProto(*CreateInputMessage()), _)) 154 WritePacket(BufferEqualsProto(*CreateInputMessage()), _))
153 .WillOnce(SaveArg<1>(&write_packet_cb)) 155 .WillOnce(SaveArg<1>(&write_packet_cb))
154 .RetiresOnSaturation(); 156 .RetiresOnSaturation();
155 EXPECT_CALL(error_observer1_, OnConnectionError(net::ERR_FAILED)) 157 EXPECT_CALL(error_observer1_, OnConnectionError(net::ERR_FAILED))
156 .WillOnce(testing::InvokeWithoutArgs( 158 .WillOnce(testing::InvokeWithoutArgs(
157 this, &BlimpConnectionTest::DropConnection)); 159 this, &BlimpConnectionTest::DropConnection));
158 160
159 BlimpMessageProcessor* sender = connection_->GetOutgoingMessageProcessor(); 161 BlimpMessageProcessor* sender = connection_->GetOutgoingMessageProcessor();
160 net::TestCompletionCallback complete_cb_1; 162 net::TestCompletionCallback complete_cb_1;
161 sender->ProcessMessage(CreateInputMessage(), complete_cb_1.callback()); 163 sender->ProcessMessage(CreateInputMessage(), complete_cb_1.callback());
162 base::ResetAndReturn(&write_packet_cb).Run(net::ERR_FAILED); 164 base::ResetAndReturn(&write_packet_cb).Run(net::ERR_FAILED);
163 EXPECT_EQ(net::ERR_FAILED, complete_cb_1.WaitForResult()); 165 EXPECT_EQ(net::ERR_FAILED, complete_cb_1.WaitForResult());
164 } 166 }
165 167
166 // Verifies that a ReadPacket error causes ErrorObservers to be notified. 168 // Verifies that a ReadPacket error causes ErrorObservers to be notified.
167 TEST_F(BlimpConnectionTest, ReadPacketErrorInvokesErrorObservers) { 169 TEST_F(BlimpConnectionTest, ReadPacketErrorInvokesErrorObservers) {
168 scoped_refptr<net::GrowableIOBuffer> read_packet_buffer; 170 scoped_refptr<net::GrowableIOBuffer> read_packet_buffer;
169 net::CompletionCallback read_packet_cb; 171 net::CompletionCallback read_packet_cb;
170 172
171 EXPECT_CALL(*reader_, ReadPacket(_, _)) 173 EXPECT_CALL(*mock_reader_, ReadPacket(_, _))
172 .WillOnce( 174 .WillOnce(
173 DoAll(SaveArg<0>(&read_packet_buffer), SaveArg<1>(&read_packet_cb))) 175 DoAll(SaveArg<0>(&read_packet_buffer), SaveArg<1>(&read_packet_cb)))
174 .RetiresOnSaturation(); 176 .RetiresOnSaturation();
175 177
176 EXPECT_CALL(error_observer1_, OnConnectionError(net::ERR_FAILED)); 178 EXPECT_CALL(error_observer1_, OnConnectionError(net::ERR_FAILED));
177 EXPECT_CALL(error_observer2_, OnConnectionError(net::ERR_FAILED)); 179 EXPECT_CALL(error_observer2_, OnConnectionError(net::ERR_FAILED));
178 EXPECT_CALL(error_observer3_, OnConnectionError(_)).Times(0); 180 EXPECT_CALL(error_observer3_, OnConnectionError(_)).Times(0);
179 181
180 EXPECT_CALL(receiver_, MockableProcessMessage(_, _)).Times(0); 182 EXPECT_CALL(receiver_, MockableProcessMessage(_, _)).Times(0);
181 183
182 // Trigger the first ReadPacket() call by setting the MessageProcessor. 184 // Trigger the first ReadPacket() call by setting the MessageProcessor.
183 connection_->SetIncomingMessageProcessor(&receiver_); 185 connection_->SetIncomingMessageProcessor(&receiver_);
184 EXPECT_TRUE(read_packet_buffer); 186 EXPECT_TRUE(read_packet_buffer);
185 EXPECT_FALSE(read_packet_cb.is_null()); 187 EXPECT_FALSE(read_packet_cb.is_null());
186 188
187 // Signal an error back from the ReadPacket operation. 189 // Signal an error back from the ReadPacket operation.
188 base::ResetAndReturn(&read_packet_cb).Run(net::ERR_FAILED); 190 base::ResetAndReturn(&read_packet_cb).Run(net::ERR_FAILED);
189 } 191 }
190 192
191 // Verifies that EndConnection messages received from the peer are 193 // Verifies that EndConnection messages received from the peer are
192 // routed through to registered ConnectionErrorObservers as errors. 194 // routed through to registered ConnectionErrorObservers as errors.
193 TEST_F(BlimpConnectionTest, EndConnectionInvokesErrorObservers) { 195 TEST_F(BlimpConnectionTest, EndConnectionInvokesErrorObservers) {
194 scoped_refptr<net::GrowableIOBuffer> read_packet_buffer; 196 scoped_refptr<net::GrowableIOBuffer> read_packet_buffer;
195 net::CompletionCallback read_packet_cb; 197 net::CompletionCallback read_packet_cb;
196 198
197 EXPECT_CALL(*reader_, ReadPacket(_, _)) 199 EXPECT_CALL(*mock_reader_, ReadPacket(_, _))
198 .WillOnce( 200 .WillOnce(
199 DoAll(SaveArg<0>(&read_packet_buffer), SaveArg<1>(&read_packet_cb))) 201 DoAll(SaveArg<0>(&read_packet_buffer), SaveArg<1>(&read_packet_cb)))
200 .WillOnce(Return()) 202 .WillOnce(Return())
201 .RetiresOnSaturation(); 203 .RetiresOnSaturation();
202 204
203 EXPECT_CALL(error_observer1_, 205 EXPECT_CALL(error_observer1_,
204 OnConnectionError(EndConnectionMessage::PROTOCOL_MISMATCH)); 206 OnConnectionError(EndConnectionMessage::PROTOCOL_MISMATCH));
205 EXPECT_CALL(error_observer2_, 207 EXPECT_CALL(error_observer2_,
206 OnConnectionError(EndConnectionMessage::PROTOCOL_MISMATCH)); 208 OnConnectionError(EndConnectionMessage::PROTOCOL_MISMATCH));
207 EXPECT_CALL(error_observer3_, OnConnectionError(_)).Times(0); 209 EXPECT_CALL(error_observer3_, OnConnectionError(_)).Times(0);
(...skipping 11 matching lines...) Expand all
219 221
220 // Put the EndConnection message in the buffer and invoke the read callback. 222 // Put the EndConnection message in the buffer and invoke the read callback.
221 read_packet_buffer->SetCapacity(message->ByteSize()); 223 read_packet_buffer->SetCapacity(message->ByteSize());
222 ASSERT_TRUE(message->SerializeToArray(read_packet_buffer->data(), 224 ASSERT_TRUE(message->SerializeToArray(read_packet_buffer->data(),
223 message->GetCachedSize())); 225 message->GetCachedSize()));
224 base::ResetAndReturn(&read_packet_cb).Run(message->ByteSize()); 226 base::ResetAndReturn(&read_packet_cb).Run(message->ByteSize());
225 } 227 }
226 228
227 } // namespace 229 } // namespace
228 } // namespace blimp 230 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698