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

Side by Side Diff: remoting/signaling/xmpp_login_handler_unittest.cc

Issue 958703003: Remove dependency on XMPP implementation in WebRTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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
(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 "remoting/signaling/xmpp_login_handler.h"
6
7 #include "base/base64.h"
8 #include "base/message_loop/message_loop.h"
9 #include "remoting/signaling/xmpp_stream_parser.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
12
13 namespace remoting {
14
15 char kTestUsername[] = "testUsername@gmail.com";
16 char kTestToken[] = "testToken";
17
18 class XmppLoginHandlerTest : public testing::Test,
19 public XmppLoginHandler::Delegate {
20 public:
21 XmppLoginHandlerTest()
22 : start_tls_called_(false), error_(SignalStrategy::OK) {}
23
24 void SendMessage(const std::string& message) override {
25 sent_data_ += message;
26 }
27
28 void StartTls() override {
29 start_tls_called_ = true;
30 }
31
32 void OnHandshakeDone(const std::string& jid,
33 scoped_ptr<XmppStreamParser> parser) override {
34 jid_ = jid;
35 parser_ = parser.Pass();
36 }
37
38 void OnLoginHandlerError(SignalStrategy::Error error) override {
39 EXPECT_NE(error, SignalStrategy::OK);
40 error_ = error;
41 }
42
43 protected:
44 void HandshakeBase();
45
46 base::MessageLoop message_loop_;
47
48 scoped_ptr<XmppLoginHandler> login_handler_;
49 std::string sent_data_;
50 bool start_tls_called_;
51 std::string jid_;
52 scoped_ptr<XmppStreamParser> parser_;
53 SignalStrategy::Error error_;
54 };
55
56 void XmppLoginHandlerTest::HandshakeBase() {
57 login_handler_.reset(new remoting::XmppLoginHandler(
58 "google.com", kTestUsername, kTestToken, "oauth2", false, this));
59 login_handler_->Start();
60 EXPECT_TRUE(start_tls_called_);
61
62 login_handler_->OnTlsStarted();
63 std::string cookie;
64 base::Base64Encode(
65 std::string("\0", 1) + kTestUsername + std::string("\0", 1) + kTestToken,
66 &cookie);
67 EXPECT_EQ(
68 sent_data_,
69 "<stream:stream to=\"google.com\" version=\"1.0\" "
70 "xmlns=\"jabber:client\" "
71 "xmlns:stream=\"http://etherx.jabber.org/streams\">"
72 "<auth xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\" mechanism=\"X-OAUTH2\" "
73 "auth:service=\"oauth2\" auth:allow-generated-jid=\"true\" "
74 "auth:client-uses-full-bind-result=\"true\" "
75 "auth:allow-non-google-login=\"true\" "
76 "xmlns:auth=\"http://www.google.com/talk/protocol/auth\">" + cookie +
77 "</auth>");
78 sent_data_.clear();
79
80 login_handler_->OnDataReceived(
81 "<stream:stream from=\"google.com\" id=\"DCDDE5171CB2154A\" "
82 "version=\"1.0\" "
83 "xmlns:stream=\"http://etherx.jabber.org/streams\" "
84 "xmlns=\"jabber:client\">"
85 "<stream:features>"
86 "<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">"
87 "<mechanism>X-OAUTH2</mechanism>"
88 "<mechanism>X-GOOGLE-TOKEN</mechanism>"
89 "<mechanism>PLAIN</mechanism>"
90 "</mechanisms>"
91 "</stream:features>");
92 }
93
94 TEST_F(XmppLoginHandlerTest, SuccessfulAuth) {
95 HandshakeBase();
96
97 login_handler_->OnDataReceived(
98 "<success xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\"/>");
99 EXPECT_EQ(
100 sent_data_,
101 "<stream:stream to=\"google.com\" version=\"1.0\" "
102 "xmlns=\"jabber:client\" "
103 "xmlns:stream=\"http://etherx.jabber.org/streams\">"
104 "<iq type=\"set\" id=\"0\">"
105 "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\">"
106 "<resource>chromoting</resource>"
107 "</bind>"
108 "</iq>"
109 "<iq type=\"set\" id=\"1\">"
110 "<session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/>"
111 "</iq>");
112 sent_data_.clear();
113
114 login_handler_->OnDataReceived(
115 "<stream:stream from=\"google.com\" id=\"104FA10576E2AA80\" "
116 "version=\"1.0\" "
117 "xmlns:stream=\"http://etherx.jabber.org/streams\" "
118 "xmlns=\"jabber:client\">"
119 "<stream:features>"
120 "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"/>"
121 "<session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/>"
122 "</stream:features>"
123 "<iq id=\"0\" type=\"result\">"
124 "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\">"
125 "<jid>" + std::string(kTestUsername) + "/chromoting52B4920E</jid>"
126 "</bind>"
127 "</iq>"
128 "<iq type=\"result\" id=\"1\"/>");
129
130 EXPECT_EQ(jid_, std::string(kTestUsername) + "/chromoting52B4920E");
131 EXPECT_TRUE(parser_);
132 }
133
134 TEST_F(XmppLoginHandlerTest, StartTlsHandshake) {
135 login_handler_.reset(new remoting::XmppLoginHandler(
136 "google.com", kTestUsername, kTestToken, "oauth2", true, this));
137 login_handler_->Start();
138 EXPECT_FALSE(start_tls_called_);
139
140 EXPECT_EQ(sent_data_,
141 "<stream:stream to=\"google.com\" version=\"1.0\" "
142 "xmlns=\"jabber:client\" "
143 "xmlns:stream=\"http://etherx.jabber.org/streams\">"
144 "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>");
145 sent_data_.clear();
146
147 login_handler_->OnDataReceived(
148 "<stream:stream from=\"google.com\" id=\"78A87C70559EF28A\" "
149 "version=\"1.0\" "
150 "xmlns:stream=\"http://etherx.jabber.org/streams\" "
151 "xmlns=\"jabber:client\">"
152 "<stream:features>"
153 "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\">"
154 "<required/>"
155 "</starttls>"
156 "<mechanisms xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">"
157 "<mechanism>X-OAUTH2</mechanism>"
158 "<mechanism>X-GOOGLE-TOKEN</mechanism>"
159 "</mechanisms>"
160 "</stream:features>");
161
162 login_handler_->OnDataReceived(
163 "<proceed xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>");
164 EXPECT_TRUE(start_tls_called_);
165 }
166
167 TEST_F(XmppLoginHandlerTest, AuthError) {
168 HandshakeBase();
169
170 login_handler_->OnDataReceived(
171 "<failure xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">"
172 "<not-authorized/></failure>");
173 EXPECT_EQ(error_, SignalStrategy::AUTHENTICATION_FAILED);
174 }
175
176 TEST_F(XmppLoginHandlerTest, StreamParseError) {
177 HandshakeBase();
178 login_handler_->OnDataReceived("BAD DATA");
179 EXPECT_EQ(error_, SignalStrategy::PROTOCOL_ERROR);
180 }
181
182 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698