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

Side by Side Diff: webrtc/base/sslstreamadapter_unittest.cc

Issue 1459153002: Re-enable mistakenly disabled PEM tests. Misc cleanup and alignment fixes. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Address tommi's comments. Created 5 years, 1 month 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 | « no previous file | no next file » | 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
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 identities_set_(false) { 246 identities_set_(false) {
247 // Set use of the test RNG to get predictable loss patterns. 247 // Set use of the test RNG to get predictable loss patterns.
248 rtc::SetRandomTestMode(true); 248 rtc::SetRandomTestMode(true);
249 } 249 }
250 250
251 ~SSLStreamAdapterTestBase() { 251 ~SSLStreamAdapterTestBase() {
252 // Put it back for the next test. 252 // Put it back for the next test.
253 rtc::SetRandomTestMode(false); 253 rtc::SetRandomTestMode(false);
254 } 254 }
255 255
256 virtual void SetUp() override { 256 void SetUp() override {
257 CreateStreams(); 257 CreateStreams();
258 258
259 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_)); 259 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_));
260 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_)); 260 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_));
261 261
262 // Set up the slots 262 // Set up the slots
263 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); 263 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent);
264 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); 264 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent);
265 265
266 if (!client_cert_pem_.empty() && !client_private_key_pem_.empty()) { 266 if (!client_cert_pem_.empty() && !client_private_key_pem_.empty()) {
267 client_identity_ = rtc::SSLIdentity::FromPEMStrings( 267 client_identity_ = rtc::SSLIdentity::FromPEMStrings(
268 client_private_key_pem_, client_cert_pem_); 268 client_private_key_pem_, client_cert_pem_);
269 } else { 269 } else {
270 client_identity_ = rtc::SSLIdentity::Generate("client", client_key_type_); 270 client_identity_ = rtc::SSLIdentity::Generate("client", client_key_type_);
271 } 271 }
272 server_identity_ = rtc::SSLIdentity::Generate("server", server_key_type_); 272 server_identity_ = rtc::SSLIdentity::Generate("server", server_key_type_);
273 273
274 client_ssl_->SetIdentity(client_identity_); 274 client_ssl_->SetIdentity(client_identity_);
275 server_ssl_->SetIdentity(server_identity_); 275 server_ssl_->SetIdentity(server_identity_);
276 } 276 }
277 277
278 virtual void TearDown() override { 278 void TearDown() override {
279 client_ssl_.reset(nullptr); 279 client_ssl_.reset(nullptr);
280 server_ssl_.reset(nullptr); 280 server_ssl_.reset(nullptr);
281 } 281 }
282 282
283 virtual void CreateStreams() = 0; 283 virtual void CreateStreams() = 0;
284 284
285 // Recreate the client/server identities with the specified validity period. 285 // Recreate the client/server identities with the specified validity period.
286 // |not_before| and |not_after| are offsets from the current time in number 286 // |not_before| and |not_after| are offsets from the current time in number
287 // of seconds. 287 // of seconds.
288 void ResetIdentitiesWithValidity(int not_before, int not_after) { 288 void ResetIdentitiesWithValidity(int not_before, int not_after) {
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 SSLStreamAdapterTestTLS() 539 SSLStreamAdapterTestTLS()
540 : SSLStreamAdapterTestBase("", 540 : SSLStreamAdapterTestBase("",
541 "", 541 "",
542 false, 542 false,
543 ::testing::get<0>(GetParam()), 543 ::testing::get<0>(GetParam()),
544 ::testing::get<1>(GetParam())), 544 ::testing::get<1>(GetParam())),
545 client_buffer_(kFifoBufferSize), 545 client_buffer_(kFifoBufferSize),
546 server_buffer_(kFifoBufferSize) { 546 server_buffer_(kFifoBufferSize) {
547 } 547 }
548 548
549 virtual void CreateStreams() override { 549 void CreateStreams() override {
550 client_stream_ = 550 client_stream_ =
551 new SSLDummyStreamTLS(this, "c2s", &client_buffer_, &server_buffer_); 551 new SSLDummyStreamTLS(this, "c2s", &client_buffer_, &server_buffer_);
552 server_stream_ = 552 server_stream_ =
553 new SSLDummyStreamTLS(this, "s2c", &server_buffer_, &client_buffer_); 553 new SSLDummyStreamTLS(this, "s2c", &server_buffer_, &client_buffer_);
554 } 554 }
555 555
556 // Test data transfer for TLS 556 // Test data transfer for TLS
557 virtual void TestTransfer(int size) { 557 virtual void TestTransfer(int size) {
558 LOG(LS_INFO) << "Starting transfer test with " << size << " bytes"; 558 LOG(LS_INFO) << "Starting transfer test with " << size << " bytes";
559 // Create some dummy data to send. 559 // Create some dummy data to send.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 char buffer[1600]; 623 char buffer[1600];
624 size_t bread; 624 size_t bread;
625 int err2; 625 int err2;
626 rtc::StreamResult r; 626 rtc::StreamResult r;
627 627
628 for (;;) { 628 for (;;) {
629 r = stream->Read(buffer, sizeof(buffer), &bread, &err2); 629 r = stream->Read(buffer, sizeof(buffer), &bread, &err2);
630 630
631 if (r == rtc::SR_ERROR || r == rtc::SR_EOS) { 631 if (r == rtc::SR_ERROR || r == rtc::SR_EOS) {
632 // Unfortunately, errors are the way that the stream adapter 632 // Unfortunately, errors are the way that the stream adapter
633 // signals close in OpenSSL 633 // signals close in OpenSSL.
634 stream->Close(); 634 stream->Close();
635 return; 635 return;
636 } 636 }
637 637
638 if (r == rtc::SR_BLOCK) 638 if (r == rtc::SR_BLOCK)
639 break; 639 break;
640 640
641 ASSERT_EQ(rtc::SR_SUCCESS, r); 641 ASSERT_EQ(rtc::SR_SUCCESS, r);
642 LOG(LS_INFO) << "Read " << bread; 642 LOG(LS_INFO) << "Read " << bread;
643 643
(...skipping 25 matching lines...) Expand all
669 sent_(0) {} 669 sent_(0) {}
670 670
671 SSLStreamAdapterTestDTLS(const std::string& cert_pem, 671 SSLStreamAdapterTestDTLS(const std::string& cert_pem,
672 const std::string& private_key_pem) : 672 const std::string& private_key_pem) :
673 SSLStreamAdapterTestBase(cert_pem, private_key_pem, true), 673 SSLStreamAdapterTestBase(cert_pem, private_key_pem, true),
674 client_buffer_(kBufferCapacity, kDefaultBufferSize), 674 client_buffer_(kBufferCapacity, kDefaultBufferSize),
675 server_buffer_(kBufferCapacity, kDefaultBufferSize), 675 server_buffer_(kBufferCapacity, kDefaultBufferSize),
676 packet_size_(1000), count_(0), sent_(0) { 676 packet_size_(1000), count_(0), sent_(0) {
677 } 677 }
678 678
679 virtual void CreateStreams() override { 679 void CreateStreams() override {
680 client_stream_ = 680 client_stream_ =
681 new SSLDummyStreamDTLS(this, "c2s", &client_buffer_, &server_buffer_); 681 new SSLDummyStreamDTLS(this, "c2s", &client_buffer_, &server_buffer_);
682 server_stream_ = 682 server_stream_ =
683 new SSLDummyStreamDTLS(this, "s2c", &server_buffer_, &client_buffer_); 683 new SSLDummyStreamDTLS(this, "s2c", &server_buffer_, &client_buffer_);
684 } 684 }
685 685
686 virtual void WriteData() { 686 virtual void WriteData() {
687 unsigned char *packet = new unsigned char[1600]; 687 unsigned char *packet = new unsigned char[1600];
688 688
689 while (sent_ < count_) { 689 while (sent_ < count_) {
690 memset(packet, sent_ & 0xff, packet_size_); 690 unsigned int rand_state = sent_;
691 *(reinterpret_cast<uint32_t *>(packet)) = sent_; 691 packet[0] = sent_;
692 for (size_t i = 1; i < packet_size_; i++) {
693 // This is a simple LC PRNG. Keep in synch with identical code below.
694 rand_state = (rand_state * 251 + 19937) >> 7;
695 packet[i] = rand_state & 0xff;
696 }
692 697
693 size_t sent; 698 size_t sent;
694 int rv = client_ssl_->Write(packet, packet_size_, &sent, 0); 699 rtc::StreamResult rv = client_ssl_->Write(packet, packet_size_, &sent, 0);
695 if (rv == rtc::SR_SUCCESS) { 700 if (rv == rtc::SR_SUCCESS) {
696 LOG(LS_VERBOSE) << "Sent: " << sent_; 701 LOG(LS_VERBOSE) << "Sent: " << sent_;
697 sent_++; 702 sent_++;
698 } else if (rv == rtc::SR_BLOCK) { 703 } else if (rv == rtc::SR_BLOCK) {
699 LOG(LS_VERBOSE) << "Blocked..."; 704 LOG(LS_VERBOSE) << "Blocked...";
700 break; 705 break;
701 } else { 706 } else {
702 ADD_FAILURE(); 707 ADD_FAILURE();
703 break; 708 break;
704 } 709 }
(...skipping 19 matching lines...) Expand all
724 } 729 }
725 730
726 if (r == rtc::SR_BLOCK) 731 if (r == rtc::SR_BLOCK)
727 break; 732 break;
728 733
729 ASSERT_EQ(rtc::SR_SUCCESS, r); 734 ASSERT_EQ(rtc::SR_SUCCESS, r);
730 LOG(LS_INFO) << "Read " << bread; 735 LOG(LS_INFO) << "Read " << bread;
731 736
732 // Now parse the datagram 737 // Now parse the datagram
733 ASSERT_EQ(packet_size_, bread); 738 ASSERT_EQ(packet_size_, bread);
734 unsigned char* ptr_to_buffer = buffer; 739 unsigned char packet_num = buffer[0];
735 uint32_t packet_num = *(reinterpret_cast<uint32_t *>(ptr_to_buffer));
736 740
737 for (size_t i = 4; i < packet_size_; i++) { 741 unsigned int rand_state = packet_num;
738 ASSERT_EQ((packet_num & 0xff), buffer[i]); 742 for (size_t i = 1; i < packet_size_; i++) {
743 // This is a simple LC PRNG. Keep in synch with identical code above.
744 rand_state = (rand_state * 251 + 19937) >> 7;
745 ASSERT_EQ(rand_state & 0xff, buffer[i]);
739 } 746 }
740 received_.insert(packet_num); 747 received_.insert(packet_num);
741 } 748 }
742 } 749 }
743 750
744 virtual void TestTransfer(int count) { 751 virtual void TestTransfer(int count) {
745 count_ = count; 752 count_ = count;
746 753
747 WriteData(); 754 WriteData();
748 755
(...skipping 16 matching lines...) Expand all
765 BufferQueueStream server_buffer_; 772 BufferQueueStream server_buffer_;
766 size_t packet_size_; 773 size_t packet_size_;
767 int count_; 774 int count_;
768 int sent_; 775 int sent_;
769 std::set<int> received_; 776 std::set<int> received_;
770 }; 777 };
771 778
772 779
773 rtc::StreamResult SSLDummyStreamBase::Write(const void* data, size_t data_len, 780 rtc::StreamResult SSLDummyStreamBase::Write(const void* data, size_t data_len,
774 size_t* written, int* error) { 781 size_t* written, int* error) {
775 *written = data_len;
776
777 LOG(LS_INFO) << "Writing to loopback " << data_len; 782 LOG(LS_INFO) << "Writing to loopback " << data_len;
778 783
779 if (first_packet_) { 784 if (first_packet_) {
780 first_packet_ = false; 785 first_packet_ = false;
781 if (test_base_->GetLoseFirstPacket()) { 786 if (test_base_->GetLoseFirstPacket()) {
782 LOG(LS_INFO) << "Losing initial packet of length " << data_len; 787 LOG(LS_INFO) << "Losing initial packet of length " << data_len;
788 *written = data_len; // Fake successful writing also to writer.
783 return rtc::SR_SUCCESS; 789 return rtc::SR_SUCCESS;
784 } 790 }
785 } 791 }
786 792
787 return test_base_->DataWritten(this, data, data_len, written, error); 793 return test_base_->DataWritten(this, data, data_len, written, error);
788 }; 794 };
789 795
790 class SSLStreamAdapterTestDTLSFromPEMStrings : public SSLStreamAdapterTestDTLS { 796 class SSLStreamAdapterTestDTLSFromPEMStrings : public SSLStreamAdapterTestDTLS {
791 public: 797 public:
792 SSLStreamAdapterTestDTLSFromPEMStrings() : 798 SSLStreamAdapterTestDTLSFromPEMStrings() :
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 // Test expired certificates are not rejected. 1011 // Test expired certificates are not rejected.
1006 TEST_P(SSLStreamAdapterTestDTLS, TestCertExpired) { 1012 TEST_P(SSLStreamAdapterTestDTLS, TestCertExpired) {
1007 MAYBE_SKIP_TEST(HaveDtls); 1013 MAYBE_SKIP_TEST(HaveDtls);
1008 long one_day = 60 * 60 * 24; 1014 long one_day = 60 * 60 * 24;
1009 // Make the certificates already expired. 1015 // Make the certificates already expired.
1010 ResetIdentitiesWithValidity(-one_day, -one_day); 1016 ResetIdentitiesWithValidity(-one_day, -one_day);
1011 TestHandshake(); 1017 TestHandshake();
1012 } 1018 }
1013 1019
1014 // Test data transfer using certs created from strings. 1020 // Test data transfer using certs created from strings.
1015 TEST_P(SSLStreamAdapterTestDTLSFromPEMStrings, TestTransfer) { 1021 TEST_F(SSLStreamAdapterTestDTLSFromPEMStrings, TestTransfer) {
1016 MAYBE_SKIP_TEST(HaveDtls); 1022 MAYBE_SKIP_TEST(HaveDtls);
1017 TestHandshake(); 1023 TestHandshake();
1018 TestTransfer(100); 1024 TestTransfer(100);
1019 } 1025 }
1020 1026
1021 // Test getting the remote certificate. 1027 // Test getting the remote certificate.
1022 TEST_P(SSLStreamAdapterTestDTLSFromPEMStrings, TestDTLSGetPeerCertificate) { 1028 TEST_F(SSLStreamAdapterTestDTLSFromPEMStrings, TestDTLSGetPeerCertificate) {
1023 MAYBE_SKIP_TEST(HaveDtls); 1029 MAYBE_SKIP_TEST(HaveDtls);
1024 1030
1025 // Peer certificates haven't been received yet. 1031 // Peer certificates haven't been received yet.
1026 rtc::scoped_ptr<rtc::SSLCertificate> client_peer_cert; 1032 rtc::scoped_ptr<rtc::SSLCertificate> client_peer_cert;
1027 ASSERT_FALSE(GetPeerCertificate(true, client_peer_cert.accept())); 1033 ASSERT_FALSE(GetPeerCertificate(true, client_peer_cert.accept()));
1028 ASSERT_FALSE(client_peer_cert != NULL); 1034 ASSERT_FALSE(client_peer_cert != NULL);
1029 1035
1030 rtc::scoped_ptr<rtc::SSLCertificate> server_peer_cert; 1036 rtc::scoped_ptr<rtc::SSLCertificate> server_peer_cert;
1031 ASSERT_FALSE(GetPeerCertificate(false, server_peer_cert.accept())); 1037 ASSERT_FALSE(GetPeerCertificate(false, server_peer_cert.accept()));
1032 ASSERT_FALSE(server_peer_cert != NULL); 1038 ASSERT_FALSE(server_peer_cert != NULL);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); 1151 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256))));
1146 INSTANTIATE_TEST_CASE_P( 1152 INSTANTIATE_TEST_CASE_P(
1147 SSLStreamAdapterTestsDTLS, 1153 SSLStreamAdapterTestsDTLS,
1148 SSLStreamAdapterTestDTLS, 1154 SSLStreamAdapterTestDTLS,
1149 Combine(Values(rtc::KeyParams::RSA(1024, 65537), 1155 Combine(Values(rtc::KeyParams::RSA(1024, 65537),
1150 rtc::KeyParams::RSA(1152, 65537), 1156 rtc::KeyParams::RSA(1152, 65537),
1151 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)), 1157 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)),
1152 Values(rtc::KeyParams::RSA(1024, 65537), 1158 Values(rtc::KeyParams::RSA(1024, 65537),
1153 rtc::KeyParams::RSA(1152, 65537), 1159 rtc::KeyParams::RSA(1152, 65537),
1154 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); 1160 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256))));
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698