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

Side by Side Diff: webrtc/api/peerconnection_unittest.cc

Issue 1528843005: Add support for GCM cipher suites from RFC 7714. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fix failing SRTP-but-no-DTLS tests. 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
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 static const char kAudioTrackLabelBase[] = "audio_track"; 93 static const char kAudioTrackLabelBase[] = "audio_track";
94 static const char kDataChannelLabel[] = "data_channel"; 94 static const char kDataChannelLabel[] = "data_channel";
95 95
96 // Disable for TSan v2, see 96 // Disable for TSan v2, see
97 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details. 97 // https://code.google.com/p/webrtc/issues/detail?id=1205 for details.
98 // This declaration is also #ifdef'd as it causes unused-variable errors. 98 // This declaration is also #ifdef'd as it causes unused-variable errors.
99 #if !defined(THREAD_SANITIZER) 99 #if !defined(THREAD_SANITIZER)
100 // SRTP cipher name negotiated by the tests. This must be updated if the 100 // SRTP cipher name negotiated by the tests. This must be updated if the
101 // default changes. 101 // default changes.
102 static const int kDefaultSrtpCryptoSuite = rtc::SRTP_AES128_CM_SHA1_32; 102 static const int kDefaultSrtpCryptoSuite = rtc::SRTP_AES128_CM_SHA1_32;
103 static const int kDefaultSrtpCryptoSuiteGcm = rtc::SRTP_AEAD_AES_256_GCM;
103 #endif 104 #endif
104 105
105 static void RemoveLinesFromSdp(const std::string& line_start, 106 static void RemoveLinesFromSdp(const std::string& line_start,
106 std::string* sdp) { 107 std::string* sdp) {
107 const char kSdpLineEnd[] = "\r\n"; 108 const char kSdpLineEnd[] = "\r\n";
108 size_t ssrc_pos = 0; 109 size_t ssrc_pos = 0;
109 while ((ssrc_pos = sdp->find(line_start, ssrc_pos)) != 110 while ((ssrc_pos = sdp->find(line_start, ssrc_pos)) !=
110 std::string::npos) { 111 std::string::npos) {
111 size_t end_ssrc = sdp->find(kSdpLineEnd, ssrc_pos); 112 size_t end_ssrc = sdp->find(kSdpLineEnd, ssrc_pos);
112 sdp->erase(ssrc_pos, end_ssrc - ssrc_pos + strlen(kSdpLineEnd)); 113 sdp->erase(ssrc_pos, end_ssrc - ssrc_pos + strlen(kSdpLineEnd));
(...skipping 1181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 1295
1295 // Set the |receiving_client_| to the |client| passed in and return the 1296 // Set the |receiving_client_| to the |client| passed in and return the
1296 // original |receiving_client_|. 1297 // original |receiving_client_|.
1297 PeerConnectionTestClient* set_receiving_client( 1298 PeerConnectionTestClient* set_receiving_client(
1298 PeerConnectionTestClient* client) { 1299 PeerConnectionTestClient* client) {
1299 PeerConnectionTestClient* old = receiving_client_.release(); 1300 PeerConnectionTestClient* old = receiving_client_.release();
1300 receiving_client_.reset(client); 1301 receiving_client_.reset(client);
1301 return old; 1302 return old;
1302 } 1303 }
1303 1304
1305 void TestGcmNegotiation(bool local_gcm_enabled, bool remote_gcm_enabled,
1306 int expected_cipher_suite) {
1307 PeerConnectionFactory::Options init_options;
1308 init_options.crypto_options.enable_gcm_crypto_suites = local_gcm_enabled;
1309 PeerConnectionFactory::Options recv_options;
1310 recv_options.crypto_options.enable_gcm_crypto_suites = remote_gcm_enabled;
1311 ASSERT_TRUE(
1312 CreateTestClients(nullptr, &init_options, nullptr, &recv_options));
1313 rtc::scoped_refptr<webrtc::FakeMetricsObserver>
1314 init_observer =
1315 new rtc::RefCountedObject<webrtc::FakeMetricsObserver>();
1316 initializing_client()->pc()->RegisterUMAObserver(init_observer);
1317 LocalP2PTest();
1318
1319 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(expected_cipher_suite),
1320 initializing_client()->GetSrtpCipherStats(),
1321 kMaxWaitForStatsMs);
1322 EXPECT_EQ(1,
1323 init_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher,
1324 expected_cipher_suite));
1325 }
1326
1304 private: 1327 private:
1305 // |worker_thread_| is used by both |initiating_client_| and 1328 // |worker_thread_| is used by both |initiating_client_| and
1306 // |receiving_client_|. Must be destroyed last. 1329 // |receiving_client_|. Must be destroyed last.
1307 rtc::Thread worker_thread_; 1330 rtc::Thread worker_thread_;
1308 std::unique_ptr<rtc::PhysicalSocketServer> pss_; 1331 std::unique_ptr<rtc::PhysicalSocketServer> pss_;
1309 std::unique_ptr<rtc::VirtualSocketServer> ss_; 1332 std::unique_ptr<rtc::VirtualSocketServer> ss_;
1310 rtc::SocketServerScope ss_scope_; 1333 rtc::SocketServerScope ss_scope_;
1311 std::unique_ptr<PeerConnectionTestClient> initiating_client_; 1334 std::unique_ptr<PeerConnectionTestClient> initiating_client_;
1312 std::unique_ptr<PeerConnectionTestClient> receiving_client_; 1335 std::unique_ptr<PeerConnectionTestClient> receiving_client_;
1313 bool prefer_constraint_apis_ = true; 1336 bool prefer_constraint_apis_ = true;
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1715 initializing_client()->GetDtlsCipherStats(), rtc::KT_DEFAULT), 1738 initializing_client()->GetDtlsCipherStats(), rtc::KT_DEFAULT),
1716 kMaxWaitForStatsMs); 1739 kMaxWaitForStatsMs);
1717 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(kDefaultSrtpCryptoSuite), 1740 EXPECT_EQ_WAIT(rtc::SrtpCryptoSuiteToName(kDefaultSrtpCryptoSuite),
1718 initializing_client()->GetSrtpCipherStats(), 1741 initializing_client()->GetSrtpCipherStats(),
1719 kMaxWaitForStatsMs); 1742 kMaxWaitForStatsMs);
1720 EXPECT_EQ(1, 1743 EXPECT_EQ(1,
1721 init_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher, 1744 init_observer->GetEnumCounter(webrtc::kEnumCounterAudioSrtpCipher,
1722 kDefaultSrtpCryptoSuite)); 1745 kDefaultSrtpCryptoSuite));
1723 } 1746 }
1724 1747
1748 // Test that a non-GCM cipher is used if both sides only support non-GCM.
1749 TEST_F(P2PTestConductor, GetGcmNone) {
1750 TestGcmNegotiation(false, false, kDefaultSrtpCryptoSuite);
1751 }
1752
1753 // Test that a GCM cipher is used if both ends support it.
1754 TEST_F(P2PTestConductor, GetGcmBoth) {
1755 TestGcmNegotiation(true, true, kDefaultSrtpCryptoSuiteGcm);
1756 }
1757
1758 // Test that a non-GCM cipher is used if the initator supports GCM and the
mattdr 2016/05/06 22:34:13 'Test that GCM isn't used if only the initiator su
joachim 2016/05/09 23:21:40 Done.
1759 // received supports non-GCM.
1760 TEST_F(P2PTestConductor, GetGcmInit) {
1761 TestGcmNegotiation(true, false, kDefaultSrtpCryptoSuite);
1762 }
1763
1764 // Test that a non-GCM cipher is used if the initator supports non-GCM and the
mattdr 2016/05/06 22:34:13 'Test that GCM isn't used if only the receiver sup
joachim 2016/05/09 23:21:40 Done.
1765 // received supports GCM.
1766 TEST_F(P2PTestConductor, GetGcmRecv) {
1767 TestGcmNegotiation(false, true, kDefaultSrtpCryptoSuite);
1768 }
1769
1725 // This test sets up a call between two parties with audio, video and an RTP 1770 // This test sets up a call between two parties with audio, video and an RTP
1726 // data channel. 1771 // data channel.
1727 TEST_F(P2PTestConductor, LocalP2PTestRtpDataChannel) { 1772 TEST_F(P2PTestConductor, LocalP2PTestRtpDataChannel) {
1728 FakeConstraints setup_constraints; 1773 FakeConstraints setup_constraints;
1729 setup_constraints.SetAllowRtpDataChannels(); 1774 setup_constraints.SetAllowRtpDataChannels();
1730 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints)); 1775 ASSERT_TRUE(CreateTestClients(&setup_constraints, &setup_constraints));
1731 initializing_client()->CreateDataChannel(); 1776 initializing_client()->CreateDataChannel();
1732 LocalP2PTest(); 1777 LocalP2PTest();
1733 ASSERT_TRUE(initializing_client()->data_channel() != nullptr); 1778 ASSERT_TRUE(initializing_client()->data_channel() != nullptr);
1734 ASSERT_TRUE(receiving_client()->data_channel() != nullptr); 1779 ASSERT_TRUE(receiving_client()->data_channel() != nullptr);
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
2199 server.urls.push_back("turn:hostname2"); 2244 server.urls.push_back("turn:hostname2");
2200 servers.push_back(server); 2245 servers.push_back(server);
2201 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_)); 2246 EXPECT_TRUE(webrtc::ParseIceServers(servers, &stun_servers_, &turn_servers_));
2202 EXPECT_EQ(2U, turn_servers_.size()); 2247 EXPECT_EQ(2U, turn_servers_.size());
2203 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority); 2248 EXPECT_NE(turn_servers_[0].priority, turn_servers_[1].priority);
2204 } 2249 }
2205 2250
2206 #endif // if !defined(THREAD_SANITIZER) 2251 #endif // if !defined(THREAD_SANITIZER)
2207 2252
2208 } // namespace 2253 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698