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

Side by Side Diff: net/quic/quic_fec_group_test.cc

Issue 268343002: Allow 0-RTT handshakes for QUIC HTTPS requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_fec_group.cc ('k') | net/quic/quic_packet_creator.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/quic_fec_group.h" 5 #include "net/quic/quic_fec_group.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 // If we're out of order, send the FEC packet in the position of the 62 // If we're out of order, send the FEC packet in the position of the
63 // lost packet. Otherwise send all (non-missing) packets, then FEC. 63 // lost packet. Otherwise send all (non-missing) packets, then FEC.
64 if (out_of_order) { 64 if (out_of_order) {
65 // Update the FEC state for each non-lost packet. 65 // Update the FEC state for each non-lost packet.
66 for (size_t packet = 0; packet < num_packets; packet++) { 66 for (size_t packet = 0; packet < num_packets; packet++) {
67 if (packet == lost_packet) { 67 if (packet == lost_packet) {
68 ASSERT_FALSE(group.IsFinished()); 68 ASSERT_FALSE(group.IsFinished());
69 QuicFecData fec; 69 QuicFecData fec;
70 fec.fec_group = 0; 70 fec.fec_group = 0;
71 fec.redundancy = StringPiece(redundancy.get(), strlen(kData[0])); 71 fec.redundancy = StringPiece(redundancy.get(), strlen(kData[0]));
72 ASSERT_TRUE(group.UpdateFec(num_packets, fec)); 72 ASSERT_TRUE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, num_packets,
73 fec));
73 } else { 74 } else {
74 QuicPacketHeader header; 75 QuicPacketHeader header;
75 header.packet_sequence_number = packet; 76 header.packet_sequence_number = packet;
76 header.entropy_flag = kEntropyFlag[packet]; 77 header.entropy_flag = kEntropyFlag[packet];
77 ASSERT_TRUE(group.Update(header, kData[packet])); 78 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header,
79 kData[packet]));
78 } 80 }
79 ASSERT_TRUE(group.CanRevive() == (packet == num_packets - 1)); 81 ASSERT_TRUE(group.CanRevive() == (packet == num_packets - 1));
80 } 82 }
81 } else { 83 } else {
82 // Update the FEC state for each non-lost packet. 84 // Update the FEC state for each non-lost packet.
83 for (size_t packet = 0; packet < num_packets; packet++) { 85 for (size_t packet = 0; packet < num_packets; packet++) {
84 if (packet == lost_packet) { 86 if (packet == lost_packet) {
85 continue; 87 continue;
86 } 88 }
87 89
88 QuicPacketHeader header; 90 QuicPacketHeader header;
89 header.packet_sequence_number = packet; 91 header.packet_sequence_number = packet;
90 header.entropy_flag = kEntropyFlag[packet]; 92 header.entropy_flag = kEntropyFlag[packet];
91 ASSERT_TRUE(group.Update(header, kData[packet])); 93 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header,
94 kData[packet]));
92 ASSERT_FALSE(group.CanRevive()); 95 ASSERT_FALSE(group.CanRevive());
93 } 96 }
94 97
95 ASSERT_FALSE(group.IsFinished()); 98 ASSERT_FALSE(group.IsFinished());
96 // Attempt to revive the missing packet. 99 // Attempt to revive the missing packet.
97 QuicFecData fec; 100 QuicFecData fec;
98 fec.fec_group = 0; 101 fec.fec_group = 0;
99 fec.redundancy = StringPiece(redundancy.get(), strlen(kData[0])); 102 fec.redundancy = StringPiece(redundancy.get(), strlen(kData[0]));
100 103
101 ASSERT_TRUE(group.UpdateFec(num_packets, fec)); 104 ASSERT_TRUE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, num_packets,
105 fec));
102 } 106 }
103 QuicPacketHeader header; 107 QuicPacketHeader header;
104 char recovered[kMaxPacketSize]; 108 char recovered[kMaxPacketSize];
105 ASSERT_TRUE(group.CanRevive()); 109 ASSERT_TRUE(group.CanRevive());
106 size_t len = group.Revive(&header, recovered, arraysize(recovered)); 110 size_t len = group.Revive(&header, recovered, arraysize(recovered));
107 ASSERT_NE(0u, len) 111 ASSERT_NE(0u, len)
108 << "Failed to revive packet " << lost_packet << " out of " 112 << "Failed to revive packet " << lost_packet << " out of "
109 << num_packets; 113 << num_packets;
110 EXPECT_EQ(lost_packet, header.packet_sequence_number) 114 EXPECT_EQ(lost_packet, header.packet_sequence_number)
111 << "Failed to revive packet " << lost_packet << " out of " 115 << "Failed to revive packet " << lost_packet << " out of "
(...skipping 30 matching lines...) Expand all
142 char data1[] = "abc123"; 146 char data1[] = "abc123";
143 char redundancy[arraysize(data1)]; 147 char redundancy[arraysize(data1)];
144 for (size_t i = 0; i < arraysize(data1); i++) { 148 for (size_t i = 0; i < arraysize(data1); i++) {
145 redundancy[i] = data1[i]; 149 redundancy[i] = data1[i];
146 } 150 }
147 151
148 QuicFecGroup group; 152 QuicFecGroup group;
149 153
150 QuicPacketHeader header; 154 QuicPacketHeader header;
151 header.packet_sequence_number = 3; 155 header.packet_sequence_number = 3;
152 group.Update(header, data1); 156 group.Update(ENCRYPTION_FORWARD_SECURE, header, data1);
153 157
154 QuicFecData fec; 158 QuicFecData fec;
155 fec.fec_group = 1; 159 fec.fec_group = 1;
156 fec.redundancy = redundancy; 160 fec.redundancy = redundancy;
157 161
158 header.packet_sequence_number = 2; 162 header.packet_sequence_number = 2;
159 ASSERT_FALSE(group.UpdateFec(2, fec)); 163 ASSERT_FALSE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, 2, fec));
160 } 164 }
161 165
162 TEST_F(QuicFecGroupTest, ProtectsPacketsBefore) { 166 TEST_F(QuicFecGroupTest, ProtectsPacketsBefore) {
163 QuicPacketHeader header; 167 QuicPacketHeader header;
164 header.packet_sequence_number = 3; 168 header.packet_sequence_number = 3;
165 169
166 QuicFecGroup group; 170 QuicFecGroup group;
167 ASSERT_TRUE(group.Update(header, kData[0])); 171 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kData[0]));
168 172
169 EXPECT_FALSE(group.ProtectsPacketsBefore(1)); 173 EXPECT_FALSE(group.ProtectsPacketsBefore(1));
170 EXPECT_FALSE(group.ProtectsPacketsBefore(2)); 174 EXPECT_FALSE(group.ProtectsPacketsBefore(2));
171 EXPECT_FALSE(group.ProtectsPacketsBefore(3)); 175 EXPECT_FALSE(group.ProtectsPacketsBefore(3));
172 EXPECT_TRUE(group.ProtectsPacketsBefore(4)); 176 EXPECT_TRUE(group.ProtectsPacketsBefore(4));
173 EXPECT_TRUE(group.ProtectsPacketsBefore(5)); 177 EXPECT_TRUE(group.ProtectsPacketsBefore(5));
174 EXPECT_TRUE(group.ProtectsPacketsBefore(50)); 178 EXPECT_TRUE(group.ProtectsPacketsBefore(50));
175 } 179 }
176 180
177 TEST_F(QuicFecGroupTest, ProtectsPacketsBeforeWithSeveralPackets) { 181 TEST_F(QuicFecGroupTest, ProtectsPacketsBeforeWithSeveralPackets) {
178 QuicPacketHeader header; 182 QuicPacketHeader header;
179 header.packet_sequence_number = 3; 183 header.packet_sequence_number = 3;
180 184
181 QuicFecGroup group; 185 QuicFecGroup group;
182 ASSERT_TRUE(group.Update(header, kData[0])); 186 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kData[0]));
183 187
184 header.packet_sequence_number = 7; 188 header.packet_sequence_number = 7;
185 ASSERT_TRUE(group.Update(header, kData[0])); 189 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kData[0]));
186 190
187 header.packet_sequence_number = 5; 191 header.packet_sequence_number = 5;
188 ASSERT_TRUE(group.Update(header, kData[0])); 192 ASSERT_TRUE(group.Update(ENCRYPTION_FORWARD_SECURE, header, kData[0]));
189 193
190 EXPECT_FALSE(group.ProtectsPacketsBefore(1)); 194 EXPECT_FALSE(group.ProtectsPacketsBefore(1));
191 EXPECT_FALSE(group.ProtectsPacketsBefore(2)); 195 EXPECT_FALSE(group.ProtectsPacketsBefore(2));
192 EXPECT_FALSE(group.ProtectsPacketsBefore(3)); 196 EXPECT_FALSE(group.ProtectsPacketsBefore(3));
193 EXPECT_TRUE(group.ProtectsPacketsBefore(4)); 197 EXPECT_TRUE(group.ProtectsPacketsBefore(4));
194 EXPECT_TRUE(group.ProtectsPacketsBefore(5)); 198 EXPECT_TRUE(group.ProtectsPacketsBefore(5));
195 EXPECT_TRUE(group.ProtectsPacketsBefore(6)); 199 EXPECT_TRUE(group.ProtectsPacketsBefore(6));
196 EXPECT_TRUE(group.ProtectsPacketsBefore(7)); 200 EXPECT_TRUE(group.ProtectsPacketsBefore(7));
197 EXPECT_TRUE(group.ProtectsPacketsBefore(8)); 201 EXPECT_TRUE(group.ProtectsPacketsBefore(8));
198 EXPECT_TRUE(group.ProtectsPacketsBefore(9)); 202 EXPECT_TRUE(group.ProtectsPacketsBefore(9));
199 EXPECT_TRUE(group.ProtectsPacketsBefore(50)); 203 EXPECT_TRUE(group.ProtectsPacketsBefore(50));
200 } 204 }
201 205
202 TEST_F(QuicFecGroupTest, ProtectsPacketsBeforeWithFecData) { 206 TEST_F(QuicFecGroupTest, ProtectsPacketsBeforeWithFecData) {
203 QuicFecData fec; 207 QuicFecData fec;
204 fec.fec_group = 2; 208 fec.fec_group = 2;
205 fec.redundancy = kData[0]; 209 fec.redundancy = kData[0];
206 210
207 QuicFecGroup group; 211 QuicFecGroup group;
208 ASSERT_TRUE(group.UpdateFec(3, fec)); 212 ASSERT_TRUE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, 3, fec));
209 213
210 EXPECT_FALSE(group.ProtectsPacketsBefore(1)); 214 EXPECT_FALSE(group.ProtectsPacketsBefore(1));
211 EXPECT_FALSE(group.ProtectsPacketsBefore(2)); 215 EXPECT_FALSE(group.ProtectsPacketsBefore(2));
212 EXPECT_TRUE(group.ProtectsPacketsBefore(3)); 216 EXPECT_TRUE(group.ProtectsPacketsBefore(3));
213 EXPECT_TRUE(group.ProtectsPacketsBefore(4)); 217 EXPECT_TRUE(group.ProtectsPacketsBefore(4));
214 EXPECT_TRUE(group.ProtectsPacketsBefore(5)); 218 EXPECT_TRUE(group.ProtectsPacketsBefore(5));
215 EXPECT_TRUE(group.ProtectsPacketsBefore(50)); 219 EXPECT_TRUE(group.ProtectsPacketsBefore(50));
216 } 220 }
217 221
222 TEST_F(QuicFecGroupTest, EffectiveEncryptionLevel) {
223 QuicFecGroup group;
224 EXPECT_EQ(NUM_ENCRYPTION_LEVELS, group.effective_encryption_level());
225
226 QuicPacketHeader header;
227 header.packet_sequence_number = 5;
228 ASSERT_TRUE(group.Update(ENCRYPTION_INITIAL, header, kData[0]));
229 EXPECT_EQ(ENCRYPTION_INITIAL, group.effective_encryption_level());
230
231 QuicFecData fec;
232 fec.fec_group = 0;
233 fec.redundancy = kData[0];
234 ASSERT_TRUE(group.UpdateFec(ENCRYPTION_FORWARD_SECURE, 7, fec));
235 EXPECT_EQ(ENCRYPTION_INITIAL, group.effective_encryption_level());
236
237 header.packet_sequence_number = 3;
238 ASSERT_TRUE(group.Update(ENCRYPTION_NONE, header, kData[0]));
239 EXPECT_EQ(ENCRYPTION_NONE, group.effective_encryption_level());
240 }
241
218 } // namespace net 242 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_fec_group.cc ('k') | net/quic/quic_packet_creator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698