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

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

Issue 1363573002: Wire up transport sequence number / send time callbacks to webrtc via libjingle. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Add missing updated_options Created 5 years, 2 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 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 15 matching lines...) Expand all
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 }
30 30
31 static const char AES_CM_128_HMAC_SHA1_80[] = "AES_CM_128_HMAC_SHA1_80"; 31 static const char AES_CM_128_HMAC_SHA1_80[] = "AES_CM_128_HMAC_SHA1_80";
32 static const char kIceUfrag1[] = "TESTICEUFRAG0001"; 32 static const char kIceUfrag1[] = "TESTICEUFRAG0001";
33 static const char kIcePwd1[] = "TESTICEPWD00000000000001"; 33 static const char kIcePwd1[] = "TESTICEPWD00000000000001";
34 static const size_t kPacketNumOffset = 8; 34 static const size_t kPacketNumOffset = 8;
35 static const size_t kPacketHeaderLen = 12; 35 static const size_t kPacketHeaderLen = 12;
36 static const int kFakePacketId = 0x1234;
36 37
37 static bool IsRtpLeadByte(uint8_t b) { 38 static bool IsRtpLeadByte(uint8_t b) {
38 return ((b & 0xC0) == 0x80); 39 return ((b & 0xC0) == 0x80);
39 } 40 }
40 41
41 using cricket::ConnectionRole; 42 using cricket::ConnectionRole;
42 43
43 enum Flags { NF_REOFFER = 0x1, NF_EXPECT_FAILURE = 0x2 }; 44 enum Flags { NF_REOFFER = 0x1, NF_EXPECT_FAILURE = 0x2 };
44 45
45 class DtlsTestClient : public sigslot::has_slots<> { 46 class DtlsTestClient : public sigslot::has_slots<> {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 for (int i = 0; i < count; ++i) { 80 for (int i = 0; i < count; ++i) {
80 cricket::DtlsTransportChannelWrapper* channel = 81 cricket::DtlsTransportChannelWrapper* channel =
81 static_cast<cricket::DtlsTransportChannelWrapper*>( 82 static_cast<cricket::DtlsTransportChannelWrapper*>(
82 transport_->CreateChannel(i)); 83 transport_->CreateChannel(i));
83 ASSERT_TRUE(channel != NULL); 84 ASSERT_TRUE(channel != NULL);
84 channel->SetSslMaxProtocolVersion(ssl_max_version_); 85 channel->SetSslMaxProtocolVersion(ssl_max_version_);
85 channel->SignalWritableState.connect(this, 86 channel->SignalWritableState.connect(this,
86 &DtlsTestClient::OnTransportChannelWritableState); 87 &DtlsTestClient::OnTransportChannelWritableState);
87 channel->SignalReadPacket.connect(this, 88 channel->SignalReadPacket.connect(this,
88 &DtlsTestClient::OnTransportChannelReadPacket); 89 &DtlsTestClient::OnTransportChannelReadPacket);
90 channel->SignalSentPacket.connect(
91 this, &DtlsTestClient::OnTransportChannelSentPacket);
89 channels_.push_back(channel); 92 channels_.push_back(channel);
90 93
91 // Hook the raw packets so that we can verify they are encrypted. 94 // Hook the raw packets so that we can verify they are encrypted.
92 channel->channel()->SignalReadPacket.connect( 95 channel->channel()->SignalReadPacket.connect(
93 this, &DtlsTestClient::OnFakeTransportChannelReadPacket); 96 this, &DtlsTestClient::OnFakeTransportChannelReadPacket);
94 } 97 }
95 } 98 }
96 99
97 cricket::Transport* transport() { return transport_.get(); } 100 cricket::Transport* transport() { return transport_.get(); }
98 101
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // Fill the packet with a known value and a sequence number to check 255 // Fill the packet with a known value and a sequence number to check
253 // against, and make sure that it doesn't look like DTLS. 256 // against, and make sure that it doesn't look like DTLS.
254 memset(packet.get(), sent & 0xff, size); 257 memset(packet.get(), sent & 0xff, size);
255 packet[0] = (srtp) ? 0x80 : 0x00; 258 packet[0] = (srtp) ? 0x80 : 0x00;
256 rtc::SetBE32(packet.get() + kPacketNumOffset, 259 rtc::SetBE32(packet.get() + kPacketNumOffset,
257 static_cast<uint32_t>(sent)); 260 static_cast<uint32_t>(sent));
258 261
259 // Only set the bypass flag if we've activated DTLS. 262 // Only set the bypass flag if we've activated DTLS.
260 int flags = (certificate_ && srtp) ? cricket::PF_SRTP_BYPASS : 0; 263 int flags = (certificate_ && srtp) ? cricket::PF_SRTP_BYPASS : 0;
261 rtc::PacketOptions packet_options; 264 rtc::PacketOptions packet_options;
265 packet_options.packet_id = kFakePacketId;
262 int rv = channels_[channel]->SendPacket( 266 int rv = channels_[channel]->SendPacket(
263 packet.get(), size, packet_options, flags); 267 packet.get(), size, packet_options, flags);
264 ASSERT_GT(rv, 0); 268 ASSERT_GT(rv, 0);
265 ASSERT_EQ(size, static_cast<size_t>(rv)); 269 ASSERT_EQ(size, static_cast<size_t>(rv));
266 ++sent; 270 ++sent;
267 } while (sent < count); 271 } while (sent < count);
268 } 272 }
269 273
270 int SendInvalidSrtpPacket(size_t channel, size_t size) { 274 int SendInvalidSrtpPacket(size_t channel, size_t size) {
271 ASSERT(channel < channels_.size()); 275 ASSERT(channel < channels_.size());
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 int flags) { 335 int flags) {
332 uint32_t packet_num = 0; 336 uint32_t packet_num = 0;
333 ASSERT_TRUE(VerifyPacket(data, size, &packet_num)); 337 ASSERT_TRUE(VerifyPacket(data, size, &packet_num));
334 received_.insert(packet_num); 338 received_.insert(packet_num);
335 // Only DTLS-SRTP packets should have the bypass flag set. 339 // Only DTLS-SRTP packets should have the bypass flag set.
336 int expected_flags = 340 int expected_flags =
337 (certificate_ && IsRtpLeadByte(data[0])) ? cricket::PF_SRTP_BYPASS : 0; 341 (certificate_ && IsRtpLeadByte(data[0])) ? cricket::PF_SRTP_BYPASS : 0;
338 ASSERT_EQ(expected_flags, flags); 342 ASSERT_EQ(expected_flags, flags);
339 } 343 }
340 344
345 void OnTransportChannelSentPacket(cricket::TransportChannel* channel,
346 const rtc::SentPacket& sent_packet) {
347 sent_packet_ = sent_packet;
348 }
349
350 rtc::SentPacket sent_packet() const { return sent_packet_; }
351
341 // Hook into the raw packet stream to make sure DTLS packets are encrypted. 352 // Hook into the raw packet stream to make sure DTLS packets are encrypted.
342 void OnFakeTransportChannelReadPacket(cricket::TransportChannel* channel, 353 void OnFakeTransportChannelReadPacket(cricket::TransportChannel* channel,
343 const char* data, size_t size, 354 const char* data, size_t size,
344 const rtc::PacketTime& time, 355 const rtc::PacketTime& time,
345 int flags) { 356 int flags) {
346 // Flags shouldn't be set on the underlying TransportChannel packets. 357 // Flags shouldn't be set on the underlying TransportChannel packets.
347 ASSERT_EQ(0, flags); 358 ASSERT_EQ(0, flags);
348 359
349 // Look at the handshake packets to see what role we played. 360 // Look at the handshake packets to see what role we played.
350 // Check that non-handshake packets are DTLS data or SRTP bypass. 361 // Check that non-handshake packets are DTLS data or SRTP bypass.
(...skipping 20 matching lines...) Expand all
371 rtc::scoped_refptr<rtc::RTCCertificate> certificate_; 382 rtc::scoped_refptr<rtc::RTCCertificate> certificate_;
372 rtc::scoped_ptr<cricket::FakeTransport> transport_; 383 rtc::scoped_ptr<cricket::FakeTransport> transport_;
373 std::vector<cricket::DtlsTransportChannelWrapper*> channels_; 384 std::vector<cricket::DtlsTransportChannelWrapper*> channels_;
374 size_t packet_size_; 385 size_t packet_size_;
375 std::set<int> received_; 386 std::set<int> received_;
376 bool use_dtls_srtp_; 387 bool use_dtls_srtp_;
377 rtc::SSLProtocolVersion ssl_max_version_; 388 rtc::SSLProtocolVersion ssl_max_version_;
378 bool negotiated_dtls_; 389 bool negotiated_dtls_;
379 bool received_dtls_client_hello_; 390 bool received_dtls_client_hello_;
380 bool received_dtls_server_hello_; 391 bool received_dtls_server_hello_;
392 rtc::SentPacket sent_packet_;
381 }; 393 };
382 394
383 395
384 class DtlsTransportChannelTest : public testing::Test { 396 class DtlsTransportChannelTest : public testing::Test {
385 public: 397 public:
386 DtlsTransportChannelTest() 398 DtlsTransportChannelTest()
387 : client1_("P1"), 399 : client1_("P1"),
388 client2_("P2"), 400 client2_("P2"),
389 channel_ct_(1), 401 channel_ct_(1),
390 use_dtls_(false), 402 use_dtls_(false),
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 EXPECT_EQ(cricket::ICEROLE_CONTROLLED, channel2->GetIceRole()); 563 EXPECT_EQ(cricket::ICEROLE_CONTROLLED, channel2->GetIceRole());
552 EXPECT_EQ(2U, channel2->IceTiebreaker()); 564 EXPECT_EQ(2U, channel2->IceTiebreaker());
553 } 565 }
554 566
555 // Connect without DTLS, and transfer some data. 567 // Connect without DTLS, and transfer some data.
556 TEST_F(DtlsTransportChannelTest, TestTransfer) { 568 TEST_F(DtlsTransportChannelTest, TestTransfer) {
557 ASSERT_TRUE(Connect()); 569 ASSERT_TRUE(Connect());
558 TestTransfer(0, 1000, 100, false); 570 TestTransfer(0, 1000, 100, false);
559 } 571 }
560 572
573 // Connect without DTLS, and transfer some data.
574 TEST_F(DtlsTransportChannelTest, TestOnSentPacket) {
575 ASSERT_TRUE(Connect());
576 EXPECT_EQ(client1_.sent_packet().send_time_ms, -1);
577 TestTransfer(0, 1000, 100, false);
578 EXPECT_EQ(kFakePacketId, client1_.sent_packet().packet_id);
579 EXPECT_GE(client1_.sent_packet().send_time_ms, 0);
580 }
581
561 // Create two channels without DTLS, and transfer some data. 582 // Create two channels without DTLS, and transfer some data.
562 TEST_F(DtlsTransportChannelTest, TestTransferTwoChannels) { 583 TEST_F(DtlsTransportChannelTest, TestTransferTwoChannels) {
563 SetChannelCount(2); 584 SetChannelCount(2);
564 ASSERT_TRUE(Connect()); 585 ASSERT_TRUE(Connect());
565 TestTransfer(0, 1000, 100, false); 586 TestTransfer(0, 1000, 100, false);
566 TestTransfer(1, 1000, 100, false); 587 TestTransfer(1, 1000, 100, false);
567 } 588 }
568 589
569 // Connect without DTLS, and transfer SRTP data. 590 // Connect without DTLS, and transfer SRTP data.
570 TEST_F(DtlsTransportChannelTest, TestTransferSrtp) { 591 TEST_F(DtlsTransportChannelTest, TestTransferSrtp) {
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 // Each side's remote certificate is the other side's local certificate. 885 // Each side's remote certificate is the other side's local certificate.
865 ASSERT_TRUE( 886 ASSERT_TRUE(
866 client1_.transport()->GetRemoteSSLCertificate(remote_cert1.accept())); 887 client1_.transport()->GetRemoteSSLCertificate(remote_cert1.accept()));
867 ASSERT_EQ(remote_cert1->ToPEMString(), 888 ASSERT_EQ(remote_cert1->ToPEMString(),
868 certificate2->ssl_certificate().ToPEMString()); 889 certificate2->ssl_certificate().ToPEMString());
869 ASSERT_TRUE( 890 ASSERT_TRUE(
870 client2_.transport()->GetRemoteSSLCertificate(remote_cert2.accept())); 891 client2_.transport()->GetRemoteSSLCertificate(remote_cert2.accept()));
871 ASSERT_EQ(remote_cert2->ToPEMString(), 892 ASSERT_EQ(remote_cert2->ToPEMString(),
872 certificate1->ssl_certificate().ToPEMString()); 893 certificate1->ssl_certificate().ToPEMString());
873 } 894 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698