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

Side by Side Diff: net/quic/core/crypto/crypto_server_test.cc

Issue 2339433004: Use unique_ptrs to manage callback lifetimes in some QUIC code (Closed)
Patch Set: Created 4 years, 3 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 | « no previous file | net/quic/core/crypto/quic_crypto_server_config.h » ('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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 <algorithm> 5 #include <algorithm>
6 #include <cstdint> 6 #include <cstdint>
7 #include <memory> 7 #include <memory>
8 #include <ostream> 8 #include <ostream>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 bool should_succeed, 194 bool should_succeed,
195 const char* error_substr, 195 const char* error_substr,
196 bool* called) 196 bool* called)
197 : test_(test), 197 : test_(test),
198 should_succeed_(should_succeed), 198 should_succeed_(should_succeed),
199 error_substr_(error_substr), 199 error_substr_(error_substr),
200 called_(called) { 200 called_(called) {
201 *called_ = false; 201 *called_ = false;
202 } 202 }
203 203
204 void RunImpl(std::unique_ptr<Result> result, 204 void Run(std::unique_ptr<Result> result,
205 std::unique_ptr<ProofSource::Details> /* details */) override { 205 std::unique_ptr<ProofSource::Details> /* details */) override {
206 { 206 {
207 // Ensure that the strike register client lock is not held. 207 // Ensure that the strike register client lock is not held.
208 QuicCryptoServerConfigPeer peer(&test_->config_); 208 QuicCryptoServerConfigPeer peer(&test_->config_);
209 base::Lock* m = peer.GetStrikeRegisterClientLock(); 209 base::Lock* m = peer.GetStrikeRegisterClientLock();
210 // In Chromium, we will dead lock if the lock is held by the current 210 // In Chromium, we will dead lock if the lock is held by the current
211 // thread. Chromium doesn't have AssertNotHeld API call. 211 // thread. Chromium doesn't have AssertNotHeld API call.
212 // m->AssertNotHeld(); 212 // m->AssertNotHeld();
213 base::AutoLock lock(*m); 213 base::AutoLock lock(*m);
214 } 214 }
215 ASSERT_FALSE(*called_); 215 ASSERT_FALSE(*called_);
(...skipping 24 matching lines...) Expand all
240 EXPECT_EQ(client_address_.address(), decoder.ip()); 240 EXPECT_EQ(client_address_.address(), decoder.ip());
241 EXPECT_EQ(client_address_.port(), decoder.port()); 241 EXPECT_EQ(client_address_.port(), decoder.port());
242 } 242 }
243 243
244 void ShouldSucceed(const CryptoHandshakeMessage& message) { 244 void ShouldSucceed(const CryptoHandshakeMessage& message) {
245 bool called = false; 245 bool called = false;
246 IPAddress server_ip; 246 IPAddress server_ip;
247 config_.ValidateClientHello(message, client_address_.address(), server_ip, 247 config_.ValidateClientHello(message, client_address_.address(), server_ip,
248 supported_versions_.front(), &clock_, 248 supported_versions_.front(), &clock_,
249 &crypto_proof_, 249 &crypto_proof_,
250 new ValidateCallback(this, true, "", &called)); 250 std::unique_ptr<ValidateCallback>(
251 new ValidateCallback(this, true, "", &called)));
251 EXPECT_TRUE(called); 252 EXPECT_TRUE(called);
252 } 253 }
253 254
254 void ShouldFailMentioning(const char* error_substr, 255 void ShouldFailMentioning(const char* error_substr,
255 const CryptoHandshakeMessage& message) { 256 const CryptoHandshakeMessage& message) {
256 bool called = false; 257 bool called = false;
257 ShouldFailMentioning(error_substr, message, &called); 258 ShouldFailMentioning(error_substr, message, &called);
258 EXPECT_TRUE(called); 259 EXPECT_TRUE(called);
259 } 260 }
260 261
261 void ShouldFailMentioning(const char* error_substr, 262 void ShouldFailMentioning(const char* error_substr,
262 const CryptoHandshakeMessage& message, 263 const CryptoHandshakeMessage& message,
263 bool* called) { 264 bool* called) {
264 IPAddress server_ip; 265 IPAddress server_ip;
265 config_.ValidateClientHello( 266 config_.ValidateClientHello(
266 message, client_address_.address(), server_ip, 267 message, client_address_.address(), server_ip,
267 supported_versions_.front(), &clock_, &crypto_proof_, 268 supported_versions_.front(), &clock_, &crypto_proof_,
268 new ValidateCallback(this, false, error_substr, called)); 269 std::unique_ptr<ValidateCallback>(
270 new ValidateCallback(this, false, error_substr, called)));
269 } 271 }
270 272
271 void ProcessValidationResult(const ValidateCallback::Result& result, 273 void ProcessValidationResult(const ValidateCallback::Result& result,
272 bool should_succeed, 274 bool should_succeed,
273 const char* error_substr) { 275 const char* error_substr) {
274 IPAddress server_ip; 276 IPAddress server_ip;
275 DiversificationNonce diversification_nonce; 277 DiversificationNonce diversification_nonce;
276 string error_details; 278 string error_details;
277 QuicConnectionId server_designated_connection_id = 279 QuicConnectionId server_designated_connection_id =
278 rand_for_id_generation_.RandUint64(); 280 rand_for_id_generation_.RandUint64();
(...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after
1146 strike_register_client_ = new DelayedVerifyStrikeRegisterClient( 1148 strike_register_client_ = new DelayedVerifyStrikeRegisterClient(
1147 10000, // strike_register_max_entries 1149 10000, // strike_register_max_entries
1148 static_cast<uint32_t>(clock_.WallNow().ToUNIXSeconds()), 1150 static_cast<uint32_t>(clock_.WallNow().ToUNIXSeconds()),
1149 60, // strike_register_window_secs 1151 60, // strike_register_window_secs
1150 reinterpret_cast<const uint8_t*>(kOrbit.c_str()), 1152 reinterpret_cast<const uint8_t*>(kOrbit.c_str()),
1151 StrikeRegister::NO_STARTUP_PERIOD_NEEDED); 1153 StrikeRegister::NO_STARTUP_PERIOD_NEEDED);
1152 config_.SetStrikeRegisterClient(strike_register_client_); 1154 config_.SetStrikeRegisterClient(strike_register_client_);
1153 ASSERT_NO_FATAL_FAILURE(CryptoServerTest::SetUp()); 1155 ASSERT_NO_FATAL_FAILURE(CryptoServerTest::SetUp());
1154 strike_register_client_->StartDelayingVerification(); 1156 strike_register_client_->StartDelayingVerification();
1155 } 1157 }
1156 1158
Zhongyi Shi 2016/09/13 21:13:21 This code seems out of sync with internal. ShouldQ
Ryan Hamilton 2016/09/13 21:26:04 Yeah, I noticed that too! No follow-up==bad! Than
1157 DelayedVerifyStrikeRegisterClient* strike_register_client_; 1159 DelayedVerifyStrikeRegisterClient* strike_register_client_;
1158 }; 1160 };
1159 1161
1160 TEST_P(AsyncStrikeServerVerificationTest, AsyncReplayProtection) { 1162 TEST_P(AsyncStrikeServerVerificationTest, AsyncReplayProtection) {
1161 // This tests async validation with a strike register works. 1163 // This tests async validation with a strike register works.
1162 // clang-format off 1164 // clang-format off
1163 CryptoHandshakeMessage msg = CryptoTestUtils::Message( 1165 CryptoHandshakeMessage msg = CryptoTestUtils::Message(
1164 "CHLO", 1166 "CHLO",
1165 "PDMD", "X509", 1167 "PDMD", "X509",
1166 "AEAD", "AESG", 1168 "AEAD", "AESG",
1167 "KEXS", "C255", 1169 "KEXS", "C255",
1168 "SCID", scid_hex_.c_str(), 1170 "SCID", scid_hex_.c_str(),
1169 "#004b5453", srct_hex_.c_str(), 1171 "#004b5453", srct_hex_.c_str(),
1170 "PUBS", pub_hex_.c_str(), 1172 "PUBS", pub_hex_.c_str(),
1171 "NONC", nonce_hex_.c_str(), 1173 "NONC", nonce_hex_.c_str(),
1172 "VER\0", client_version_string_.c_str(), 1174 "VER\0", client_version_string_.c_str(),
1173 "$padding", static_cast<int>(kClientHelloMinimumSize), 1175 "$padding", static_cast<int>(kClientHelloMinimumSize),
1174 nullptr); 1176 nullptr);
1175 // clang-format on 1177 // clang-format on
1176 1178
1177 // Clear the message tag. 1179 // Clear the message tag.
1178 out_.set_tag(0); 1180 out_.set_tag(0);
1179 1181
1180 bool called = false; 1182 bool called = false;
1181 IPAddress server_ip; 1183 IPAddress server_ip;
1182 config_.ValidateClientHello(msg, client_address_.address(), server_ip, 1184 config_.ValidateClientHello(msg, client_address_.address(), server_ip,
1183 client_version_, &clock_, &crypto_proof_, 1185 client_version_, &clock_, &crypto_proof_,
1184 new ValidateCallback(this, true, "", &called)); 1186 std::unique_ptr<ValidateCallback>(
1187 new ValidateCallback(this, true, "", &called)));
1185 // The verification request was queued. 1188 // The verification request was queued.
1186 ASSERT_FALSE(called); 1189 ASSERT_FALSE(called);
1187 EXPECT_EQ(0u, out_.tag()); 1190 EXPECT_EQ(0u, out_.tag());
1188 EXPECT_EQ(1, strike_register_client_->PendingVerifications()); 1191 EXPECT_EQ(1, strike_register_client_->PendingVerifications());
1189 1192
1190 // Continue processing the verification request. 1193 // Continue processing the verification request.
1191 strike_register_client_->RunPendingVerifications(); 1194 strike_register_client_->RunPendingVerifications();
1192 ASSERT_TRUE(called); 1195 ASSERT_TRUE(called);
1193 EXPECT_EQ(0, strike_register_client_->PendingVerifications()); 1196 EXPECT_EQ(0, strike_register_client_->PendingVerifications());
1194 // The message should be accepted now. 1197 // The message should be accepted now.
1195 EXPECT_EQ(kSHLO, out_.tag()); 1198 EXPECT_EQ(kSHLO, out_.tag());
1196 1199
1197 // Rejected if replayed. 1200 // Rejected if replayed.
1198 config_.ValidateClientHello(msg, client_address_.address(), server_ip, 1201 config_.ValidateClientHello(msg, client_address_.address(), server_ip,
1199 client_version_, &clock_, &crypto_proof_, 1202 client_version_, &clock_, &crypto_proof_,
1200 new ValidateCallback(this, true, "", &called)); 1203 std::unique_ptr<ValidateCallback>(
1204 new ValidateCallback(this, true, "", &called)) );
1201 // The verification request was queued. 1205 // The verification request was queued.
1202 ASSERT_FALSE(called); 1206 ASSERT_FALSE(called);
1203 EXPECT_EQ(1, strike_register_client_->PendingVerifications()); 1207 EXPECT_EQ(1, strike_register_client_->PendingVerifications());
1204 1208
1205 strike_register_client_->RunPendingVerifications(); 1209 strike_register_client_->RunPendingVerifications();
1206 ASSERT_TRUE(called); 1210 ASSERT_TRUE(called);
1207 EXPECT_EQ(0, strike_register_client_->PendingVerifications()); 1211 EXPECT_EQ(0, strike_register_client_->PendingVerifications());
1208 // The message should be rejected now. 1212 // The message should be rejected now.
1209 CheckRejectTag(); 1213 CheckRejectTag();
1210 } 1214 }
(...skipping 30 matching lines...) Expand all
1241 EXPECT_EQ(0, strike_register_client_->PendingVerifications()); 1245 EXPECT_EQ(0, strike_register_client_->PendingVerifications());
1242 } else { 1246 } else {
1243 // version 33. 1247 // version 33.
1244 ASSERT_EQ(kSHLO, out_.tag()); 1248 ASSERT_EQ(kSHLO, out_.tag());
1245 CheckServerHello(out_); 1249 CheckServerHello(out_);
1246 } 1250 }
1247 } 1251 }
1248 1252
1249 } // namespace test 1253 } // namespace test
1250 } // namespace net 1254 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/quic/core/crypto/quic_crypto_server_config.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698