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

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

Issue 2808283002: Improve tests for Mixed-Case JIDs. (Closed)
Patch Set: fix tests Created 3 years, 8 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 | « remoting/protocol/fake_authenticator.h ('k') | remoting/protocol/fake_session.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/fake_authenticator.h" 5 #include "remoting/protocol/fake_authenticator.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 if (did_write_bytes_) 82 if (did_write_bytes_)
83 CallDoneCallback(); 83 CallDoneCallback();
84 } 84 }
85 85
86 void FakeChannelAuthenticator::CallDoneCallback() { 86 void FakeChannelAuthenticator::CallDoneCallback() {
87 if (result_ != net::OK) 87 if (result_ != net::OK)
88 socket_.reset(); 88 socket_.reset();
89 base::ResetAndReturn(&done_callback_).Run(result_, std::move(socket_)); 89 base::ResetAndReturn(&done_callback_).Run(result_, std::move(socket_));
90 } 90 }
91 91
92 FakeAuthenticator::Config::Config() {}
93 FakeAuthenticator::Config::Config(Action action) : action(action) {}
94 FakeAuthenticator::Config::Config(int round_trips, Action action, bool async)
95 : round_trips(round_trips), action(action), async(async) {}
96
92 FakeAuthenticator::FakeAuthenticator(Type type, 97 FakeAuthenticator::FakeAuthenticator(Type type,
93 int round_trips, 98 FakeAuthenticator::Config config,
94 Action action, 99 const std::string& local_id,
95 bool async) 100 const std::string& remote_id)
96 : type_(type), round_trips_(round_trips), action_(action), async_(async) {} 101 : type_(type), config_(config), local_id_(local_id), remote_id_(remote_id) {
102 EXPECT_TRUE((!local_id_.empty() && !remote_id_.empty()) ||
103 config.round_trips == 0);
104 }
105
106 FakeAuthenticator::FakeAuthenticator(Action action)
107 : FakeAuthenticator(CLIENT,
108 FakeAuthenticator::Config(0, action, true),
109 std::string(),
110 std::string()) {}
97 111
98 FakeAuthenticator::~FakeAuthenticator() {} 112 FakeAuthenticator::~FakeAuthenticator() {}
99 113
100 void FakeAuthenticator::set_messages_till_started(int messages) { 114 void FakeAuthenticator::set_messages_till_started(int messages) {
101 messages_till_started_ = messages; 115 messages_till_started_ = messages;
102 } 116 }
103 117
104 void FakeAuthenticator::Resume() { 118 void FakeAuthenticator::Resume() {
105 base::ResetAndReturn(&resume_closure_).Run(); 119 base::ResetAndReturn(&resume_closure_).Run();
106 } 120 }
107 121
108 Authenticator::State FakeAuthenticator::state() const { 122 Authenticator::State FakeAuthenticator::state() const {
109 EXPECT_LE(messages_, round_trips_ * 2); 123 EXPECT_LE(messages_, config_.round_trips * 2);
110 124
111 if (messages_ == pause_message_index_ && !resume_closure_.is_null()) 125 if (messages_ == pause_message_index_ && !resume_closure_.is_null())
112 return PROCESSING_MESSAGE; 126 return PROCESSING_MESSAGE;
113 127
114 if (messages_ >= round_trips_ * 2) { 128 if (messages_ >= config_.round_trips * 2) {
115 if (action_ == REJECT) { 129 if (config_.action == REJECT) {
116 return REJECTED; 130 return REJECTED;
117 } else { 131 } else {
118 return ACCEPTED; 132 return ACCEPTED;
119 } 133 }
120 } 134 }
121 135
122 // Don't send the last message if this is a host that wants to 136 // Don't send the last message if this is a host that wants to
123 // reject a connection. 137 // reject a connection.
124 if (messages_ == round_trips_ * 2 - 1 && 138 if (messages_ == config_.round_trips * 2 - 1 && type_ == HOST &&
125 type_ == HOST && action_ == REJECT) { 139 config_.action == REJECT) {
126 return REJECTED; 140 return REJECTED;
127 } 141 }
128 142
129 // We are not done yet. process next message. 143 // We are not done yet. process next message.
130 if ((messages_ % 2 == 0 && type_ == CLIENT) || 144 if ((messages_ % 2 == 0 && type_ == CLIENT) ||
131 (messages_ % 2 == 1 && type_ == HOST)) { 145 (messages_ % 2 == 1 && type_ == HOST)) {
132 return MESSAGE_READY; 146 return MESSAGE_READY;
133 } else { 147 } else {
134 return WAITING_MESSAGE; 148 return WAITING_MESSAGE;
135 } 149 }
136 } 150 }
137 151
138 bool FakeAuthenticator::started() const { 152 bool FakeAuthenticator::started() const {
139 return messages_ > messages_till_started_; 153 return messages_ > messages_till_started_;
140 } 154 }
141 155
142 Authenticator::RejectionReason FakeAuthenticator::rejection_reason() const { 156 Authenticator::RejectionReason FakeAuthenticator::rejection_reason() const {
143 EXPECT_EQ(REJECTED, state()); 157 EXPECT_EQ(REJECTED, state());
144 return INVALID_CREDENTIALS; 158 return INVALID_CREDENTIALS;
145 } 159 }
146 160
147 void FakeAuthenticator::ProcessMessage(const buzz::XmlElement* message, 161 void FakeAuthenticator::ProcessMessage(const buzz::XmlElement* message,
148 const base::Closure& resume_callback) { 162 const base::Closure& resume_callback) {
149 EXPECT_EQ(WAITING_MESSAGE, state()); 163 EXPECT_EQ(WAITING_MESSAGE, state());
150 std::string id = 164 std::string id =
151 message->TextNamed(buzz::QName(kChromotingXmlNamespace, "id")); 165 message->TextNamed(buzz::QName(kChromotingXmlNamespace, "id"));
152 EXPECT_EQ(id, base::IntToString(messages_)); 166 EXPECT_EQ(id, base::IntToString(messages_));
153 167
154 // On the client receive the key in the last message. 168 // On the client receive the key in the last message.
155 if (type_ == CLIENT && messages_ == round_trips_ * 2 - 1) { 169 if (type_ == CLIENT && messages_ == config_.round_trips * 2 - 1) {
156 std::string key_base64 = 170 std::string key_base64 =
157 message->TextNamed(buzz::QName(kChromotingXmlNamespace, "key")); 171 message->TextNamed(buzz::QName(kChromotingXmlNamespace, "key"));
158 EXPECT_TRUE(!key_base64.empty()); 172 EXPECT_TRUE(!key_base64.empty());
159 EXPECT_TRUE(base::Base64Decode(key_base64, &auth_key_)); 173 EXPECT_TRUE(base::Base64Decode(key_base64, &auth_key_));
160 } 174 }
161 175
176 // Receive peer's id.
177 if (messages_ < 2) {
178 EXPECT_EQ(remote_id_, message->Attr(buzz::QName("", "id")));
179 }
180
162 ++messages_; 181 ++messages_;
163 if (messages_ == pause_message_index_) { 182 if (messages_ == pause_message_index_) {
164 resume_closure_ = resume_callback; 183 resume_closure_ = resume_callback;
165 return; 184 return;
166 } 185 }
167 resume_callback.Run(); 186 resume_callback.Run();
168 } 187 }
169 188
170 std::unique_ptr<buzz::XmlElement> FakeAuthenticator::GetNextMessage() { 189 std::unique_ptr<buzz::XmlElement> FakeAuthenticator::GetNextMessage() {
171 EXPECT_EQ(MESSAGE_READY, state()); 190 EXPECT_EQ(MESSAGE_READY, state());
172 191
173 std::unique_ptr<buzz::XmlElement> result(new buzz::XmlElement( 192 std::unique_ptr<buzz::XmlElement> result(new buzz::XmlElement(
174 buzz::QName(kChromotingXmlNamespace, "authentication"))); 193 buzz::QName(kChromotingXmlNamespace, "authentication")));
175 buzz::XmlElement* id = new buzz::XmlElement( 194 buzz::XmlElement* id = new buzz::XmlElement(
176 buzz::QName(kChromotingXmlNamespace, "id")); 195 buzz::QName(kChromotingXmlNamespace, "id"));
177 id->AddText(base::IntToString(messages_)); 196 id->AddText(base::IntToString(messages_));
178 result->AddElement(id); 197 result->AddElement(id);
179 198
199 // Send local id in the first outgoing message.
200 if (messages_ < 2) {
201 result->AddAttr(buzz::QName("", "id"), local_id_);
202 }
203
180 // Add authentication key in the last message sent from host to client. 204 // Add authentication key in the last message sent from host to client.
181 if (type_ == HOST && messages_ == round_trips_ * 2 - 1) { 205 if (type_ == HOST && messages_ == config_.round_trips * 2 - 1) {
182 auth_key_ = base::RandBytesAsString(16); 206 auth_key_ = base::RandBytesAsString(16);
183 buzz::XmlElement* key = new buzz::XmlElement( 207 buzz::XmlElement* key = new buzz::XmlElement(
184 buzz::QName(kChromotingXmlNamespace, "key")); 208 buzz::QName(kChromotingXmlNamespace, "key"));
185 std::string key_base64; 209 std::string key_base64;
186 base::Base64Encode(auth_key_, &key_base64); 210 base::Base64Encode(auth_key_, &key_base64);
187 key->AddText(key_base64); 211 key->AddText(key_base64);
188 result->AddElement(key); 212 result->AddElement(key);
189 } 213 }
190 214
191 ++messages_; 215 ++messages_;
192 return result; 216 return result;
193 } 217 }
194 218
195 const std::string& FakeAuthenticator::GetAuthKey() const { 219 const std::string& FakeAuthenticator::GetAuthKey() const {
196 EXPECT_EQ(ACCEPTED, state()); 220 EXPECT_EQ(ACCEPTED, state());
197 DCHECK(!auth_key_.empty()); 221 DCHECK(!auth_key_.empty());
198 return auth_key_; 222 return auth_key_;
199 } 223 }
200 224
201 std::unique_ptr<ChannelAuthenticator> 225 std::unique_ptr<ChannelAuthenticator>
202 FakeAuthenticator::CreateChannelAuthenticator() const { 226 FakeAuthenticator::CreateChannelAuthenticator() const {
203 EXPECT_EQ(ACCEPTED, state()); 227 EXPECT_EQ(ACCEPTED, state());
204 return base::MakeUnique<FakeChannelAuthenticator>(action_ != REJECT_CHANNEL, 228 return base::MakeUnique<FakeChannelAuthenticator>(
205 async_); 229 config_.action != REJECT_CHANNEL, config_.async);
206 } 230 }
207 231
208 FakeHostAuthenticatorFactory::FakeHostAuthenticatorFactory( 232 FakeHostAuthenticatorFactory::FakeHostAuthenticatorFactory(
209 int round_trips,
210 int messages_till_started, 233 int messages_till_started,
211 FakeAuthenticator::Action action, 234 FakeAuthenticator::Config config)
212 bool async) 235 : messages_till_started_(messages_till_started), config_(config) {}
213 : round_trips_(round_trips),
214 messages_till_started_(messages_till_started),
215 action_(action),
216 async_(async) {}
217 FakeHostAuthenticatorFactory::~FakeHostAuthenticatorFactory() {} 236 FakeHostAuthenticatorFactory::~FakeHostAuthenticatorFactory() {}
218 237
219 std::unique_ptr<Authenticator> 238 std::unique_ptr<Authenticator>
220 FakeHostAuthenticatorFactory::CreateAuthenticator( 239 FakeHostAuthenticatorFactory::CreateAuthenticator(
221 const std::string& local_jid, 240 const std::string& local_jid,
222 const std::string& remote_jid) { 241 const std::string& remote_jid) {
223 std::unique_ptr<FakeAuthenticator> authenticator(new FakeAuthenticator( 242 std::unique_ptr<FakeAuthenticator> authenticator(new FakeAuthenticator(
224 FakeAuthenticator::HOST, round_trips_, action_, async_)); 243 FakeAuthenticator::HOST, config_, local_jid, remote_jid));
225 authenticator->set_messages_till_started(messages_till_started_); 244 authenticator->set_messages_till_started(messages_till_started_);
226 return std::move(authenticator); 245 return std::move(authenticator);
227 } 246 }
228 247
229 } // namespace protocol 248 } // namespace protocol
230 } // namespace remoting 249 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/protocol/fake_authenticator.h ('k') | remoting/protocol/fake_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698