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

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

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

Powered by Google App Engine
This is Rietveld 408576698