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

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

Issue 1452823011: Make PacketReader/PacketWriter interfaces async-only. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years 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 | « blimp/net/blimp_message_pump.cc ('k') | blimp/net/packet_reader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 5 #include <stddef.h>
6 #include <string> 6 #include <string>
7 7
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "blimp/common/proto/blimp_message.pb.h" 9 #include "blimp/common/proto/blimp_message.pb.h"
10 #include "blimp/net/blimp_message_pump.h" 10 #include "blimp/net/blimp_message_pump.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 protected: 43 protected:
44 scoped_ptr<BlimpMessage> message1_; 44 scoped_ptr<BlimpMessage> message1_;
45 scoped_ptr<BlimpMessage> message2_; 45 scoped_ptr<BlimpMessage> message2_;
46 46
47 testing::StrictMock<MockPacketReader> reader_; 47 testing::StrictMock<MockPacketReader> reader_;
48 testing::StrictMock<MockConnectionErrorObserver> error_observer_; 48 testing::StrictMock<MockConnectionErrorObserver> error_observer_;
49 testing::StrictMock<MockBlimpMessageProcessor> receiver_; 49 testing::StrictMock<MockBlimpMessageProcessor> receiver_;
50 scoped_ptr<BlimpMessagePump> message_pump_; 50 scoped_ptr<BlimpMessagePump> message_pump_;
51 }; 51 };
52 52
53 // Reader completes reading one packet synchronously. 53 // Reader completes reading one packet asynchronously.
54 TEST_F(BlimpMessagePumpTest, SyncPacketRead) { 54 TEST_F(BlimpMessagePumpTest, ReadPacket) {
55 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _)); 55 net::CompletionCallback read_packet_cb;
56 EXPECT_CALL(reader_, ReadPacket(NotNull(), _));
56 EXPECT_CALL(reader_, ReadPacket(NotNull(), _)) 57 EXPECT_CALL(reader_, ReadPacket(NotNull(), _))
57 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()), 58 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()),
58 Return(message1_->ByteSize()))); 59 SetBufferOffset<0>(message1_->ByteSize()),
59 message_pump_->SetMessageProcessor(&receiver_); 60 SaveArg<1>(&read_packet_cb)))
60 } 61 .RetiresOnSaturation();
61
62 // Reader completes reading two packets synchronously.
63 TEST_F(BlimpMessagePumpTest, SyncTwoPacketsRead) {
64 EXPECT_CALL(reader_, ReadPacket(NotNull(), _))
65 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()),
66 Return(message1_->ByteSize())))
67 .WillOnce(DoAll(FillBufferFromMessage<0>(message2_.get()),
68 Return(message2_->ByteSize())));
69 net::CompletionCallback process_msg_cb;
70 {
71 InSequence s;
72 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _))
73 .WillOnce(SaveArg<1>(&process_msg_cb))
74 .RetiresOnSaturation();
75 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message2_), _));
76 }
77 message_pump_->SetMessageProcessor(&receiver_);
78
79 // Trigger next packet read
80 process_msg_cb.Run(net::OK);
81 }
82
83 // Reader completes reading one packet asynchronously.
84 TEST_F(BlimpMessagePumpTest, AsyncPacketRead) {
85 net::CompletionCallback read_packet_cb;
86 EXPECT_CALL(reader_, ReadPacket(NotNull(), _))
87 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()),
88 SaveArg<1>(&read_packet_cb), Return(net::ERR_IO_PENDING)))
89 .WillOnce(Return(net::ERR_IO_PENDING));
90 net::CompletionCallback process_msg_cb; 62 net::CompletionCallback process_msg_cb;
91 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _)) 63 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _))
92 .WillOnce(SaveArg<1>(&process_msg_cb)); 64 .WillOnce(SaveArg<1>(&process_msg_cb));
93 message_pump_->SetMessageProcessor(&receiver_); 65 message_pump_->SetMessageProcessor(&receiver_);
94 read_packet_cb.Run(message1_->ByteSize()); 66 ASSERT_FALSE(read_packet_cb.is_null());
67 base::ResetAndReturn(&read_packet_cb).Run(net::OK);
95 process_msg_cb.Run(net::OK); 68 process_msg_cb.Run(net::OK);
96 } 69 }
97 70
98 // Reader completes reading two packets asynchronously. 71 // Reader completes reading two packets asynchronously.
99 TEST_F(BlimpMessagePumpTest, AsyncTwoPacketsRead) { 72 TEST_F(BlimpMessagePumpTest, ReadTwoPackets) {
100 net::CompletionCallback read_packet_cb; 73 net::CompletionCallback read_packet_cb;
101 EXPECT_CALL(reader_, ReadPacket(NotNull(), _)) 74 EXPECT_CALL(reader_, ReadPacket(NotNull(), _))
102 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()), 75 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()),
103 SaveArg<1>(&read_packet_cb), Return(net::ERR_IO_PENDING))) 76 SetBufferOffset<0>(message1_->ByteSize()),
77 SaveArg<1>(&read_packet_cb)))
104 .WillOnce(DoAll(FillBufferFromMessage<0>(message2_.get()), 78 .WillOnce(DoAll(FillBufferFromMessage<0>(message2_.get()),
105 SaveArg<1>(&read_packet_cb), 79 SetBufferOffset<0>(message2_->ByteSize()),
106 Return(net::ERR_IO_PENDING))); 80 SaveArg<1>(&read_packet_cb)));
107 net::CompletionCallback process_msg_cb; 81 net::CompletionCallback process_msg_cb;
108 { 82 {
109 InSequence s; 83 InSequence s;
110 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _)) 84 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _))
111 .WillOnce(SaveArg<1>(&process_msg_cb)) 85 .WillOnce(SaveArg<1>(&process_msg_cb))
112 .RetiresOnSaturation(); 86 .RetiresOnSaturation();
113 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message2_), _)); 87 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message2_), _));
114 } 88 }
115 message_pump_->SetMessageProcessor(&receiver_); 89 message_pump_->SetMessageProcessor(&receiver_);
116 read_packet_cb.Run(message1_->ByteSize()); 90 ASSERT_FALSE(read_packet_cb.is_null());
91 base::ResetAndReturn(&read_packet_cb).Run(net::OK);
117 92
118 // Trigger next packet read 93 // Trigger next packet read
119 process_msg_cb.Run(net::OK); 94 process_msg_cb.Run(net::OK);
120 read_packet_cb.Run(message2_->ByteSize()); 95 ASSERT_FALSE(read_packet_cb.is_null());
96 base::ResetAndReturn(&read_packet_cb).Run(net::OK);
121 } 97 }
122 98
123 // Reader completes reading two packets asynchronously. 99 // Reader completes reading two packets asynchronously.
124 // The first read succeeds, and the second fails. 100 // The first read succeeds, and the second fails.
125 TEST_F(BlimpMessagePumpTest, AsyncTwoPacketsReadWithError) { 101 TEST_F(BlimpMessagePumpTest, ReadTwoPacketsWithError) {
102 net::CompletionCallback process_msg_cb;
126 net::CompletionCallback read_packet_cb; 103 net::CompletionCallback read_packet_cb;
127 EXPECT_CALL(reader_, ReadPacket(NotNull(), _)) 104 EXPECT_CALL(reader_, ReadPacket(NotNull(), _))
128 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()), 105 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()),
129 SaveArg<1>(&read_packet_cb), Return(net::ERR_IO_PENDING))) 106 SetBufferOffset<0>(message1_->ByteSize()),
107 SaveArg<1>(&read_packet_cb)))
130 .WillOnce(DoAll(FillBufferFromMessage<0>(message2_.get()), 108 .WillOnce(DoAll(FillBufferFromMessage<0>(message2_.get()),
131 SaveArg<1>(&read_packet_cb), 109 SetBufferOffset<0>(message2_->ByteSize()),
132 Return(net::ERR_IO_PENDING))); 110 SaveArg<1>(&read_packet_cb)));
133 net::CompletionCallback process_msg_cb; 111 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _))
134 { 112 .WillOnce(SaveArg<1>(&process_msg_cb));
135 InSequence s; 113 EXPECT_CALL(error_observer_, OnConnectionError(net::ERR_FAILED));
136 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _)) 114
137 .WillOnce(SaveArg<1>(&process_msg_cb));
138 EXPECT_CALL(error_observer_, OnConnectionError(net::ERR_FAILED));
139 }
140 message_pump_->SetMessageProcessor(&receiver_); 115 message_pump_->SetMessageProcessor(&receiver_);
141 read_packet_cb.Run(message1_->ByteSize()); 116 ASSERT_FALSE(read_packet_cb.is_null());
117 base::ResetAndReturn(&read_packet_cb).Run(net::OK);
142 118
143 // Trigger next packet read 119 // Trigger next packet read
144 process_msg_cb.Run(net::OK); 120 process_msg_cb.Run(net::OK);
145 read_packet_cb.Run(net::ERR_FAILED); 121 ASSERT_FALSE(read_packet_cb.is_null());
122 base::ResetAndReturn(&read_packet_cb).Run(net::ERR_FAILED);
146 } 123 }
147 124
148 // Reader completes reading one packet synchronously, but packet is invalid 125 // Reader completes reading one packet synchronously, but packet is invalid
149 TEST_F(BlimpMessagePumpTest, InvalidPacket) { 126 TEST_F(BlimpMessagePumpTest, InvalidPacket) {
127 net::CompletionCallback read_packet_cb;
150 std::string test_msg("msg"); 128 std::string test_msg("msg");
151 EXPECT_CALL(reader_, ReadPacket(NotNull(), _)) 129 EXPECT_CALL(reader_, ReadPacket(NotNull(), _))
152 .WillOnce(DoAll(FillBufferFromString<0>(test_msg), Return(1))); 130 .WillOnce(DoAll(FillBufferFromString<0>(test_msg),
131 SetBufferOffset<0>(test_msg.size()),
132 SaveArg<1>(&read_packet_cb)));
153 EXPECT_CALL(error_observer_, OnConnectionError(net::ERR_FAILED)); 133 EXPECT_CALL(error_observer_, OnConnectionError(net::ERR_FAILED));
154 message_pump_->SetMessageProcessor(&receiver_);
155 }
156
157 TEST_F(BlimpMessagePumpTest, ClearMessageProcessorAfterRead) {
158 net::CompletionCallback read_packet_cb;
159 EXPECT_CALL(reader_, ReadPacket(NotNull(), _))
160 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()),
161 SaveArg<1>(&read_packet_cb),
162 Return(net::ERR_IO_PENDING)));
163 net::CompletionCallback process_msg_cb;
164 EXPECT_CALL(receiver_, MockableProcessMessage(EqualsProto(*message1_), _))
165 .WillOnce(SaveArg<1>(&process_msg_cb));
166 134
167 message_pump_->SetMessageProcessor(&receiver_); 135 message_pump_->SetMessageProcessor(&receiver_);
168 base::ResetAndReturn(&read_packet_cb).Run(message1_->ByteSize()); 136 ASSERT_FALSE(read_packet_cb.is_null());
169 137 base::ResetAndReturn(&read_packet_cb).Run(net::OK);
170 message_pump_->SetMessageProcessor(nullptr);
171
172 // Completing message processing will not trigger next packet read.
173 base::ResetAndReturn(&process_msg_cb).Run(net::OK);
174 }
175
176 TEST_F(BlimpMessagePumpTest, ClearMessageProcessorDuringRead) {
177 net::CompletionCallback read_packet_cb;
178 EXPECT_CALL(reader_, ReadPacket(NotNull(), _))
179 .WillOnce(DoAll(FillBufferFromMessage<0>(message1_.get()),
180 SaveArg<1>(&read_packet_cb),
181 Return(net::ERR_IO_PENDING)));
182
183 // Receiver will not get any message.
184 message_pump_->SetMessageProcessor(&receiver_);
185 message_pump_->SetMessageProcessor(nullptr);
186 base::ResetAndReturn(&read_packet_cb).Run(message1_->ByteSize());
187 } 138 }
188 139
189 } // namespace 140 } // namespace
190 141
191 } // namespace blimp 142 } // namespace blimp
OLDNEW
« no previous file with comments | « blimp/net/blimp_message_pump.cc ('k') | blimp/net/packet_reader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698