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

Side by Side Diff: blimp/net/client_connection_manager_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/client_connection_manager.h" 5 #include "blimp/net/client_connection_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8
9 #include <string> 8 #include <string>
9 #include <utility>
10 10
11 #include "base/callback_helpers.h" 11 #include "base/callback_helpers.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
14 #include "blimp/common/create_blimp_message.h" 14 #include "blimp/common/create_blimp_message.h"
15 #include "blimp/common/proto/blimp_message.pb.h" 15 #include "blimp/common/proto/blimp_message.pb.h"
16 #include "blimp/common/protocol_version.h" 16 #include "blimp/common/protocol_version.h"
17 #include "blimp/net/blimp_connection.h"
18 #include "blimp/net/blimp_transport.h"
19 #include "blimp/net/test_common.h" 17 #include "blimp/net/test_common.h"
20 #include "net/base/completion_callback.h" 18 #include "net/base/completion_callback.h"
21 #include "net/base/net_errors.h" 19 #include "net/base/net_errors.h"
22 #include "net/base/test_completion_callback.h" 20 #include "net/base/test_completion_callback.h"
23 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
25 23
26 using testing::_; 24 using testing::_;
27 using testing::Eq; 25 using testing::Eq;
28 using testing::Return; 26 using testing::Return;
29 using testing::SaveArg; 27 using testing::SaveArg;
30 28
31 namespace blimp { 29 namespace blimp {
32 namespace { 30 namespace {
33 const char kDummyClientToken[] = "dummy-client-token"; 31 const char kDummyClientToken[] = "dummy-client-token";
34 } // namespace 32 } // namespace
35 33
36 class ClientConnectionManagerTest : public testing::Test { 34 class ClientConnectionManagerTest : public testing::Test {
37 public: 35 public:
38 ClientConnectionManagerTest() 36 ClientConnectionManagerTest()
39 : manager_(new ClientConnectionManager(&connection_handler_)), 37 : manager_(new ClientConnectionManager(&connection_handler_)),
40 transport1_(new testing::StrictMock<MockTransport>), 38 transport1_(new testing::StrictMock<MockTransport>),
41 transport2_(new testing::StrictMock<MockTransport>), 39 transport2_(new testing::StrictMock<MockTransport>),
42 reader_(new MockPacketReader), 40 reader_(new testing::StrictMock<MockPacketReader>),
43 writer_(new MockPacketWriter), 41 writer_(new testing::StrictMock<MockPacketWriter>),
44 connection_(new BlimpConnection(base::WrapUnique(reader_),
45 base::WrapUnique(writer_))),
46 start_connection_message_( 42 start_connection_message_(
47 CreateStartConnectionMessage(kDummyClientToken, kProtocolVersion)) { 43 CreateStartConnectionMessage(kDummyClientToken, kProtocolVersion)) {
48 manager_->set_client_token(kDummyClientToken); 44 manager_->set_client_token(kDummyClientToken);
49 } 45 }
50 46
51 ~ClientConnectionManagerTest() override {} 47 ~ClientConnectionManagerTest() override {}
52 48
53 protected: 49 protected:
54 base::MessageLoop message_loop_; 50 base::MessageLoop message_loop_;
55 testing::StrictMock<MockConnectionHandler> connection_handler_; 51 testing::StrictMock<MockConnectionHandler> connection_handler_;
56 std::unique_ptr<ClientConnectionManager> manager_; 52 std::unique_ptr<ClientConnectionManager> manager_;
57 std::unique_ptr<testing::StrictMock<MockTransport>> transport1_; 53 std::unique_ptr<testing::StrictMock<MockTransport>> transport1_;
58 std::unique_ptr<testing::StrictMock<MockTransport>> transport2_; 54 std::unique_ptr<testing::StrictMock<MockTransport>> transport2_;
59 MockPacketReader* reader_; 55 std::unique_ptr<MockPacketReader> reader_;
60 MockPacketWriter* writer_; 56 std::unique_ptr<MockPacketWriter> writer_;
61 std::unique_ptr<BlimpConnection> connection_;
62 std::unique_ptr<BlimpMessage> start_connection_message_; 57 std::unique_ptr<BlimpMessage> start_connection_message_;
63 }; 58 };
64 59
65 // The 1st transport connects, and the 2nd transport is not used. 60 // The 1st transport connects, and the 2nd transport is not used.
66 TEST_F(ClientConnectionManagerTest, FirstTransportConnects) { 61 TEST_F(ClientConnectionManagerTest, FirstTransportConnects) {
67 net::CompletionCallback write_cb; 62 net::CompletionCallback write_cb;
68 net::CompletionCallback connect_cb_1; 63 net::CompletionCallback connect_cb_1;
69 EXPECT_CALL(*transport1_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_1)); 64 EXPECT_CALL(*transport1_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_1));
70 EXPECT_CALL(connection_handler_, HandleConnectionPtr(Eq(connection_.get()))); 65 EXPECT_CALL(connection_handler_, HandleConnectionPtr(_));
71 EXPECT_CALL(*writer_, 66 EXPECT_CALL(*writer_,
72 WritePacket(BufferEqualsProto(*start_connection_message_), _)) 67 WritePacket(BufferEqualsProto(*start_connection_message_), _))
73 .WillOnce(SaveArg<1>(&write_cb)); 68 .WillOnce(SaveArg<1>(&write_cb));
74 EXPECT_CALL(*transport1_, TakeConnectionPtr())
75 .WillOnce(Return(connection_.release()));
76 69
77 ASSERT_TRUE(connect_cb_1.is_null()); 70 EXPECT_CALL(*transport1_, TakeMessagePortPtr())
71 .WillOnce(
72 Return(new MessagePort(std::move(reader_), std::move(writer_))));
73
74 EXPECT_TRUE(connect_cb_1.is_null());
78 manager_->AddTransport(std::move(transport1_)); 75 manager_->AddTransport(std::move(transport1_));
79 manager_->AddTransport(std::move(transport2_)); 76 manager_->AddTransport(std::move(transport2_));
80 manager_->Connect(); 77 manager_->Connect();
81 ASSERT_FALSE(connect_cb_1.is_null()); 78 EXPECT_FALSE(connect_cb_1.is_null());
82 base::ResetAndReturn(&connect_cb_1).Run(net::OK); 79 base::ResetAndReturn(&connect_cb_1).Run(net::OK);
83 base::ResetAndReturn(&write_cb).Run(net::OK); 80 base::ResetAndReturn(&write_cb).Run(net::OK);
84 } 81 }
85 82
86 // The 1st transport fails to connect, and the 2nd transport connects. 83 // The 1st transport fails to connect, and the 2nd transport connects.
87 TEST_F(ClientConnectionManagerTest, SecondTransportConnects) { 84 TEST_F(ClientConnectionManagerTest, SecondTransportConnects) {
88 net::CompletionCallback write_cb; 85 net::CompletionCallback write_cb;
89 net::CompletionCallback connect_cb_1; 86 net::CompletionCallback connect_cb_1;
90 EXPECT_CALL(*transport1_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_1)); 87 EXPECT_CALL(*transport1_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_1));
91 net::CompletionCallback connect_cb_2; 88 net::CompletionCallback connect_cb_2;
92 EXPECT_CALL(*transport2_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_2)); 89 EXPECT_CALL(*transport2_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_2));
93 EXPECT_CALL(*writer_, 90 EXPECT_CALL(*writer_,
94 WritePacket(BufferEqualsProto(*start_connection_message_), _)) 91 WritePacket(BufferEqualsProto(*start_connection_message_), _))
95 .WillOnce(SaveArg<1>(&write_cb)); 92 .WillOnce(SaveArg<1>(&write_cb));
96 EXPECT_CALL(connection_handler_, HandleConnectionPtr(Eq(connection_.get()))); 93 EXPECT_CALL(connection_handler_, HandleConnectionPtr(_));
97 EXPECT_CALL(*transport2_, TakeConnectionPtr()) 94 EXPECT_CALL(*transport2_, TakeMessagePortPtr())
98 .WillOnce(Return(connection_.release())); 95 .WillOnce(
96 Return(new MessagePort(std::move(reader_), std::move(writer_))));
99 97
100 ASSERT_TRUE(connect_cb_1.is_null()); 98 EXPECT_TRUE(connect_cb_1.is_null());
101 ASSERT_TRUE(connect_cb_2.is_null()); 99 EXPECT_TRUE(connect_cb_2.is_null());
102 manager_->AddTransport(std::move(transport1_)); 100 manager_->AddTransport(std::move(transport1_));
103 manager_->AddTransport(std::move(transport2_)); 101 manager_->AddTransport(std::move(transport2_));
104 manager_->Connect(); 102 manager_->Connect();
105 ASSERT_FALSE(connect_cb_1.is_null()); 103 EXPECT_FALSE(connect_cb_1.is_null());
106 base::ResetAndReturn(&connect_cb_1).Run(net::ERR_FAILED); 104 base::ResetAndReturn(&connect_cb_1).Run(net::ERR_FAILED);
107 ASSERT_FALSE(connect_cb_2.is_null()); 105 EXPECT_FALSE(connect_cb_2.is_null());
108 base::ResetAndReturn(&connect_cb_2).Run(net::OK); 106 base::ResetAndReturn(&connect_cb_2).Run(net::OK);
109 base::ResetAndReturn(&write_cb).Run(net::OK); 107 base::ResetAndReturn(&write_cb).Run(net::OK);
110 } 108 }
111 109
112 // Both transports fail to connect. 110 // Both transports fail to connect.
113 TEST_F(ClientConnectionManagerTest, BothTransportsFailToConnect) { 111 TEST_F(ClientConnectionManagerTest, BothTransportsFailToConnect) {
114 net::CompletionCallback connect_cb_1; 112 net::CompletionCallback connect_cb_1;
115 EXPECT_CALL(*transport1_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_1)); 113 EXPECT_CALL(*transport1_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_1));
116 net::CompletionCallback connect_cb_2; 114 net::CompletionCallback connect_cb_2;
117 EXPECT_CALL(*transport2_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_2)); 115 EXPECT_CALL(*transport2_, Connect(_)).WillOnce(SaveArg<0>(&connect_cb_2));
118 116
119 ASSERT_TRUE(connect_cb_1.is_null()); 117 EXPECT_TRUE(connect_cb_1.is_null());
120 ASSERT_TRUE(connect_cb_2.is_null()); 118 EXPECT_TRUE(connect_cb_2.is_null());
121 manager_->AddTransport(std::move(transport1_)); 119 manager_->AddTransport(std::move(transport1_));
122 manager_->AddTransport(std::move(transport2_)); 120 manager_->AddTransport(std::move(transport2_));
123 manager_->Connect(); 121 manager_->Connect();
124 ASSERT_FALSE(connect_cb_1.is_null()); 122 EXPECT_FALSE(connect_cb_1.is_null());
125 ASSERT_TRUE(connect_cb_2.is_null()); 123 EXPECT_TRUE(connect_cb_2.is_null());
126 base::ResetAndReturn(&connect_cb_1).Run(net::ERR_FAILED); 124 base::ResetAndReturn(&connect_cb_1).Run(net::ERR_FAILED);
127 ASSERT_FALSE(connect_cb_2.is_null()); 125 EXPECT_FALSE(connect_cb_2.is_null());
128 base::ResetAndReturn(&connect_cb_2).Run(net::ERR_FAILED); 126 base::ResetAndReturn(&connect_cb_2).Run(net::ERR_FAILED);
129 } 127 }
130 128
131 } // namespace blimp 129 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698