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

Side by Side Diff: webrtc/p2p/base/dtlstransportchannel_unittest.cc

Issue 1920043002: Replace scoped_ptr with unique_ptr in webrtc/base/ (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 4 years, 7 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 | « webrtc/p2p/base/dtlstransportchannel.cc ('k') | webrtc/p2p/base/faketransportcontroller.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 /* 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
11 #include <memory>
11 #include <set> 12 #include <set>
12 13
13 #include "webrtc/p2p/base/dtlstransport.h" 14 #include "webrtc/p2p/base/dtlstransport.h"
14 #include "webrtc/p2p/base/faketransportcontroller.h" 15 #include "webrtc/p2p/base/faketransportcontroller.h"
15 #include "webrtc/base/common.h" 16 #include "webrtc/base/common.h"
16 #include "webrtc/base/dscp.h" 17 #include "webrtc/base/dscp.h"
17 #include "webrtc/base/gunit.h" 18 #include "webrtc/base/gunit.h"
18 #include "webrtc/base/helpers.h" 19 #include "webrtc/base/helpers.h"
19 #include "webrtc/base/scoped_ptr.h"
20 #include "webrtc/base/ssladapter.h" 20 #include "webrtc/base/ssladapter.h"
21 #include "webrtc/base/sslidentity.h" 21 #include "webrtc/base/sslidentity.h"
22 #include "webrtc/base/sslstreamadapter.h" 22 #include "webrtc/base/sslstreamadapter.h"
23 #include "webrtc/base/stringutils.h" 23 #include "webrtc/base/stringutils.h"
24 24
25 #define MAYBE_SKIP_TEST(feature) \ 25 #define MAYBE_SKIP_TEST(feature) \
26 if (!(rtc::SSLStreamAdapter::feature())) { \ 26 if (!(rtc::SSLStreamAdapter::feature())) { \
27 LOG(LS_INFO) << "Feature disabled... skipping"; \ 27 LOG(LS_INFO) << "Feature disabled... skipping"; \
28 return; \ 28 return; \
29 } 29 }
(...skipping 17 matching lines...) Expand all
47 DtlsTestClient(const std::string& name) 47 DtlsTestClient(const std::string& name)
48 : name_(name), 48 : name_(name),
49 packet_size_(0), 49 packet_size_(0),
50 use_dtls_srtp_(false), 50 use_dtls_srtp_(false),
51 ssl_max_version_(rtc::SSL_PROTOCOL_DTLS_12), 51 ssl_max_version_(rtc::SSL_PROTOCOL_DTLS_12),
52 negotiated_dtls_(false), 52 negotiated_dtls_(false),
53 received_dtls_client_hello_(false), 53 received_dtls_client_hello_(false),
54 received_dtls_server_hello_(false) {} 54 received_dtls_server_hello_(false) {}
55 void CreateCertificate(rtc::KeyType key_type) { 55 void CreateCertificate(rtc::KeyType key_type) {
56 certificate_ = 56 certificate_ =
57 rtc::RTCCertificate::Create(rtc::scoped_ptr<rtc::SSLIdentity>( 57 rtc::RTCCertificate::Create(std::unique_ptr<rtc::SSLIdentity>(
58 rtc::SSLIdentity::Generate(name_, key_type))); 58 rtc::SSLIdentity::Generate(name_, key_type)));
59 } 59 }
60 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate() { 60 const rtc::scoped_refptr<rtc::RTCCertificate>& certificate() {
61 return certificate_; 61 return certificate_;
62 } 62 }
63 void SetupSrtp() { 63 void SetupSrtp() {
64 ASSERT(certificate_); 64 ASSERT(certificate_);
65 use_dtls_srtp_ = true; 65 use_dtls_srtp_ = true;
66 } 66 }
67 void SetupMaxProtocolVersion(rtc::SSLProtocolVersion version) { 67 void SetupMaxProtocolVersion(rtc::SSLProtocolVersion version) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 local_role, remote_role, flags); 115 local_role, remote_role, flags);
116 } 116 }
117 117
118 // Allow any DTLS configuration to be specified (including invalid ones). 118 // Allow any DTLS configuration to be specified (including invalid ones).
119 void Negotiate(const rtc::scoped_refptr<rtc::RTCCertificate>& local_cert, 119 void Negotiate(const rtc::scoped_refptr<rtc::RTCCertificate>& local_cert,
120 const rtc::scoped_refptr<rtc::RTCCertificate>& remote_cert, 120 const rtc::scoped_refptr<rtc::RTCCertificate>& remote_cert,
121 cricket::ContentAction action, 121 cricket::ContentAction action,
122 ConnectionRole local_role, 122 ConnectionRole local_role,
123 ConnectionRole remote_role, 123 ConnectionRole remote_role,
124 int flags) { 124 int flags) {
125 rtc::scoped_ptr<rtc::SSLFingerprint> local_fingerprint; 125 std::unique_ptr<rtc::SSLFingerprint> local_fingerprint;
126 rtc::scoped_ptr<rtc::SSLFingerprint> remote_fingerprint; 126 std::unique_ptr<rtc::SSLFingerprint> remote_fingerprint;
127 if (local_cert) { 127 if (local_cert) {
128 std::string digest_algorithm; 128 std::string digest_algorithm;
129 ASSERT_TRUE(local_cert->ssl_certificate().GetSignatureDigestAlgorithm( 129 ASSERT_TRUE(local_cert->ssl_certificate().GetSignatureDigestAlgorithm(
130 &digest_algorithm)); 130 &digest_algorithm));
131 ASSERT_FALSE(digest_algorithm.empty()); 131 ASSERT_FALSE(digest_algorithm.empty());
132 local_fingerprint.reset(rtc::SSLFingerprint::Create( 132 local_fingerprint.reset(rtc::SSLFingerprint::Create(
133 digest_algorithm, local_cert->identity())); 133 digest_algorithm, local_cert->identity()));
134 ASSERT_TRUE(local_fingerprint.get() != NULL); 134 ASSERT_TRUE(local_fingerprint.get() != NULL);
135 EXPECT_EQ(rtc::DIGEST_SHA_256, digest_algorithm); 135 EXPECT_EQ(rtc::DIGEST_SHA_256, digest_algorithm);
136 } 136 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 EXPECT_TRUE( 241 EXPECT_TRUE(
242 rtc::SSLStreamAdapter::IsAcceptableCipher(cipher, rtc::KT_DEFAULT)); 242 rtc::SSLStreamAdapter::IsAcceptableCipher(cipher, rtc::KT_DEFAULT));
243 } else { 243 } else {
244 ASSERT_FALSE(rv); 244 ASSERT_FALSE(rv);
245 } 245 }
246 } 246 }
247 } 247 }
248 248
249 void SendPackets(size_t channel, size_t size, size_t count, bool srtp) { 249 void SendPackets(size_t channel, size_t size, size_t count, bool srtp) {
250 ASSERT(channel < channels_.size()); 250 ASSERT(channel < channels_.size());
251 rtc::scoped_ptr<char[]> packet(new char[size]); 251 std::unique_ptr<char[]> packet(new char[size]);
252 size_t sent = 0; 252 size_t sent = 0;
253 do { 253 do {
254 // Fill the packet with a known value and a sequence number to check 254 // Fill the packet with a known value and a sequence number to check
255 // against, and make sure that it doesn't look like DTLS. 255 // against, and make sure that it doesn't look like DTLS.
256 memset(packet.get(), sent & 0xff, size); 256 memset(packet.get(), sent & 0xff, size);
257 packet[0] = (srtp) ? 0x80 : 0x00; 257 packet[0] = (srtp) ? 0x80 : 0x00;
258 rtc::SetBE32(packet.get() + kPacketNumOffset, 258 rtc::SetBE32(packet.get() + kPacketNumOffset,
259 static_cast<uint32_t>(sent)); 259 static_cast<uint32_t>(sent));
260 260
261 // Only set the bypass flag if we've activated DTLS. 261 // Only set the bypass flag if we've activated DTLS.
262 int flags = (certificate_ && srtp) ? cricket::PF_SRTP_BYPASS : 0; 262 int flags = (certificate_ && srtp) ? cricket::PF_SRTP_BYPASS : 0;
263 rtc::PacketOptions packet_options; 263 rtc::PacketOptions packet_options;
264 packet_options.packet_id = kFakePacketId; 264 packet_options.packet_id = kFakePacketId;
265 int rv = channels_[channel]->SendPacket( 265 int rv = channels_[channel]->SendPacket(
266 packet.get(), size, packet_options, flags); 266 packet.get(), size, packet_options, flags);
267 ASSERT_GT(rv, 0); 267 ASSERT_GT(rv, 0);
268 ASSERT_EQ(size, static_cast<size_t>(rv)); 268 ASSERT_EQ(size, static_cast<size_t>(rv));
269 ++sent; 269 ++sent;
270 } while (sent < count); 270 } while (sent < count);
271 } 271 }
272 272
273 int SendInvalidSrtpPacket(size_t channel, size_t size) { 273 int SendInvalidSrtpPacket(size_t channel, size_t size) {
274 ASSERT(channel < channels_.size()); 274 ASSERT(channel < channels_.size());
275 rtc::scoped_ptr<char[]> packet(new char[size]); 275 std::unique_ptr<char[]> packet(new char[size]);
276 // Fill the packet with 0 to form an invalid SRTP packet. 276 // Fill the packet with 0 to form an invalid SRTP packet.
277 memset(packet.get(), 0, size); 277 memset(packet.get(), 0, size);
278 278
279 rtc::PacketOptions packet_options; 279 rtc::PacketOptions packet_options;
280 return channels_[channel]->SendPacket( 280 return channels_[channel]->SendPacket(
281 packet.get(), size, packet_options, cricket::PF_SRTP_BYPASS); 281 packet.get(), size, packet_options, cricket::PF_SRTP_BYPASS);
282 } 282 }
283 283
284 void ExpectPackets(size_t channel, size_t size) { 284 void ExpectPackets(size_t channel, size_t size) {
285 packet_size_ = size; 285 packet_size_ = size;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 } else if (IsRtpLeadByte(data[0])) { 372 } else if (IsRtpLeadByte(data[0])) {
373 ASSERT_TRUE(VerifyPacket(data, size, NULL)); 373 ASSERT_TRUE(VerifyPacket(data, size, NULL));
374 } 374 }
375 } 375 }
376 } 376 }
377 } 377 }
378 378
379 private: 379 private:
380 std::string name_; 380 std::string name_;
381 rtc::scoped_refptr<rtc::RTCCertificate> certificate_; 381 rtc::scoped_refptr<rtc::RTCCertificate> certificate_;
382 rtc::scoped_ptr<cricket::FakeTransport> transport_; 382 std::unique_ptr<cricket::FakeTransport> transport_;
383 std::vector<cricket::DtlsTransportChannelWrapper*> channels_; 383 std::vector<cricket::DtlsTransportChannelWrapper*> channels_;
384 size_t packet_size_; 384 size_t packet_size_;
385 std::set<int> received_; 385 std::set<int> received_;
386 bool use_dtls_srtp_; 386 bool use_dtls_srtp_;
387 rtc::SSLProtocolVersion ssl_max_version_; 387 rtc::SSLProtocolVersion ssl_max_version_;
388 bool negotiated_dtls_; 388 bool negotiated_dtls_;
389 bool received_dtls_client_hello_; 389 bool received_dtls_client_hello_;
390 bool received_dtls_server_hello_; 390 bool received_dtls_server_hello_;
391 rtc::SentPacket sent_packet_; 391 rtc::SentPacket sent_packet_;
392 }; 392 };
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 } 839 }
840 840
841 // Test Certificates state after negotiation but before connection. 841 // Test Certificates state after negotiation but before connection.
842 TEST_F(DtlsTransportChannelTest, TestCertificatesBeforeConnect) { 842 TEST_F(DtlsTransportChannelTest, TestCertificatesBeforeConnect) {
843 MAYBE_SKIP_TEST(HaveDtls); 843 MAYBE_SKIP_TEST(HaveDtls);
844 PrepareDtls(true, true, rtc::KT_DEFAULT); 844 PrepareDtls(true, true, rtc::KT_DEFAULT);
845 Negotiate(); 845 Negotiate();
846 846
847 rtc::scoped_refptr<rtc::RTCCertificate> certificate1; 847 rtc::scoped_refptr<rtc::RTCCertificate> certificate1;
848 rtc::scoped_refptr<rtc::RTCCertificate> certificate2; 848 rtc::scoped_refptr<rtc::RTCCertificate> certificate2;
849 rtc::scoped_ptr<rtc::SSLCertificate> remote_cert1; 849 std::unique_ptr<rtc::SSLCertificate> remote_cert1;
850 rtc::scoped_ptr<rtc::SSLCertificate> remote_cert2; 850 std::unique_ptr<rtc::SSLCertificate> remote_cert2;
851 851
852 // After negotiation, each side has a distinct local certificate, but still no 852 // After negotiation, each side has a distinct local certificate, but still no
853 // remote certificate, because connection has not yet occurred. 853 // remote certificate, because connection has not yet occurred.
854 ASSERT_TRUE(client1_.transport()->GetLocalCertificate(&certificate1)); 854 ASSERT_TRUE(client1_.transport()->GetLocalCertificate(&certificate1));
855 ASSERT_TRUE(client2_.transport()->GetLocalCertificate(&certificate2)); 855 ASSERT_TRUE(client2_.transport()->GetLocalCertificate(&certificate2));
856 ASSERT_NE(certificate1->ssl_certificate().ToPEMString(), 856 ASSERT_NE(certificate1->ssl_certificate().ToPEMString(),
857 certificate2->ssl_certificate().ToPEMString()); 857 certificate2->ssl_certificate().ToPEMString());
858 ASSERT_FALSE(client1_.transport()->GetRemoteSSLCertificate()); 858 ASSERT_FALSE(client1_.transport()->GetRemoteSSLCertificate());
859 ASSERT_FALSE(client2_.transport()->GetRemoteSSLCertificate()); 859 ASSERT_FALSE(client2_.transport()->GetRemoteSSLCertificate());
860 } 860 }
861 861
862 // Test Certificates state after connection. 862 // Test Certificates state after connection.
863 TEST_F(DtlsTransportChannelTest, TestCertificatesAfterConnect) { 863 TEST_F(DtlsTransportChannelTest, TestCertificatesAfterConnect) {
864 MAYBE_SKIP_TEST(HaveDtls); 864 MAYBE_SKIP_TEST(HaveDtls);
865 PrepareDtls(true, true, rtc::KT_DEFAULT); 865 PrepareDtls(true, true, rtc::KT_DEFAULT);
866 ASSERT_TRUE(Connect()); 866 ASSERT_TRUE(Connect());
867 867
868 rtc::scoped_refptr<rtc::RTCCertificate> certificate1; 868 rtc::scoped_refptr<rtc::RTCCertificate> certificate1;
869 rtc::scoped_refptr<rtc::RTCCertificate> certificate2; 869 rtc::scoped_refptr<rtc::RTCCertificate> certificate2;
870 870
871 // After connection, each side has a distinct local certificate. 871 // After connection, each side has a distinct local certificate.
872 ASSERT_TRUE(client1_.transport()->GetLocalCertificate(&certificate1)); 872 ASSERT_TRUE(client1_.transport()->GetLocalCertificate(&certificate1));
873 ASSERT_TRUE(client2_.transport()->GetLocalCertificate(&certificate2)); 873 ASSERT_TRUE(client2_.transport()->GetLocalCertificate(&certificate2));
874 ASSERT_NE(certificate1->ssl_certificate().ToPEMString(), 874 ASSERT_NE(certificate1->ssl_certificate().ToPEMString(),
875 certificate2->ssl_certificate().ToPEMString()); 875 certificate2->ssl_certificate().ToPEMString());
876 876
877 // Each side's remote certificate is the other side's local certificate. 877 // Each side's remote certificate is the other side's local certificate.
878 rtc::scoped_ptr<rtc::SSLCertificate> remote_cert1 = 878 std::unique_ptr<rtc::SSLCertificate> remote_cert1 =
879 client1_.transport()->GetRemoteSSLCertificate(); 879 client1_.transport()->GetRemoteSSLCertificate();
880 ASSERT_TRUE(remote_cert1); 880 ASSERT_TRUE(remote_cert1);
881 ASSERT_EQ(remote_cert1->ToPEMString(), 881 ASSERT_EQ(remote_cert1->ToPEMString(),
882 certificate2->ssl_certificate().ToPEMString()); 882 certificate2->ssl_certificate().ToPEMString());
883 rtc::scoped_ptr<rtc::SSLCertificate> remote_cert2 = 883 std::unique_ptr<rtc::SSLCertificate> remote_cert2 =
884 client2_.transport()->GetRemoteSSLCertificate(); 884 client2_.transport()->GetRemoteSSLCertificate();
885 ASSERT_TRUE(remote_cert2); 885 ASSERT_TRUE(remote_cert2);
886 ASSERT_EQ(remote_cert2->ToPEMString(), 886 ASSERT_EQ(remote_cert2->ToPEMString(),
887 certificate1->ssl_certificate().ToPEMString()); 887 certificate1->ssl_certificate().ToPEMString());
888 } 888 }
OLDNEW
« no previous file with comments | « webrtc/p2p/base/dtlstransportchannel.cc ('k') | webrtc/p2p/base/faketransportcontroller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698