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

Unified Diff: webrtc/p2p/base/transport_unittest.cc

Issue 2553043004: Revert of Refactoring that removes P2PTransport and DtlsTransport classes. (Closed)
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/p2p/base/transport.cc ('k') | webrtc/p2p/base/transportchannel.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/p2p/base/transport_unittest.cc
diff --git a/webrtc/p2p/base/transport_unittest.cc b/webrtc/p2p/base/transport_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d119e833672ae3fed1d6a6957e98951ff2e14fdc
--- /dev/null
+++ b/webrtc/p2p/base/transport_unittest.cc
@@ -0,0 +1,423 @@
+/*
+ * Copyright 2011 The WebRTC Project Authors. All rights reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include <memory>
+
+#include "webrtc/base/fakesslidentity.h"
+#include "webrtc/base/gunit.h"
+#include "webrtc/base/network.h"
+#include "webrtc/p2p/base/faketransportcontroller.h"
+#include "webrtc/p2p/base/p2ptransport.h"
+
+using cricket::Transport;
+using cricket::FakeTransport;
+using cricket::TransportChannel;
+using cricket::FakeTransportChannel;
+using cricket::IceRole;
+using cricket::TransportDescription;
+using rtc::SocketAddress;
+
+static const char kIceUfrag1[] = "TESTICEUFRAG0001";
+static const char kIcePwd1[] = "TESTICEPWD00000000000001";
+
+static const char kIceUfrag2[] = "TESTICEUFRAG0002";
+static const char kIcePwd2[] = "TESTICEPWD00000000000002";
+
+class TransportTest : public testing::Test,
+ public sigslot::has_slots<> {
+ public:
+ TransportTest()
+ : transport_(new FakeTransport("test content name")), channel_(NULL) {}
+ ~TransportTest() {
+ transport_->DestroyAllChannels();
+ }
+ bool SetupChannel() {
+ channel_ = CreateChannel(1);
+ return (channel_ != NULL);
+ }
+ FakeTransportChannel* CreateChannel(int component) {
+ return static_cast<FakeTransportChannel*>(
+ transport_->CreateChannel(component));
+ }
+ void DestroyChannel() {
+ transport_->DestroyChannel(1);
+ channel_ = NULL;
+ }
+
+ protected:
+ std::unique_ptr<FakeTransport> transport_;
+ FakeTransportChannel* channel_;
+};
+
+// This test verifies channels are created with proper ICE
+// role, tiebreaker and remote ice mode and credentials after offer and
+// answer negotiations.
+TEST_F(TransportTest, TestChannelIceParameters) {
+ transport_->SetIceRole(cricket::ICEROLE_CONTROLLING);
+ transport_->SetIceTiebreaker(99U);
+ cricket::TransportDescription local_desc(kIceUfrag1, kIcePwd1);
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(local_desc,
+ cricket::CA_OFFER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+ EXPECT_TRUE(SetupChannel());
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+ EXPECT_EQ(cricket::ICEMODE_FULL, channel_->remote_ice_mode());
+ EXPECT_EQ(kIceUfrag1, channel_->ice_ufrag());
+ EXPECT_EQ(kIcePwd1, channel_->ice_pwd());
+
+ cricket::TransportDescription remote_desc(kIceUfrag1, kIcePwd1);
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(remote_desc,
+ cricket::CA_ANSWER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+ EXPECT_EQ(99U, channel_->IceTiebreaker());
+ EXPECT_EQ(cricket::ICEMODE_FULL, channel_->remote_ice_mode());
+ // Changing the transport role from CONTROLLING to CONTROLLED.
+ transport_->SetIceRole(cricket::ICEROLE_CONTROLLED);
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLED, channel_->GetIceRole());
+ EXPECT_EQ(cricket::ICEMODE_FULL, channel_->remote_ice_mode());
+ EXPECT_EQ(kIceUfrag1, channel_->remote_ice_ufrag());
+ EXPECT_EQ(kIcePwd1, channel_->remote_ice_pwd());
+}
+
+// Verifies that IceCredentialsChanged returns true when either ufrag or pwd
+// changed, and false in other cases.
+TEST_F(TransportTest, TestIceCredentialsChanged) {
+ EXPECT_TRUE(cricket::IceCredentialsChanged("u1", "p1", "u2", "p2"));
+ EXPECT_TRUE(cricket::IceCredentialsChanged("u1", "p1", "u2", "p1"));
+ EXPECT_TRUE(cricket::IceCredentialsChanged("u1", "p1", "u1", "p2"));
+ EXPECT_FALSE(cricket::IceCredentialsChanged("u1", "p1", "u1", "p1"));
+}
+
+// This test verifies that the callee's ICE role remains the same when the
+// callee triggers an ICE restart.
+//
+// RFC5245 currently says that the role *should* change on an ICE restart,
+// but this rule was intended for an ICE restart that occurs when an endpoint
+// is changing to ICE lite (which we already handle). See discussion here:
+// https://mailarchive.ietf.org/arch/msg/ice/C0_QRCTNcwtvUF12y28jQicPR10
+TEST_F(TransportTest, TestIceControlledToControllingOnIceRestart) {
+ EXPECT_TRUE(SetupChannel());
+ transport_->SetIceRole(cricket::ICEROLE_CONTROLLED);
+
+ cricket::TransportDescription desc(kIceUfrag1, kIcePwd1);
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(desc,
+ cricket::CA_OFFER,
+ NULL));
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(desc,
+ cricket::CA_ANSWER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLED, transport_->ice_role());
+
+ cricket::TransportDescription new_local_desc(kIceUfrag2, kIcePwd2);
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(new_local_desc,
+ cricket::CA_OFFER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLED, transport_->ice_role());
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLED, channel_->GetIceRole());
+}
+
+// This test verifies that the caller's ICE role remains the same when the
+// callee triggers an ICE restart.
+//
+// RFC5245 currently says that the role *should* change on an ICE restart,
+// but this rule was intended for an ICE restart that occurs when an endpoint
+// is changing to ICE lite (which we already handle). See discussion here:
+// https://mailarchive.ietf.org/arch/msg/ice/C0_QRCTNcwtvUF12y28jQicPR10
+TEST_F(TransportTest, TestIceControllingToControlledOnIceRestart) {
+ EXPECT_TRUE(SetupChannel());
+ transport_->SetIceRole(cricket::ICEROLE_CONTROLLING);
+
+ cricket::TransportDescription desc(kIceUfrag1, kIcePwd1);
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(desc,
+ cricket::CA_OFFER,
+ NULL));
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(desc,
+ cricket::CA_ANSWER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+
+ cricket::TransportDescription new_local_desc(kIceUfrag2, kIcePwd2);
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(new_local_desc,
+ cricket::CA_ANSWER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+}
+
+// This test verifies that the caller's ICE role is still controlling after the
+// callee triggers ICE restart if the callee's ICE mode is LITE.
+TEST_F(TransportTest, TestIceControllingOnIceRestartIfRemoteIsIceLite) {
+ EXPECT_TRUE(SetupChannel());
+ transport_->SetIceRole(cricket::ICEROLE_CONTROLLING);
+
+ cricket::TransportDescription desc(kIceUfrag1, kIcePwd1);
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(desc,
+ cricket::CA_OFFER,
+ NULL));
+
+ cricket::TransportDescription remote_desc(
+ std::vector<std::string>(), kIceUfrag1, kIcePwd1, cricket::ICEMODE_LITE,
+ cricket::CONNECTIONROLE_NONE, NULL);
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(remote_desc,
+ cricket::CA_ANSWER,
+ NULL));
+
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+
+ cricket::TransportDescription new_local_desc(kIceUfrag2, kIcePwd2);
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(new_local_desc,
+ cricket::CA_ANSWER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+}
+
+// Tests channel role is reversed after receiving ice-lite from remote.
+TEST_F(TransportTest, TestSetRemoteIceLiteInOffer) {
+ transport_->SetIceRole(cricket::ICEROLE_CONTROLLED);
+ cricket::TransportDescription remote_desc(
+ std::vector<std::string>(), kIceUfrag1, kIcePwd1, cricket::ICEMODE_LITE,
+ cricket::CONNECTIONROLE_ACTPASS, NULL);
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(remote_desc,
+ cricket::CA_OFFER,
+ NULL));
+ cricket::TransportDescription local_desc(kIceUfrag1, kIcePwd1);
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(local_desc,
+ cricket::CA_ANSWER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+ EXPECT_TRUE(SetupChannel());
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+ EXPECT_EQ(cricket::ICEMODE_LITE, channel_->remote_ice_mode());
+}
+
+// Tests ice-lite in remote answer.
+TEST_F(TransportTest, TestSetRemoteIceLiteInAnswer) {
+ transport_->SetIceRole(cricket::ICEROLE_CONTROLLING);
+ cricket::TransportDescription local_desc(kIceUfrag1, kIcePwd1);
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(local_desc,
+ cricket::CA_OFFER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+ EXPECT_TRUE(SetupChannel());
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+ // Channels will be created in ICEFULL_MODE.
+ EXPECT_EQ(cricket::ICEMODE_FULL, channel_->remote_ice_mode());
+ cricket::TransportDescription remote_desc(
+ std::vector<std::string>(), kIceUfrag1, kIcePwd1, cricket::ICEMODE_LITE,
+ cricket::CONNECTIONROLE_NONE, NULL);
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(remote_desc,
+ cricket::CA_ANSWER,
+ NULL));
+ EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+ // After receiving remote description with ICEMODE_LITE, channel should
+ // have mode set to ICEMODE_LITE.
+ EXPECT_EQ(cricket::ICEMODE_LITE, channel_->remote_ice_mode());
+}
+
+TEST_F(TransportTest, TestGetStats) {
+ EXPECT_TRUE(SetupChannel());
+ cricket::TransportStats stats;
+ EXPECT_TRUE(transport_->GetStats(&stats));
+ // Note that this tests the behavior of a FakeTransportChannel.
+ ASSERT_EQ(1U, stats.channel_stats.size());
+ EXPECT_EQ(1, stats.channel_stats[0].component);
+ // Set local transport description for FakeTransport before connecting.
+ TransportDescription faketransport_desc(
+ std::vector<std::string>(),
+ rtc::CreateRandomString(cricket::ICE_UFRAG_LENGTH),
+ rtc::CreateRandomString(cricket::ICE_PWD_LENGTH), cricket::ICEMODE_FULL,
+ cricket::CONNECTIONROLE_NONE, nullptr);
+ transport_->SetLocalTransportDescription(faketransport_desc,
+ cricket::CA_OFFER, nullptr);
+ EXPECT_TRUE(transport_->GetStats(&stats));
+ ASSERT_EQ(1U, stats.channel_stats.size());
+ EXPECT_EQ(1, stats.channel_stats[0].component);
+}
+
+// Tests that VerifyCertificateFingerprint only returns true when the
+// certificate matches the fingerprint.
+TEST_F(TransportTest, TestVerifyCertificateFingerprint) {
+ std::string error_desc;
+ EXPECT_FALSE(
+ transport_->VerifyCertificateFingerprint(nullptr, nullptr, &error_desc));
+ rtc::KeyType key_types[] = {rtc::KT_RSA, rtc::KT_ECDSA};
+
+ for (auto& key_type : key_types) {
+ rtc::scoped_refptr<rtc::RTCCertificate> certificate =
+ rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>(
+ rtc::SSLIdentity::Generate("testing", key_type)));
+ ASSERT_NE(nullptr, certificate);
+
+ std::string digest_algorithm;
+ ASSERT_TRUE(certificate->ssl_certificate().GetSignatureDigestAlgorithm(
+ &digest_algorithm));
+ ASSERT_FALSE(digest_algorithm.empty());
+ std::unique_ptr<rtc::SSLFingerprint> good_fingerprint(
+ rtc::SSLFingerprint::Create(digest_algorithm, certificate->identity()));
+ ASSERT_NE(nullptr, good_fingerprint);
+
+ EXPECT_TRUE(transport_->VerifyCertificateFingerprint(
+ certificate.get(), good_fingerprint.get(), &error_desc));
+ EXPECT_FALSE(transport_->VerifyCertificateFingerprint(
+ certificate.get(), nullptr, &error_desc));
+ EXPECT_FALSE(transport_->VerifyCertificateFingerprint(
+ nullptr, good_fingerprint.get(), &error_desc));
+
+ rtc::SSLFingerprint bad_fingerprint = *good_fingerprint;
+ bad_fingerprint.digest.AppendData("0", 1);
+ EXPECT_FALSE(transport_->VerifyCertificateFingerprint(
+ certificate.get(), &bad_fingerprint, &error_desc));
+ }
+}
+
+// Tests that NegotiateRole sets the SSL role correctly.
+TEST_F(TransportTest, TestNegotiateRole) {
+ TransportDescription local_desc(kIceUfrag1, kIcePwd1);
+ TransportDescription remote_desc(kIceUfrag2, kIcePwd2);
+
+ struct NegotiateRoleParams {
+ cricket::ConnectionRole local_role;
+ cricket::ConnectionRole remote_role;
+ cricket::ContentAction local_action;
+ cricket::ContentAction remote_action;
+ };
+
+ rtc::SSLRole ssl_role;
+ std::string error_desc;
+
+ // Parameters which set the SSL role to SSL_CLIENT.
+ NegotiateRoleParams valid_client_params[] = {
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_ANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_PRANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_OFFER, cricket::CA_ANSWER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_OFFER, cricket::CA_PRANSWER}};
+
+ for (auto& param : valid_client_params) {
+ local_desc.connection_role = param.local_role;
+ remote_desc.connection_role = param.remote_role;
+
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(
+ remote_desc, param.remote_action, nullptr));
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(
+ local_desc, param.local_action, nullptr));
+ EXPECT_TRUE(
+ transport_->NegotiateRole(param.local_action, &ssl_role, &error_desc));
+ EXPECT_EQ(rtc::SSL_CLIENT, ssl_role);
+ }
+
+ // Parameters which set the SSL role to SSL_SERVER.
+ NegotiateRoleParams valid_server_params[] = {
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_ANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_PRANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_OFFER, cricket::CA_ANSWER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_OFFER, cricket::CA_PRANSWER}};
+
+ for (auto& param : valid_server_params) {
+ local_desc.connection_role = param.local_role;
+ remote_desc.connection_role = param.remote_role;
+
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(
+ remote_desc, param.remote_action, nullptr));
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(
+ local_desc, param.local_action, nullptr));
+ EXPECT_TRUE(
+ transport_->NegotiateRole(param.local_action, &ssl_role, &error_desc));
+ EXPECT_EQ(rtc::SSL_SERVER, ssl_role);
+ }
+
+ // Invalid parameters due to both peers having a duplicate role.
+ NegotiateRoleParams duplicate_params[] = {
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_ANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_ANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_ANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_PRANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_PRANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_PRANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_OFFER, cricket::CA_ANSWER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_OFFER, cricket::CA_ANSWER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_OFFER, cricket::CA_ANSWER},
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_OFFER, cricket::CA_PRANSWER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_OFFER, cricket::CA_PRANSWER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_OFFER, cricket::CA_PRANSWER}};
+
+ for (auto& param : duplicate_params) {
+ local_desc.connection_role = param.local_role;
+ remote_desc.connection_role = param.remote_role;
+
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(
+ remote_desc, param.remote_action, nullptr));
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(
+ local_desc, param.local_action, nullptr));
+ EXPECT_FALSE(
+ transport_->NegotiateRole(param.local_action, &ssl_role, &error_desc));
+ }
+
+ // Invalid parameters due to the offerer not using ACTPASS.
+ NegotiateRoleParams offerer_without_actpass_params[] = {
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_ANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_ANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_ANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_PRANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_PRANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTPASS, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_PRANSWER, cricket::CA_OFFER},
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_OFFER, cricket::CA_ANSWER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_OFFER, cricket::CA_ANSWER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_OFFER, cricket::CA_ANSWER},
+ {cricket::CONNECTIONROLE_ACTIVE, cricket::CONNECTIONROLE_PASSIVE,
+ cricket::CA_OFFER, cricket::CA_PRANSWER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTIVE,
+ cricket::CA_OFFER, cricket::CA_PRANSWER},
+ {cricket::CONNECTIONROLE_PASSIVE, cricket::CONNECTIONROLE_ACTPASS,
+ cricket::CA_OFFER, cricket::CA_PRANSWER}};
+
+ for (auto& param : offerer_without_actpass_params) {
+ local_desc.connection_role = param.local_role;
+ remote_desc.connection_role = param.remote_role;
+
+ ASSERT_TRUE(transport_->SetRemoteTransportDescription(
+ remote_desc, param.remote_action, nullptr));
+ ASSERT_TRUE(transport_->SetLocalTransportDescription(
+ local_desc, param.local_action, nullptr));
+ EXPECT_FALSE(
+ transport_->NegotiateRole(param.local_action, &ssl_role, &error_desc));
+ }
+}
« no previous file with comments | « webrtc/p2p/base/transport.cc ('k') | webrtc/p2p/base/transportchannel.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698