OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 rtc::CreateRandomString(cricket::ICE_PWD_LENGTH), cricket::ICEMODE_FULL, | 228 rtc::CreateRandomString(cricket::ICE_PWD_LENGTH), cricket::ICEMODE_FULL, |
229 cricket::CONNECTIONROLE_NONE, nullptr); | 229 cricket::CONNECTIONROLE_NONE, nullptr); |
230 transport_->SetLocalTransportDescription(faketransport_desc, | 230 transport_->SetLocalTransportDescription(faketransport_desc, |
231 cricket::CA_OFFER, nullptr); | 231 cricket::CA_OFFER, nullptr); |
232 transport_->ConnectChannels(); | 232 transport_->ConnectChannels(); |
233 EXPECT_TRUE(transport_->GetStats(&stats)); | 233 EXPECT_TRUE(transport_->GetStats(&stats)); |
234 ASSERT_EQ(1U, stats.channel_stats.size()); | 234 ASSERT_EQ(1U, stats.channel_stats.size()); |
235 EXPECT_EQ(1, stats.channel_stats[0].component); | 235 EXPECT_EQ(1, stats.channel_stats[0].component); |
236 } | 236 } |
237 | 237 |
| 238 // Tests that VerifyCertificateFingerprint only returns true when the |
| 239 // certificate matches the fingerprint. |
| 240 TEST_F(TransportTest, TestVerifyCertificateFingerprint) { |
| 241 std::string error_desc; |
| 242 EXPECT_FALSE( |
| 243 transport_->VerifyCertificateFingerprint(nullptr, nullptr, &error_desc)); |
| 244 rtc::KeyType key_types[] = {rtc::KT_RSA, rtc::KT_ECDSA}; |
| 245 |
| 246 for (auto& key_type : key_types) { |
| 247 rtc::scoped_refptr<rtc::RTCCertificate> certificate = |
| 248 rtc::RTCCertificate::Create(rtc::scoped_ptr<rtc::SSLIdentity>( |
| 249 rtc::SSLIdentity::Generate("testing", key_type))); |
| 250 ASSERT_NE(nullptr, certificate); |
| 251 |
| 252 std::string digest_algorithm; |
| 253 ASSERT_TRUE(certificate->ssl_certificate().GetSignatureDigestAlgorithm( |
| 254 &digest_algorithm)); |
| 255 ASSERT_FALSE(digest_algorithm.empty()); |
| 256 rtc::scoped_ptr<rtc::SSLFingerprint> good_fingerprint( |
| 257 rtc::SSLFingerprint::Create(digest_algorithm, certificate->identity())); |
| 258 ASSERT_NE(nullptr, good_fingerprint); |
| 259 |
| 260 EXPECT_TRUE(transport_->VerifyCertificateFingerprint( |
| 261 certificate.get(), good_fingerprint.get(), &error_desc)); |
| 262 EXPECT_FALSE(transport_->VerifyCertificateFingerprint( |
| 263 certificate.get(), nullptr, &error_desc)); |
| 264 EXPECT_FALSE(transport_->VerifyCertificateFingerprint( |
| 265 nullptr, good_fingerprint.get(), &error_desc)); |
| 266 |
| 267 rtc::SSLFingerprint bad_fingerprint = *good_fingerprint; |
| 268 bad_fingerprint.digest.AppendData("0", 1); |
| 269 EXPECT_FALSE(transport_->VerifyCertificateFingerprint( |
| 270 certificate.get(), &bad_fingerprint, &error_desc)); |
| 271 } |
| 272 } |
| 273 |
| 274 // Tests that NegotiateRole sets the SSL role correctly. |
| 275 TEST_F(TransportTest, TestNegotiateRole) { |
| 276 TransportDescription local_desc(kIceUfrag1, kIcePwd1); |
| 277 TransportDescription remote_desc(kIceUfrag2, kIcePwd2); |
| 278 |
| 279 struct NegotiateRoleParams { |
| 280 cricket::ConnectionRole local_role; |
| 281 cricket::ConnectionRole remote_role; |
| 282 cricket::ContentAction local_action; |
| 283 cricket::ContentAction remote_action; |
| 284 }; |
| 285 |
| 286 rtc::SSLRole ssl_role; |
| 287 std::string error_desc; |
| 288 |
| 289 // Parameters which set the SSL role to SSL_CLIENT. |
| 290 NegotiateRoleParams valid_client_params[] = { |
| 291 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTPASS, |
| 292 cricket::CA_ANSWER, cricket::CA_OFFER}, |
| 293 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTPASS, |
| 294 cricket::CA_PRANSWER, cricket::CA_OFFER}, |
| 295 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_PASSIVE, |
| 296 cricket::CA_OFFER, cricket::CA_ANSWER}, |
| 297 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_PASSIVE, |
| 298 cricket::CA_OFFER, cricket::CA_PRANSWER}}; |
| 299 |
| 300 for (auto& param : valid_client_params) { |
| 301 local_desc.connection_role = param.local_role; |
| 302 remote_desc.connection_role = param.remote_role; |
| 303 |
| 304 ASSERT_TRUE(transport_->SetRemoteTransportDescription( |
| 305 remote_desc, param.remote_action, nullptr)); |
| 306 ASSERT_TRUE(transport_->SetLocalTransportDescription( |
| 307 local_desc, param.local_action, nullptr)); |
| 308 EXPECT_TRUE( |
| 309 transport_->NegotiateRole(param.local_action, &ssl_role, &error_desc)); |
| 310 EXPECT_EQ(rtc::SSL_CLIENT, ssl_role); |
| 311 } |
| 312 |
| 313 // Parameters which set the SSL role to SSL_SERVER. |
| 314 NegotiateRoleParams valid_server_params[] = { |
| 315 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTPASS, |
| 316 cricket::CA_ANSWER, cricket::CA_OFFER}, |
| 317 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTPASS, |
| 318 cricket::CA_PRANSWER, cricket::CA_OFFER}, |
| 319 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTIVE, |
| 320 cricket::CA_OFFER, cricket::CA_ANSWER}, |
| 321 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTIVE, |
| 322 cricket::CA_OFFER, cricket::CA_PRANSWER}}; |
| 323 |
| 324 for (auto& param : valid_server_params) { |
| 325 local_desc.connection_role = param.local_role; |
| 326 remote_desc.connection_role = param.remote_role; |
| 327 |
| 328 ASSERT_TRUE(transport_->SetRemoteTransportDescription( |
| 329 remote_desc, param.remote_action, nullptr)); |
| 330 ASSERT_TRUE(transport_->SetLocalTransportDescription( |
| 331 local_desc, param.local_action, nullptr)); |
| 332 EXPECT_TRUE( |
| 333 transport_->NegotiateRole(param.local_action, &ssl_role, &error_desc)); |
| 334 EXPECT_EQ(rtc::SSL_SERVER, ssl_role); |
| 335 } |
| 336 |
| 337 // Invalid parameters due to both peers having a duplicate role. |
| 338 NegotiateRoleParams duplicate_params[] = { |
| 339 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTIVE, |
| 340 cricket::CA_ANSWER, cricket::CA_OFFER}, |
| 341 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTPASS, |
| 342 cricket::CA_ANSWER, cricket::CA_OFFER}, |
| 343 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_PASSIVE, |
| 344 cricket::CA_ANSWER, cricket::CA_OFFER}, |
| 345 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTIVE, |
| 346 cricket::CA_PRANSWER, cricket::CA_OFFER}, |
| 347 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTPASS, |
| 348 cricket::CA_PRANSWER, cricket::CA_OFFER}, |
| 349 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_PASSIVE, |
| 350 cricket::CA_PRANSWER, cricket::CA_OFFER}, |
| 351 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTIVE, |
| 352 cricket::CA_OFFER, cricket::CA_ANSWER}, |
| 353 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTPASS, |
| 354 cricket::CA_OFFER, cricket::CA_ANSWER}, |
| 355 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_PASSIVE, |
| 356 cricket::CA_OFFER, cricket::CA_ANSWER}, |
| 357 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTIVE, |
| 358 cricket::CA_OFFER, cricket::CA_PRANSWER}, |
| 359 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTPASS, |
| 360 cricket::CA_OFFER, cricket::CA_PRANSWER}, |
| 361 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_PASSIVE, |
| 362 cricket::CA_OFFER, cricket::CA_PRANSWER}}; |
| 363 |
| 364 for (auto& param : duplicate_params) { |
| 365 local_desc.connection_role = param.local_role; |
| 366 remote_desc.connection_role = param.remote_role; |
| 367 |
| 368 ASSERT_TRUE(transport_->SetRemoteTransportDescription( |
| 369 remote_desc, param.remote_action, nullptr)); |
| 370 ASSERT_TRUE(transport_->SetLocalTransportDescription( |
| 371 local_desc, param.local_action, nullptr)); |
| 372 EXPECT_FALSE( |
| 373 transport_->NegotiateRole(param.local_action, &ssl_role, &error_desc)); |
| 374 } |
| 375 |
| 376 // Invalid parameters due to the offerer not using ACTPASS. |
| 377 NegotiateRoleParams offerer_without_actpass_params[] = { |
| 378 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_PASSIVE, |
| 379 cricket::CA_ANSWER, cricket::CA_OFFER}, |
| 380 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTIVE, |
| 381 cricket::CA_ANSWER, cricket::CA_OFFER}, |
| 382 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_PASSIVE, |
| 383 cricket::CA_ANSWER, cricket::CA_OFFER}, |
| 384 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_PASSIVE, |
| 385 cricket::CA_PRANSWER, cricket::CA_OFFER}, |
| 386 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTIVE, |
| 387 cricket::CA_PRANSWER, cricket::CA_OFFER}, |
| 388 {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_PASSIVE, |
| 389 cricket::CA_PRANSWER, cricket::CA_OFFER}, |
| 390 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_PASSIVE, |
| 391 cricket::CA_OFFER, cricket::CA_ANSWER}, |
| 392 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTIVE, |
| 393 cricket::CA_OFFER, cricket::CA_ANSWER}, |
| 394 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTPASS, |
| 395 cricket::CA_OFFER, cricket::CA_ANSWER}, |
| 396 {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_PASSIVE, |
| 397 cricket::CA_OFFER, cricket::CA_PRANSWER}, |
| 398 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTIVE, |
| 399 cricket::CA_OFFER, cricket::CA_PRANSWER}, |
| 400 {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTPASS, |
| 401 cricket::CA_OFFER, cricket::CA_PRANSWER}}; |
| 402 |
| 403 for (auto& param : offerer_without_actpass_params) { |
| 404 local_desc.connection_role = param.local_role; |
| 405 remote_desc.connection_role = param.remote_role; |
| 406 |
| 407 ASSERT_TRUE(transport_->SetRemoteTransportDescription( |
| 408 remote_desc, param.remote_action, nullptr)); |
| 409 ASSERT_TRUE(transport_->SetLocalTransportDescription( |
| 410 local_desc, param.local_action, nullptr)); |
| 411 EXPECT_FALSE( |
| 412 transport_->NegotiateRole(param.local_action, &ssl_role, &error_desc)); |
| 413 } |
| 414 } |
OLD | NEW |