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

Side by Side Diff: net/quic/core/quic_connection_test.cc

Issue 2325803002: Deprecate FLAGS_quic_never_write_unencrypted_data now that the unit tests all pass. (Closed)
Patch Set: Created 4 years, 3 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 | « no previous file | net/quic/core/quic_flags_list.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 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/core/quic_connection.h" 5 #include "net/quic/core/quic_connection.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <memory> 8 #include <memory>
9 #include <ostream> 9 #include <ostream>
10 #include <utility> 10 #include <utility>
(...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 QuicVersion version) 469 QuicVersion version)
470 : QuicConnection(connection_id, 470 : QuicConnection(connection_id,
471 address, 471 address,
472 helper, 472 helper,
473 alarm_factory, 473 alarm_factory,
474 writer, 474 writer,
475 /* owns_writer= */ false, 475 /* owns_writer= */ false,
476 perspective, 476 perspective,
477 SupportedVersions(version)) { 477 SupportedVersions(version)) {
478 writer->set_perspective(perspective); 478 writer->set_perspective(perspective);
479 SetEncrypter(ENCRYPTION_FORWARD_SECURE, new NullEncrypter());
479 } 480 }
480 481
481 void SendAck() { QuicConnectionPeer::SendAck(this); } 482 void SendAck() { QuicConnectionPeer::SendAck(this); }
482 483
483 void SetSendAlgorithm(QuicPathId path_id, 484 void SetSendAlgorithm(QuicPathId path_id,
484 SendAlgorithmInterface* send_algorithm) { 485 SendAlgorithmInterface* send_algorithm) {
485 QuicConnectionPeer::SetSendAlgorithm(this, path_id, send_algorithm); 486 QuicConnectionPeer::SetSendAlgorithm(this, path_id, send_algorithm);
486 } 487 }
487 488
488 void SetLossAlgorithm(QuicPathId path_id, 489 void SetLossAlgorithm(QuicPathId path_id,
(...skipping 24 matching lines...) Expand all
513 } 514 }
514 OnSerializedPacket(&serialized_packet); 515 OnSerializedPacket(&serialized_packet);
515 } 516 }
516 517
517 QuicConsumedData SendStreamDataWithString( 518 QuicConsumedData SendStreamDataWithString(
518 QuicStreamId id, 519 QuicStreamId id,
519 StringPiece data, 520 StringPiece data,
520 QuicStreamOffset offset, 521 QuicStreamOffset offset,
521 bool fin, 522 bool fin,
522 QuicAckListenerInterface* listener) { 523 QuicAckListenerInterface* listener) {
524 if (id != kCryptoStreamId && this->encryption_level() == ENCRYPTION_NONE) {
525 this->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
526 }
523 struct iovec iov; 527 struct iovec iov;
524 QuicIOVector data_iov(MakeIOVector(data, &iov)); 528 QuicIOVector data_iov(MakeIOVector(data, &iov));
525 return QuicConnection::SendStreamData(id, data_iov, offset, fin, listener); 529 return QuicConnection::SendStreamData(id, data_iov, offset, fin, listener);
526 } 530 }
527 531
528 QuicConsumedData SendStreamData3() { 532 QuicConsumedData SendStreamData3() {
529 return SendStreamDataWithString(kClientDataStreamId1, "food", 0, !kFin, 533 return SendStreamDataWithString(kClientDataStreamId1, "food", 0, !kFin,
530 nullptr); 534 nullptr);
531 } 535 }
532 536
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber()); 743 EXPECT_CALL(visitor_, OnCanWrite()).Times(AnyNumber());
740 EXPECT_CALL(visitor_, PostProcessAfterData()).Times(AnyNumber()); 744 EXPECT_CALL(visitor_, PostProcessAfterData()).Times(AnyNumber());
741 EXPECT_CALL(visitor_, HasOpenDynamicStreams()) 745 EXPECT_CALL(visitor_, HasOpenDynamicStreams())
742 .WillRepeatedly(Return(false)); 746 .WillRepeatedly(Return(false));
743 EXPECT_CALL(visitor_, OnCongestionWindowChange(_)).Times(AnyNumber()); 747 EXPECT_CALL(visitor_, OnCongestionWindowChange(_)).Times(AnyNumber());
744 748
745 EXPECT_CALL(*loss_algorithm_, GetLossTimeout()) 749 EXPECT_CALL(*loss_algorithm_, GetLossTimeout())
746 .WillRepeatedly(Return(QuicTime::Zero())); 750 .WillRepeatedly(Return(QuicTime::Zero()));
747 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _)) 751 EXPECT_CALL(*loss_algorithm_, DetectLosses(_, _, _, _, _))
748 .Times(AnyNumber()); 752 .Times(AnyNumber());
749 // TODO(ianswett): Fix QuicConnectionTests so they don't attempt to write
750 // non-crypto stream data at ENCRYPTION_NONE.
751 FLAGS_quic_never_write_unencrypted_data = false;
752 } 753 }
753 754
754 QuicVersion version() { return GetParam().version; } 755 QuicVersion version() { return GetParam().version; }
755 756
756 QuicAckFrame* outgoing_ack() { 757 QuicAckFrame* outgoing_ack() {
757 QuicFrame ack_frame = QuicConnectionPeer::GetUpdatedAckFrame(&connection_); 758 QuicFrame ack_frame = QuicConnectionPeer::GetUpdatedAckFrame(&connection_);
758 ack_ = *ack_frame.ack_frame; 759 ack_ = *ack_frame.ack_frame;
759 return &ack_; 760 return &ack_;
760 } 761 }
761 762
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 connection_.ProcessUdpPacket( 802 connection_.ProcessUdpPacket(
802 self_address, peer_address, 803 self_address, peer_address,
803 QuicReceivedPacket(serialized_packet.encrypted_buffer, 804 QuicReceivedPacket(serialized_packet.encrypted_buffer,
804 serialized_packet.encrypted_length, clock_.Now())); 805 serialized_packet.encrypted_length, clock_.Now()));
805 if (connection_.GetSendAlarm()->IsSet()) { 806 if (connection_.GetSendAlarm()->IsSet()) {
806 connection_.GetSendAlarm()->Fire(); 807 connection_.GetSendAlarm()->Fire();
807 } 808 }
808 return serialized_packet.entropy_hash; 809 return serialized_packet.entropy_hash;
809 } 810 }
810 811
812 // Bypassing the packet creator is unrealistic, but allows us to process
813 // packets the QuicPacketCreator won't allow us to create.
814 void ForceProcessFramePacket(QuicFrame frame) {
815 QuicFrames frames;
816 frames.push_back(QuicFrame(frame));
817 QuicPacketCreatorPeer::SetSendVersionInPacket(
818 &peer_creator_, connection_.perspective() == Perspective::IS_SERVER);
819 QuicPacketHeader header;
820 QuicPacketCreatorPeer::FillPacketHeader(&peer_creator_, &header);
821 char encrypted_buffer[kMaxPacketSize];
822 size_t length = peer_framer_.BuildDataPacket(
823 header, frames, encrypted_buffer, kMaxPacketSize);
824 DCHECK_GT(length, 0u);
825
826 const size_t encrypted_length = peer_framer_.EncryptInPlace(
827 ENCRYPTION_NONE, kDefaultPathId, header.packet_number,
828 GetStartOfEncryptedData(peer_framer_.version(), header), length,
829 kMaxPacketSize, encrypted_buffer);
830 DCHECK_GT(encrypted_length, 0u);
831
832 connection_.ProcessUdpPacket(
833 kSelfAddress, kPeerAddress,
834 QuicReceivedPacket(encrypted_buffer, encrypted_length, clock_.Now()));
835 }
836
811 QuicPacketEntropyHash ProcessFramePacketAtLevel(QuicPathId path_id, 837 QuicPacketEntropyHash ProcessFramePacketAtLevel(QuicPathId path_id,
812 QuicPacketNumber number, 838 QuicPacketNumber number,
813 QuicFrame frame, 839 QuicFrame frame,
814 EncryptionLevel level) { 840 EncryptionLevel level) {
815 QuicPacketHeader header; 841 QuicPacketHeader header;
816 header.public_header.connection_id = connection_id_; 842 header.public_header.connection_id = connection_id_;
817 header.public_header.packet_number_length = packet_number_length_; 843 header.public_header.packet_number_length = packet_number_length_;
818 header.public_header.connection_id_length = connection_id_length_; 844 header.public_header.connection_id_length = connection_id_length_;
819 header.public_header.multipath_flag = path_id != kDefaultPathId; 845 header.public_header.multipath_flag = path_id != kDefaultPathId;
820 header.path_id = path_id; 846 header.path_id = path_id;
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 // Should ack immediately since we have missing packets. 1495 // Should ack immediately since we have missing packets.
1470 EXPECT_EQ(2u, writer_->packets_write_attempts()); 1496 EXPECT_EQ(2u, writer_->packets_write_attempts());
1471 1497
1472 ProcessAckPacket(1, &ack1); 1498 ProcessAckPacket(1, &ack1);
1473 // Should not ack an ack filling a missing packet. 1499 // Should not ack an ack filling a missing packet.
1474 EXPECT_EQ(2u, writer_->packets_write_attempts()); 1500 EXPECT_EQ(2u, writer_->packets_write_attempts());
1475 } 1501 }
1476 1502
1477 TEST_P(QuicConnectionTest, AckReceiptCausesAckSend) { 1503 TEST_P(QuicConnectionTest, AckReceiptCausesAckSend) {
1478 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1504 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1479
1480 QuicPacketNumber original; 1505 QuicPacketNumber original;
1481 QuicByteCount packet_size; 1506 QuicByteCount packet_size;
1482 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)) 1507 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
1483 .WillOnce( 1508 .WillOnce(
1484 DoAll(SaveArg<2>(&original), SaveArg<3>(&packet_size), Return(true))); 1509 DoAll(SaveArg<2>(&original), SaveArg<3>(&packet_size), Return(true)));
1485 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); 1510 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr);
1486 QuicAckFrame frame = InitAckFrame(original); 1511 QuicAckFrame frame = InitAckFrame(original);
1487 NackPacket(original, &frame); 1512 NackPacket(original, &frame);
1488 // First nack triggers early retransmit. 1513 // First nack triggers early retransmit.
1489 SendAlgorithmInterface::CongestionVector lost_packets; 1514 SendAlgorithmInterface::CongestionVector lost_packets;
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
1882 connection_.OnCanWrite(); 1907 connection_.OnCanWrite();
1883 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 1908 EXPECT_EQ(0u, connection_.NumQueuedPackets());
1884 1909
1885 // Parse the last packet and ensure it's one stream frame from one stream. 1910 // Parse the last packet and ensure it's one stream frame from one stream.
1886 EXPECT_EQ(1u, writer_->frame_count()); 1911 EXPECT_EQ(1u, writer_->frame_count());
1887 EXPECT_EQ(1u, writer_->stream_frames().size()); 1912 EXPECT_EQ(1u, writer_->stream_frames().size());
1888 EXPECT_EQ(1u, writer_->stream_frames()[0]->stream_id); 1913 EXPECT_EQ(1u, writer_->stream_frames()[0]->stream_id);
1889 } 1914 }
1890 1915
1891 TEST_P(QuicConnectionTest, SendingZeroBytes) { 1916 TEST_P(QuicConnectionTest, SendingZeroBytes) {
1917 connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
1892 // Send a zero byte write with a fin using writev. 1918 // Send a zero byte write with a fin using writev.
1893 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)); 1919 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _));
1894 QuicIOVector empty_iov(nullptr, 0, 0); 1920 QuicIOVector empty_iov(nullptr, 0, 0);
1895 connection_.SendStreamData(kHeadersStreamId, empty_iov, 0, kFin, nullptr); 1921 connection_.SendStreamData(kHeadersStreamId, empty_iov, 0, kFin, nullptr);
1896 1922
1897 EXPECT_EQ(0u, connection_.NumQueuedPackets()); 1923 EXPECT_EQ(0u, connection_.NumQueuedPackets());
1898 EXPECT_FALSE(connection_.HasQueuedData()); 1924 EXPECT_FALSE(connection_.HasQueuedData());
1899 1925
1900 // Parse the last packet and ensure it's one stream frame from one stream. 1926 // Parse the last packet and ensure it's one stream frame from one stream.
1901 EXPECT_EQ(1u, writer_->frame_count()); 1927 EXPECT_EQ(1u, writer_->frame_count());
1902 EXPECT_EQ(1u, writer_->stream_frames().size()); 1928 EXPECT_EQ(1u, writer_->stream_frames().size());
1903 EXPECT_EQ(kHeadersStreamId, writer_->stream_frames()[0]->stream_id); 1929 EXPECT_EQ(kHeadersStreamId, writer_->stream_frames()[0]->stream_id);
1904 EXPECT_TRUE(writer_->stream_frames()[0]->fin); 1930 EXPECT_TRUE(writer_->stream_frames()[0]->fin);
1905 } 1931 }
1906 1932
1907 TEST_P(QuicConnectionTest, LargeSendWithPendingAck) { 1933 TEST_P(QuicConnectionTest, LargeSendWithPendingAck) {
1934 connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
1908 // Set the ack alarm by processing a ping frame. 1935 // Set the ack alarm by processing a ping frame.
1909 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 1936 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
1910 1937
1911 // Processs a PING frame. 1938 // Processs a PING frame.
1912 ProcessFramePacket(QuicFrame(QuicPingFrame())); 1939 ProcessFramePacket(QuicFrame(QuicPingFrame()));
1913 // Ensure that this has caused the ACK alarm to be set. 1940 // Ensure that this has caused the ACK alarm to be set.
1914 QuicAlarm* ack_alarm = QuicConnectionPeer::GetAckAlarm(&connection_); 1941 QuicAlarm* ack_alarm = QuicConnectionPeer::GetAckAlarm(&connection_);
1915 EXPECT_TRUE(ack_alarm->IsSet()); 1942 EXPECT_TRUE(ack_alarm->IsSet());
1916 1943
1917 // Send data and ensure the ack is bundled. 1944 // Send data and ensure the ack is bundled.
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
2484 connection_.GetRetransmissionAlarm()->deadline()); 2511 connection_.GetRetransmissionAlarm()->deadline());
2485 // Simulate the retransmission alarm firing. 2512 // Simulate the retransmission alarm firing.
2486 clock_.AdvanceTime(DefaultRetransmissionTime()); 2513 clock_.AdvanceTime(DefaultRetransmissionTime());
2487 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _)); 2514 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 2u, _, _));
2488 connection_.GetRetransmissionAlarm()->Fire(); 2515 connection_.GetRetransmissionAlarm()->Fire();
2489 EXPECT_EQ(2u, writer_->header().packet_number); 2516 EXPECT_EQ(2u, writer_->header().packet_number);
2490 // We do not raise the high water mark yet. 2517 // We do not raise the high water mark yet.
2491 EXPECT_EQ(1u, stop_waiting()->least_unacked); 2518 EXPECT_EQ(1u, stop_waiting()->least_unacked);
2492 } 2519 }
2493 2520
2494 TEST_P(QuicConnectionTest, RTOWithSameEncryptionLevel) { 2521 TEST_P(QuicConnectionTest, RetransmitWithSameEncryptionLevel) {
2495 connection_.SetMaxTailLossProbes(kDefaultPathId, 0);
2496
2497 QuicTime default_retransmission_time =
2498 clock_.ApproximateNow() + DefaultRetransmissionTime();
2499 use_tagging_decrypter(); 2522 use_tagging_decrypter();
2500 2523
2501 // A TaggingEncrypter puts kTagSize copies of the given byte (0x01 here) at 2524 // A TaggingEncrypter puts kTagSize copies of the given byte (0x01 here) at
2502 // the end of the packet. We can test this to check which encrypter was used. 2525 // the end of the packet. We can test this to check which encrypter was used.
2503 connection_.SetEncrypter(ENCRYPTION_NONE, new TaggingEncrypter(0x01)); 2526 connection_.SetEncrypter(ENCRYPTION_NONE, new TaggingEncrypter(0x01));
2504 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); 2527 SendStreamDataToPeer(kCryptoStreamId, "foo", 0, !kFin, nullptr);
2505 EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet()); 2528 EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet());
2506 2529
2507 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); 2530 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02));
2508 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); 2531 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
2509 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr); 2532 SendStreamDataToPeer(3, "foo", 0, !kFin, nullptr);
2510 EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet()); 2533 EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
2511 2534
2512 EXPECT_EQ(default_retransmission_time,
2513 connection_.GetRetransmissionAlarm()->deadline());
2514 { 2535 {
2515 InSequence s; 2536 InSequence s;
2516 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 3, _, _)); 2537 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 3, _, _));
2517 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 4, _, _)); 2538 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, 4, _, _));
2518 } 2539 }
2519 2540
2520 // Simulate the retransmission alarm firing. 2541 // Manually mark both packets for retransmission.
2521 clock_.AdvanceTime(DefaultRetransmissionTime()); 2542 connection_.RetransmitUnackedPackets(ALL_UNACKED_RETRANSMISSION);
2522 connection_.GetRetransmissionAlarm()->Fire();
2523 2543
2524 // Packet should have been sent with ENCRYPTION_NONE. 2544 // Packet should have been sent with ENCRYPTION_NONE.
2525 EXPECT_EQ(0x01010101u, writer_->final_bytes_of_previous_packet()); 2545 EXPECT_EQ(0x01010101u, writer_->final_bytes_of_previous_packet());
2526 2546
2527 // Packet should have been sent with ENCRYPTION_INITIAL. 2547 // Packet should have been sent with ENCRYPTION_INITIAL.
2528 EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet()); 2548 EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet());
2529 } 2549 }
2530 2550
2531 TEST_P(QuicConnectionTest, SendHandshakeMessages) { 2551 TEST_P(QuicConnectionTest, SendHandshakeMessages) {
2532 use_tagging_decrypter(); 2552 use_tagging_decrypter();
(...skipping 21 matching lines...) Expand all
2554 2574
2555 // Verify that the handshake packet went out at the null encryption. 2575 // Verify that the handshake packet went out at the null encryption.
2556 EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet()); 2576 EXPECT_EQ(0x01010101u, writer_->final_bytes_of_last_packet());
2557 } 2577 }
2558 2578
2559 TEST_P(QuicConnectionTest, 2579 TEST_P(QuicConnectionTest,
2560 DropRetransmitsForNullEncryptedPacketAfterForwardSecure) { 2580 DropRetransmitsForNullEncryptedPacketAfterForwardSecure) {
2561 use_tagging_decrypter(); 2581 use_tagging_decrypter();
2562 connection_.SetEncrypter(ENCRYPTION_NONE, new TaggingEncrypter(0x01)); 2582 connection_.SetEncrypter(ENCRYPTION_NONE, new TaggingEncrypter(0x01));
2563 QuicPacketNumber packet_number; 2583 QuicPacketNumber packet_number;
2564 SendStreamDataToPeer(3, "foo", 0, !kFin, &packet_number); 2584 SendStreamDataToPeer(kCryptoStreamId, "foo", 0, !kFin, &packet_number);
2565 2585
2566 // Simulate the retransmission alarm firing and the socket blocking. 2586 // Simulate the retransmission alarm firing and the socket blocking.
2567 BlockOnNextWrite(); 2587 BlockOnNextWrite();
2568 clock_.AdvanceTime(DefaultRetransmissionTime()); 2588 clock_.AdvanceTime(DefaultRetransmissionTime());
2569 connection_.GetRetransmissionAlarm()->Fire(); 2589 connection_.GetRetransmissionAlarm()->Fire();
2570 2590
2571 // Go forward secure. 2591 // Go forward secure.
2572 connection_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, 2592 connection_.SetEncrypter(ENCRYPTION_FORWARD_SECURE,
2573 new TaggingEncrypter(0x02)); 2593 new TaggingEncrypter(0x02));
2574 connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); 2594 connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
(...skipping 2437 matching lines...) Expand 10 before | Expand all | Expand 10 after
5012 } 5032 }
5013 5033
5014 TEST_P(QuicConnectionTest, SendPingImmediately) { 5034 TEST_P(QuicConnectionTest, SendPingImmediately) {
5015 CongestionBlockWrites(); 5035 CongestionBlockWrites();
5016 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); 5036 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
5017 connection_.SendPing(); 5037 connection_.SendPing();
5018 EXPECT_FALSE(connection_.HasQueuedData()); 5038 EXPECT_FALSE(connection_.HasQueuedData());
5019 } 5039 }
5020 5040
5021 TEST_P(QuicConnectionTest, SendingUnencryptedStreamDataFails) { 5041 TEST_P(QuicConnectionTest, SendingUnencryptedStreamDataFails) {
5022 FLAGS_quic_never_write_unencrypted_data = true;
5023 EXPECT_CALL(visitor_, 5042 EXPECT_CALL(visitor_,
5024 OnConnectionClosed(QUIC_ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA, 5043 OnConnectionClosed(QUIC_ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA,
5025 _, ConnectionCloseSource::FROM_SELF)); 5044 _, ConnectionCloseSource::FROM_SELF));
5026 EXPECT_QUIC_BUG(connection_.SendStreamDataWithString(3, "", 0, kFin, nullptr), 5045 struct iovec iov;
5046 QuicIOVector data_iov(MakeIOVector("", &iov));
5047 EXPECT_QUIC_BUG(connection_.SendStreamData(3, data_iov, 0, kFin, nullptr),
5027 "Cannot send stream data without encryption."); 5048 "Cannot send stream data without encryption.");
5028 EXPECT_FALSE(connection_.connected()); 5049 EXPECT_FALSE(connection_.connected());
5029 } 5050 }
5030 5051
5031 TEST_P(QuicConnectionTest, EnableMultipathNegotiation) { 5052 TEST_P(QuicConnectionTest, EnableMultipathNegotiation) {
5032 // Test multipath negotiation during crypto handshake. Multipath is enabled 5053 // Test multipath negotiation during crypto handshake. Multipath is enabled
5033 // when both endpoints enable multipath. 5054 // when both endpoints enable multipath.
5034 FLAGS_quic_enable_multipath = true; 5055 FLAGS_quic_enable_multipath = true;
5035 EXPECT_TRUE(connection_.connected()); 5056 EXPECT_TRUE(connection_.connected());
5036 EXPECT_FALSE(QuicConnectionPeer::IsMultipathEnabled(&connection_)); 5057 EXPECT_FALSE(QuicConnectionPeer::IsMultipathEnabled(&connection_));
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
5124 CryptoHandshakeMessage message; 5145 CryptoHandshakeMessage message;
5125 CryptoFramer framer; 5146 CryptoFramer framer;
5126 message.set_tag(kCHLO); 5147 message.set_tag(kCHLO);
5127 std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message)); 5148 std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
5128 frame1_.stream_id = 10; 5149 frame1_.stream_id = 10;
5129 frame1_.data_buffer = data->data(); 5150 frame1_.data_buffer = data->data();
5130 frame1_.data_length = data->length(); 5151 frame1_.data_length = data->length();
5131 5152
5132 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_MAYBE_CORRUPTED_MEMORY, _, 5153 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_MAYBE_CORRUPTED_MEMORY, _,
5133 ConnectionCloseSource::FROM_SELF)); 5154 ConnectionCloseSource::FROM_SELF));
5134 ProcessFramePacket(QuicFrame(&frame1_)); 5155 ForceProcessFramePacket(QuicFrame(&frame1_));
5135 } 5156 }
5136 5157
5137 TEST_P(QuicConnectionTest, ClientReceivesRejOnNonCryptoStream) { 5158 TEST_P(QuicConnectionTest, ClientReceivesRejOnNonCryptoStream) {
5138 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); 5159 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
5139 5160
5140 CryptoHandshakeMessage message; 5161 CryptoHandshakeMessage message;
5141 CryptoFramer framer; 5162 CryptoFramer framer;
5142 message.set_tag(kREJ); 5163 message.set_tag(kREJ);
5143 std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message)); 5164 std::unique_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
5144 frame1_.stream_id = 10; 5165 frame1_.stream_id = 10;
5145 frame1_.data_buffer = data->data(); 5166 frame1_.data_buffer = data->data();
5146 frame1_.data_length = data->length(); 5167 frame1_.data_length = data->length();
5147 5168
5148 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_MAYBE_CORRUPTED_MEMORY, _, 5169 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_MAYBE_CORRUPTED_MEMORY, _,
5149 ConnectionCloseSource::FROM_SELF)); 5170 ConnectionCloseSource::FROM_SELF));
5150 ProcessFramePacket(QuicFrame(&frame1_)); 5171 ForceProcessFramePacket(QuicFrame(&frame1_));
5151 } 5172 }
5152 5173
5153 TEST_P(QuicConnectionTest, CloseConnectionOnPacketTooLarge) { 5174 TEST_P(QuicConnectionTest, CloseConnectionOnPacketTooLarge) {
5154 FLAGS_quic_close_connection_on_packet_too_large = true; 5175 FLAGS_quic_close_connection_on_packet_too_large = true;
5155 SimulateNextPacketTooLarge(); 5176 SimulateNextPacketTooLarge();
5156 // Although the data packet cannot be written, the send packet manager is 5177 // Although the data packet cannot be written, the send packet manager is
5157 // informed. Also a connection close packet is sent. 5178 // informed. Also a connection close packet is sent.
5158 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2); 5179 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(2);
5159 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PACKET_WRITE_ERROR, _, 5180 EXPECT_CALL(visitor_, OnConnectionClosed(QUIC_PACKET_WRITE_ERROR, _,
5160 ConnectionCloseSource::FROM_SELF)) 5181 ConnectionCloseSource::FROM_SELF))
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
5252 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr); 5273 connection_.SendStreamDataWithString(3, "foo", 0, !kFin, nullptr);
5253 EXPECT_EQ(1u, writer_->frame_count()); 5274 EXPECT_EQ(1u, writer_->frame_count());
5254 EXPECT_FALSE(writer_->connection_close_frames().empty()); 5275 EXPECT_FALSE(writer_->connection_close_frames().empty());
5255 // Ack frame is not bundled in connection close packet. 5276 // Ack frame is not bundled in connection close packet.
5256 EXPECT_TRUE(writer_->ack_frames().empty()); 5277 EXPECT_TRUE(writer_->ack_frames().empty());
5257 } 5278 }
5258 5279
5259 } // namespace 5280 } // namespace
5260 } // namespace test 5281 } // namespace test
5261 } // namespace net 5282 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/quic/core/quic_flags_list.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698