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

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

Issue 2632803002: Remove all blimp network code. (Closed)
Patch Set: merge from origin/master for good measure 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 | « blimp/net/blimp_message_checkpointer.cc ('k') | blimp/net/blimp_message_demultiplexer.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 2015 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 "blimp/net/blimp_message_checkpointer.h"
6
7 #include "base/memory/ptr_util.h"
8 #include "base/memory/ref_counted.h"
9 #include "base/test/test_mock_time_task_runner.h"
10 #include "base/threading/thread_task_runner_handle.h"
11 #include "blimp/common/create_blimp_message.h"
12 #include "blimp/net/blimp_message_checkpoint_observer.h"
13 #include "blimp/net/test_common.h"
14 #include "net/base/net_errors.h"
15 #include "net/base/test_completion_callback.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 using testing::_;
20 using testing::SaveArg;
21
22 namespace blimp {
23
24 namespace {
25 class MockCheckpointObserver : public BlimpMessageCheckpointObserver {
26 public:
27 MockCheckpointObserver() {}
28 ~MockCheckpointObserver() override {}
29
30 MOCK_METHOD1(OnMessageCheckpoint, void(int64_t));
31 };
32
33 } // namespace
34
35 class BlimpMessageCheckpointerTest : public testing::Test {
36 public:
37 BlimpMessageCheckpointerTest()
38 : runner_(new base::TestMockTimeTaskRunner), runner_handle_(runner_) {}
39
40 ~BlimpMessageCheckpointerTest() override {}
41
42 int64_t SimulateIncomingMessage() {
43 InputMessage* input = nullptr;
44 std::unique_ptr<BlimpMessage> message(CreateBlimpMessage(&input));
45 message->set_message_id(++message_id_);
46 checkpointer_->ProcessMessage(
47 std::move(message),
48 base::Bind(&BlimpMessageCheckpointerTest::IncomingCompletionCallback,
49 base::Unretained(this)));
50 return message_id_;
51 }
52
53 void SetUp() override {
54 checkpointer_ = base::MakeUnique<BlimpMessageCheckpointer>(
55 &incoming_processor_, &outgoing_processor_, &checkpoint_observer_);
56 }
57
58 MOCK_METHOD1(IncomingCompletionCallback, void(int));
59
60 protected:
61 // Used to verify timing-specific behaviours.
62 scoped_refptr<base::TestMockTimeTaskRunner> runner_;
63 base::ThreadTaskRunnerHandle runner_handle_;
64
65 int64_t message_id_ = 0;
66
67 testing::StrictMock<MockBlimpMessageProcessor> incoming_processor_;
68 testing::StrictMock<MockBlimpMessageProcessor> outgoing_processor_;
69 testing::StrictMock<MockCheckpointObserver> checkpoint_observer_;
70 net::CompletionCallback captured_cb_;
71
72 std::unique_ptr<BlimpMessageCheckpointer> checkpointer_;
73 };
74
75 TEST_F(BlimpMessageCheckpointerTest, CallbackPropagates) {
76 EXPECT_CALL(incoming_processor_, MockableProcessMessage(_, _))
77 .WillOnce(SaveArg<1>(&captured_cb_));
78 EXPECT_CALL(*this, IncomingCompletionCallback(_));
79
80 // Simulate an incoming message.
81 SimulateIncomingMessage();
82
83 // Verify TestCompletionCallback called on completion.
84 captured_cb_.Run(net::OK);
85 }
86
87 TEST_F(BlimpMessageCheckpointerTest, DeleteWhileProcessing) {
88 EXPECT_CALL(incoming_processor_, MockableProcessMessage(_, _))
89 .WillOnce(SaveArg<1>(&captured_cb_));
90 EXPECT_CALL(*this, IncomingCompletionCallback(_)).Times(0);
91
92 // Simulate an incoming message.
93 SimulateIncomingMessage();
94
95 // Delete the checkpointer, then simulate completion of processing.
96 // TestCompletionCallback should not fire, so no expectations.
97 checkpointer_ = nullptr;
98 captured_cb_.Run(net::OK);
99 }
100
101 TEST_F(BlimpMessageCheckpointerTest, SingleMessageAck) {
102 EXPECT_CALL(incoming_processor_, MockableProcessMessage(_, _))
103 .WillOnce(SaveArg<1>(&captured_cb_));
104 std::unique_ptr<BlimpMessage> expected_ack = CreateCheckpointAckMessage(1);
105 EXPECT_CALL(outgoing_processor_,
106 MockableProcessMessage(EqualsProto(*expected_ack), _));
107 EXPECT_CALL(*this, IncomingCompletionCallback(net::OK));
108
109 // Simulate an incoming message.
110 SimulateIncomingMessage();
111
112 // Fast-forward time to verify that an ACK message is sent.
113 captured_cb_.Run(net::OK);
114 runner_->FastForwardBy(base::TimeDelta::FromSeconds(2));
115 }
116
117 TEST_F(BlimpMessageCheckpointerTest, BatchMessageAck) {
118 EXPECT_CALL(incoming_processor_, MockableProcessMessage(_, _))
119 .Times(10)
120 .WillRepeatedly(SaveArg<1>(&captured_cb_));
121 std::unique_ptr<BlimpMessage> expected_ack = CreateCheckpointAckMessage(10);
122 EXPECT_CALL(outgoing_processor_,
123 MockableProcessMessage(EqualsProto(*expected_ack), _));
124 EXPECT_CALL(*this, IncomingCompletionCallback(net::OK)).Times(10);
125
126 // Simulate ten incoming messages.
127 for (int i = 0; i < 10; ++i) {
128 SimulateIncomingMessage();
129 captured_cb_.Run(net::OK);
130 }
131
132 // Fast-forward time to verify that only a single ACK message is sent.
133 runner_->FastForwardBy(base::TimeDelta::FromSeconds(2));
134 }
135
136 TEST_F(BlimpMessageCheckpointerTest, MultipleAcks) {
137 EXPECT_CALL(incoming_processor_, MockableProcessMessage(_, _))
138 .Times(2)
139 .WillRepeatedly(SaveArg<1>(&captured_cb_));
140 std::unique_ptr<BlimpMessage> expected_ack1 = CreateCheckpointAckMessage(1);
141 EXPECT_CALL(outgoing_processor_,
142 MockableProcessMessage(EqualsProto(*expected_ack1), _));
143 std::unique_ptr<BlimpMessage> expected_ack2 = CreateCheckpointAckMessage(2);
144 EXPECT_CALL(outgoing_processor_,
145 MockableProcessMessage(EqualsProto(*expected_ack2), _));
146 EXPECT_CALL(*this, IncomingCompletionCallback(net::OK)).Times(2);
147
148 // Simulate an incoming messages and fast-forward to get the ACK.
149 SimulateIncomingMessage();
150 captured_cb_.Run(net::OK);
151 runner_->FastForwardBy(base::TimeDelta::FromSeconds(2));
152
153 // And do it again to verify we get a fresh ACK.
154 SimulateIncomingMessage();
155 captured_cb_.Run(net::OK);
156 runner_->FastForwardBy(base::TimeDelta::FromSeconds(2));
157 }
158
159 TEST_F(BlimpMessageCheckpointerTest, IncomingAckMessage) {
160 EXPECT_CALL(*this, IncomingCompletionCallback(net::OK));
161 EXPECT_CALL(checkpoint_observer_, OnMessageCheckpoint(10));
162
163 // Simulate an incoming message.
164 std::unique_ptr<BlimpMessage> ack_message = CreateCheckpointAckMessage(10);
165 checkpointer_->ProcessMessage(
166 std::move(ack_message),
167 base::Bind(&BlimpMessageCheckpointerTest::IncomingCompletionCallback,
168 base::Unretained(this)));
169 }
170
171 } // namespace blimp
OLDNEW
« no previous file with comments | « blimp/net/blimp_message_checkpointer.cc ('k') | blimp/net/blimp_message_demultiplexer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698