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

Side by Side Diff: remoting/protocol/jingle_session_unittest.cc

Issue 2586403003: [Chromoting] Add SessionPlugin in JingleSession (Closed)
Patch Set: Resolve review comments 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "remoting/protocol/jingle_session.h" 5 #include "remoting/protocol/jingle_session.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
12 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
15 #include "base/test/test_timeouts.h" 16 #include "base/test/test_timeouts.h"
16 #include "base/time/time.h" 17 #include "base/time/time.h"
17 #include "net/socket/socket.h" 18 #include "net/socket/socket.h"
18 #include "net/socket/stream_socket.h" 19 #include "net/socket/stream_socket.h"
19 #include "net/url_request/url_request_context_getter.h" 20 #include "net/url_request/url_request_context_getter.h"
20 #include "remoting/base/constants.h" 21 #include "remoting/base/constants.h"
21 #include "remoting/protocol/authenticator.h" 22 #include "remoting/protocol/authenticator.h"
22 #include "remoting/protocol/channel_authenticator.h" 23 #include "remoting/protocol/channel_authenticator.h"
23 #include "remoting/protocol/chromium_port_allocator_factory.h" 24 #include "remoting/protocol/chromium_port_allocator_factory.h"
24 #include "remoting/protocol/connection_tester.h" 25 #include "remoting/protocol/connection_tester.h"
25 #include "remoting/protocol/fake_authenticator.h" 26 #include "remoting/protocol/fake_authenticator.h"
26 #include "remoting/protocol/jingle_session_manager.h" 27 #include "remoting/protocol/jingle_session_manager.h"
27 #include "remoting/protocol/network_settings.h" 28 #include "remoting/protocol/network_settings.h"
29 #include "remoting/protocol/session_plugin.h"
28 #include "remoting/protocol/transport.h" 30 #include "remoting/protocol/transport.h"
29 #include "remoting/protocol/transport_context.h" 31 #include "remoting/protocol/transport_context.h"
30 #include "remoting/signaling/fake_signal_strategy.h" 32 #include "remoting/signaling/fake_signal_strategy.h"
31 #include "testing/gmock/include/gmock/gmock.h" 33 #include "testing/gmock/include/gmock/gmock.h"
32 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
33 #include "third_party/webrtc/libjingle/xmpp/constants.h" 35 #include "third_party/webrtc/libjingle/xmpp/constants.h"
34 36
35 using testing::_; 37 using testing::_;
36 using testing::AtLeast; 38 using testing::AtLeast;
37 using testing::AtMost; 39 using testing::AtMost;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 on_message_callback_.Run(); 96 on_message_callback_.Run();
95 return true; 97 return true;
96 } 98 }
97 99
98 private: 100 private:
99 SendTransportInfoCallback send_transport_info_callback_; 101 SendTransportInfoCallback send_transport_info_callback_;
100 std::vector<std::unique_ptr<buzz::XmlElement>> received_messages_; 102 std::vector<std::unique_ptr<buzz::XmlElement>> received_messages_;
101 base::Closure on_message_callback_; 103 base::Closure on_message_callback_;
102 }; 104 };
103 105
106 class FakePlugin : public SessionPlugin {
107 public:
108 std::unique_ptr<buzz::XmlElement> GetNextMessage() override {
109 std::string tag_name = "test-tag-";
110 tag_name += base::IntToString(outgoing_messages_.size());
111 std::unique_ptr<buzz::XmlElement> new_message(new buzz::XmlElement(
112 buzz::QName("test-namespace", tag_name)));
113 outgoing_messages_.push_back(*new_message);
114 return new_message;
115 }
116
117 void OnIncomingMessage(const buzz::XmlElement& attachments) override {
118 for (const buzz::XmlElement* it = attachments.FirstElement();
119 it != nullptr;
120 it = it->NextElement()) {
121 incoming_messages_.push_back(*it);
122 }
123 }
124
125 const std::vector<buzz::XmlElement>& outgoing_messages() const {
126 return outgoing_messages_;
127 }
128
129 const std::vector<buzz::XmlElement>& incoming_messages() const {
130 return incoming_messages_;
131 }
132
133 void Clear() {
134 outgoing_messages_.clear();
135 incoming_messages_.clear();
136 }
137
138 private:
139 std::vector<buzz::XmlElement> outgoing_messages_;
140 std::vector<buzz::XmlElement> incoming_messages_;
141 };
142
104 std::unique_ptr<buzz::XmlElement> CreateTransportInfo(const std::string& id) { 143 std::unique_ptr<buzz::XmlElement> CreateTransportInfo(const std::string& id) {
105 std::unique_ptr<buzz::XmlElement> result( 144 std::unique_ptr<buzz::XmlElement> result(
106 buzz::XmlElement::ForStr("<transport xmlns='google:remoting:ice'/>")); 145 buzz::XmlElement::ForStr("<transport xmlns='google:remoting:ice'/>"));
107 result->AddAttr(buzz::QN_ID, id); 146 result->AddAttr(buzz::QN_ID, id);
108 return result; 147 return result;
109 } 148 }
110 149
111 } // namespace 150 } // namespace
112 151
113 class JingleSessionTest : public testing::Test { 152 class JingleSessionTest : public testing::Test {
114 public: 153 public:
115 JingleSessionTest() { 154 JingleSessionTest() {
116 message_loop_.reset(new base::MessageLoopForIO()); 155 message_loop_.reset(new base::MessageLoopForIO());
117 network_settings_ = 156 network_settings_ =
118 NetworkSettings(NetworkSettings::NAT_TRAVERSAL_OUTGOING); 157 NetworkSettings(NetworkSettings::NAT_TRAVERSAL_OUTGOING);
119 } 158 }
120 159
121 // Helper method that handles OnIncomingSession(). 160 // Helper method that handles OnIncomingSession().
122 void SetHostSession(Session* session) { 161 void SetHostSession(Session* session) {
123 DCHECK(session); 162 DCHECK(session);
124 host_session_.reset(session); 163 host_session_.reset(session);
125 host_session_->SetEventHandler(&host_session_event_handler_); 164 host_session_->SetEventHandler(&host_session_event_handler_);
126 host_session_->SetTransport(&host_transport_); 165 host_session_->SetTransport(&host_transport_);
166 host_session_->AddPlugin(&host_plugin_);
127 } 167 }
128 168
129 void DeleteHostSession() { host_session_.reset(); } 169 void DeleteHostSession() { host_session_.reset(); }
130 170
131 void DeleteClientSession() { client_session_.reset(); } 171 void DeleteClientSession() { client_session_.reset(); }
132 172
133 protected: 173 protected:
134 void TearDown() override { 174 void TearDown() override {
135 CloseSessions(); 175 CloseSessions();
136 CloseSessionManager(); 176 CloseSessionManager();
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 OnSessionStateChange(Session::CLOSED)) 270 OnSessionStateChange(Session::CLOSED))
231 .Times(AtMost(1)); 271 .Times(AtMost(1));
232 } 272 }
233 } 273 }
234 274
235 void ConnectClient(std::unique_ptr<Authenticator> authenticator) { 275 void ConnectClient(std::unique_ptr<Authenticator> authenticator) {
236 client_session_ = 276 client_session_ =
237 client_server_->Connect(host_jid_, std::move(authenticator)); 277 client_server_->Connect(host_jid_, std::move(authenticator));
238 client_session_->SetEventHandler(&client_session_event_handler_); 278 client_session_->SetEventHandler(&client_session_event_handler_);
239 client_session_->SetTransport(&client_transport_); 279 client_session_->SetTransport(&client_transport_);
280 client_session_->AddPlugin(&client_plugin_);
240 base::RunLoop().RunUntilIdle(); 281 base::RunLoop().RunUntilIdle();
241 } 282 }
242 283
243 void InitiateConnection(int auth_round_trips, 284 void InitiateConnection(int auth_round_trips,
244 FakeAuthenticator::Action auth_action, 285 FakeAuthenticator::Action auth_action,
245 bool expect_fail) { 286 bool expect_fail) {
246 SetHostExpectation(expect_fail); 287 SetHostExpectation(expect_fail);
247 SetClientExpectation(expect_fail); 288 SetClientExpectation(expect_fail);
248 ConnectClient(base::MakeUnique<FakeAuthenticator>( 289 ConnectClient(base::MakeUnique<FakeAuthenticator>(
249 FakeAuthenticator::CLIENT, auth_round_trips, auth_action, true)); 290 FakeAuthenticator::CLIENT, auth_round_trips, auth_action, true));
250 } 291 }
251 292
252 void ExpectRouteChange(const std::string& channel_name) { 293 void ExpectRouteChange(const std::string& channel_name) {
253 EXPECT_CALL(host_session_event_handler_, 294 EXPECT_CALL(host_session_event_handler_,
254 OnSessionRouteChange(channel_name, _)) 295 OnSessionRouteChange(channel_name, _))
255 .Times(AtLeast(1)); 296 .Times(AtLeast(1));
256 EXPECT_CALL(client_session_event_handler_, 297 EXPECT_CALL(client_session_event_handler_,
257 OnSessionRouteChange(channel_name, _)) 298 OnSessionRouteChange(channel_name, _))
258 .Times(AtLeast(1)); 299 .Times(AtLeast(1));
259 } 300 }
260 301
302 void ExpectPluginMessagesEqual() const {
303 ASSERT_EQ(client_plugin_.outgoing_messages().size(),
304 host_plugin_.incoming_messages().size());
305 for (size_t i = 0; i < client_plugin_.outgoing_messages().size(); i++) {
306 ASSERT_EQ(client_plugin_.outgoing_messages()[i].Str(),
307 host_plugin_.incoming_messages()[i].Str());
308 }
309
310 ASSERT_EQ(client_plugin_.incoming_messages().size(),
311 host_plugin_.outgoing_messages().size());
312 for (size_t i = 0; i < client_plugin_.incoming_messages().size(); i++) {
313 ASSERT_EQ(client_plugin_.incoming_messages()[i].Str(),
314 host_plugin_.outgoing_messages()[i].Str());
315 }
316 }
317
261 std::unique_ptr<base::MessageLoopForIO> message_loop_; 318 std::unique_ptr<base::MessageLoopForIO> message_loop_;
262 319
263 NetworkSettings network_settings_; 320 NetworkSettings network_settings_;
264 321
265 std::unique_ptr<FakeSignalStrategy> host_signal_strategy_; 322 std::unique_ptr<FakeSignalStrategy> host_signal_strategy_;
266 std::unique_ptr<FakeSignalStrategy> client_signal_strategy_; 323 std::unique_ptr<FakeSignalStrategy> client_signal_strategy_;
267 324
268 std::string host_jid_ = kHostJid; 325 std::string host_jid_ = kHostJid;
269 326
270 std::unique_ptr<JingleSessionManager> host_server_; 327 std::unique_ptr<JingleSessionManager> host_server_;
271 MockSessionManagerListener host_server_listener_; 328 MockSessionManagerListener host_server_listener_;
272 std::unique_ptr<JingleSessionManager> client_server_; 329 std::unique_ptr<JingleSessionManager> client_server_;
273 330
274 std::unique_ptr<Session> host_session_; 331 std::unique_ptr<Session> host_session_;
275 MockSessionEventHandler host_session_event_handler_; 332 MockSessionEventHandler host_session_event_handler_;
276 FakeTransport host_transport_; 333 FakeTransport host_transport_;
277 std::unique_ptr<Session> client_session_; 334 std::unique_ptr<Session> client_session_;
278 MockSessionEventHandler client_session_event_handler_; 335 MockSessionEventHandler client_session_event_handler_;
279 FakeTransport client_transport_; 336 FakeTransport client_transport_;
337
338 FakePlugin host_plugin_;
339 FakePlugin client_plugin_;
280 }; 340 };
281 341
282 342
283 // Verify that we can create and destroy session managers without a 343 // Verify that we can create and destroy session managers without a
284 // connection. 344 // connection.
285 TEST_F(JingleSessionTest, CreateAndDestoy) { 345 TEST_F(JingleSessionTest, CreateAndDestoy) {
286 CreateSessionManagers(1, FakeAuthenticator::ACCEPT); 346 CreateSessionManagers(1, FakeAuthenticator::ACCEPT);
287 } 347 }
288 348
289 // Verify that an incoming session can be rejected, and that the 349 // Verify that an incoming session can be rejected, and that the
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 // Resume authentication. 608 // Resume authentication.
549 authenticator->Resume(); 609 authenticator->Resume();
550 base::RunLoop().RunUntilIdle(); 610 base::RunLoop().RunUntilIdle();
551 611
552 // Verify that transport-info that the first transport-info message was 612 // Verify that transport-info that the first transport-info message was
553 // received. 613 // received.
554 ASSERT_EQ(client_transport_.received_messages().size(), 1U); 614 ASSERT_EQ(client_transport_.received_messages().size(), 1U);
555 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID)); 615 EXPECT_EQ("1", client_transport_.received_messages()[0]->Attr(buzz::QN_ID));
556 } 616 }
557 617
618 TEST_F(JingleSessionTest, TestSessionPlugin) {
619 host_plugin_.Clear();
620 client_plugin_.Clear();
621 CreateSessionManagers(3, FakeAuthenticator::ACCEPT);
622 ASSERT_NO_FATAL_FAILURE(
623 InitiateConnection(3, FakeAuthenticator::ACCEPT, false));
624 ExpectPluginMessagesEqual();
625 }
626
627 TEST_F(JingleSessionTest, SessionPluginShouldNotBeInvolvedInSESSION_TERMINATE) {
Sergey Ulanov 2016/12/29 00:37:58 s/SESSION_TERMINATE/SessionTerminate/
Hzj_jie 2016/12/29 03:07:57 Done.
628 host_plugin_.Clear();
629 client_plugin_.Clear();
630 CreateSessionManagers(1, FakeAuthenticator::REJECT);
631 InitiateConnection(1, FakeAuthenticator::ACCEPT, true);
632 // It's expected the client sends one more plugin message than host, the host
633 // won't send plugin message in the SESSION_TERMINATE message.
634 ASSERT_EQ(client_plugin_.outgoing_messages().size() - 1,
635 client_plugin_.incoming_messages().size());
636 ExpectPluginMessagesEqual();
637 }
638
558 } // namespace protocol 639 } // namespace protocol
559 } // namespace remoting 640 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698