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