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

Side by Side Diff: net/quic/crypto/crypto_framer_test.cc

Issue 266243004: Clang format slam. 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
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 <map> 5 #include <map>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "net/quic/crypto/crypto_framer.h" 10 #include "net/quic/crypto/crypto_framer.h"
11 #include "net/quic/crypto/crypto_handshake.h" 11 #include "net/quic/crypto/crypto_handshake.h"
12 #include "net/quic/crypto/crypto_protocol.h" 12 #include "net/quic/crypto/crypto_protocol.h"
13 #include "net/quic/quic_protocol.h" 13 #include "net/quic/quic_protocol.h"
14 #include "net/quic/test_tools/crypto_test_utils.h" 14 #include "net/quic/test_tools/crypto_test_utils.h"
15 #include "net/quic/test_tools/quic_test_utils.h" 15 #include "net/quic/test_tools/quic_test_utils.h"
16 16
17 using base::StringPiece; 17 using base::StringPiece;
18 using std::map; 18 using std::map;
19 using std::string; 19 using std::string;
20 using std::vector; 20 using std::vector;
21 21
22 namespace net { 22 namespace net {
23 23
24 namespace { 24 namespace {
25 25
26 char* AsChars(unsigned char* data) { return reinterpret_cast<char*>(data); } 26 char* AsChars(unsigned char* data) {
27 return reinterpret_cast<char*>(data);
28 }
27 29
28 } // namespace 30 } // namespace
29 31
30 namespace test { 32 namespace test {
31 33
32 class TestCryptoVisitor : public ::net::CryptoFramerVisitorInterface { 34 class TestCryptoVisitor : public ::net::CryptoFramerVisitorInterface {
33 public: 35 public:
34 TestCryptoVisitor() : error_count_(0) {} 36 TestCryptoVisitor() : error_count_(0) {}
35 37
36 virtual void OnError(CryptoFramer* framer) OVERRIDE { 38 virtual void OnError(CryptoFramer* framer) OVERRIDE {
(...skipping 12 matching lines...) Expand all
49 vector<CryptoHandshakeMessage> messages_; 51 vector<CryptoHandshakeMessage> messages_;
50 }; 52 };
51 53
52 TEST(CryptoFramerTest, ConstructHandshakeMessage) { 54 TEST(CryptoFramerTest, ConstructHandshakeMessage) {
53 CryptoHandshakeMessage message; 55 CryptoHandshakeMessage message;
54 message.set_tag(0xFFAA7733); 56 message.set_tag(0xFFAA7733);
55 message.SetStringPiece(0x12345678, "abcdef"); 57 message.SetStringPiece(0x12345678, "abcdef");
56 message.SetStringPiece(0x12345679, "ghijk"); 58 message.SetStringPiece(0x12345679, "ghijk");
57 message.SetStringPiece(0x1234567A, "lmnopqr"); 59 message.SetStringPiece(0x1234567A, "lmnopqr");
58 60
59 unsigned char packet[] = { 61 unsigned char packet[] = {// tag
60 // tag 62 0x33, 0x77, 0xAA, 0xFF,
61 0x33, 0x77, 0xAA, 0xFF, 63 // num entries
62 // num entries 64 0x03, 0x00,
63 0x03, 0x00, 65 // padding
64 // padding 66 0x00, 0x00,
65 0x00, 0x00, 67 // tag 1
66 // tag 1 68 0x78, 0x56, 0x34, 0x12,
67 0x78, 0x56, 0x34, 0x12, 69 // end offset 1
68 // end offset 1 70 0x06, 0x00, 0x00, 0x00,
69 0x06, 0x00, 0x00, 0x00, 71 // tag 2
70 // tag 2 72 0x79, 0x56, 0x34, 0x12,
71 0x79, 0x56, 0x34, 0x12, 73 // end offset 2
72 // end offset 2 74 0x0b, 0x00, 0x00, 0x00,
73 0x0b, 0x00, 0x00, 0x00, 75 // tag 3
74 // tag 3 76 0x7A, 0x56, 0x34, 0x12,
75 0x7A, 0x56, 0x34, 0x12, 77 // end offset 3
76 // end offset 3 78 0x12, 0x00, 0x00, 0x00,
77 0x12, 0x00, 0x00, 0x00, 79 // value 1
78 // value 1 80 'a', 'b', 'c', 'd', 'e', 'f',
79 'a', 'b', 'c', 'd', 81 // value 2
80 'e', 'f', 82 'g', 'h', 'i', 'j', 'k',
81 // value 2 83 // value 3
82 'g', 'h', 'i', 'j', 84 'l', 'm', 'n', 'o', 'p', 'q', 'r',
83 'k',
84 // value 3
85 'l', 'm', 'n', 'o',
86 'p', 'q', 'r',
87 }; 85 };
88 86
89 CryptoFramer framer; 87 CryptoFramer framer;
90 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message)); 88 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
91 ASSERT_TRUE(data.get() != NULL); 89 ASSERT_TRUE(data.get() != NULL);
92 test::CompareCharArraysWithHexError("constructed packet", data->data(), 90 test::CompareCharArraysWithHexError("constructed packet",
93 data->length(), AsChars(packet), 91 data->data(),
92 data->length(),
93 AsChars(packet),
94 arraysize(packet)); 94 arraysize(packet));
95 } 95 }
96 96
97 TEST(CryptoFramerTest, ConstructHandshakeMessageWithTwoKeys) { 97 TEST(CryptoFramerTest, ConstructHandshakeMessageWithTwoKeys) {
98 CryptoHandshakeMessage message; 98 CryptoHandshakeMessage message;
99 message.set_tag(0xFFAA7733); 99 message.set_tag(0xFFAA7733);
100 message.SetStringPiece(0x12345678, "abcdef"); 100 message.SetStringPiece(0x12345678, "abcdef");
101 message.SetStringPiece(0x12345679, "ghijk"); 101 message.SetStringPiece(0x12345679, "ghijk");
102 102
103 unsigned char packet[] = { 103 unsigned char packet[] = {// tag
104 // tag 104 0x33, 0x77, 0xAA, 0xFF,
105 0x33, 0x77, 0xAA, 0xFF, 105 // num entries
106 // num entries 106 0x02, 0x00,
107 0x02, 0x00, 107 // padding
108 // padding 108 0x00, 0x00,
109 0x00, 0x00, 109 // tag 1
110 // tag 1 110 0x78, 0x56, 0x34, 0x12,
111 0x78, 0x56, 0x34, 0x12, 111 // end offset 1
112 // end offset 1 112 0x06, 0x00, 0x00, 0x00,
113 0x06, 0x00, 0x00, 0x00, 113 // tag 2
114 // tag 2 114 0x79, 0x56, 0x34, 0x12,
115 0x79, 0x56, 0x34, 0x12, 115 // end offset 2
116 // end offset 2 116 0x0b, 0x00, 0x00, 0x00,
117 0x0b, 0x00, 0x00, 0x00, 117 // value 1
118 // value 1 118 'a', 'b', 'c', 'd', 'e', 'f',
119 'a', 'b', 'c', 'd', 119 // value 2
120 'e', 'f', 120 'g', 'h', 'i', 'j', 'k',
121 // value 2
122 'g', 'h', 'i', 'j',
123 'k',
124 }; 121 };
125 122
126 CryptoFramer framer; 123 CryptoFramer framer;
127 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message)); 124 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
128 ASSERT_TRUE(data.get() != NULL); 125 ASSERT_TRUE(data.get() != NULL);
129 126
130 test::CompareCharArraysWithHexError("constructed packet", data->data(), 127 test::CompareCharArraysWithHexError("constructed packet",
131 data->length(), AsChars(packet), 128 data->data(),
129 data->length(),
130 AsChars(packet),
132 arraysize(packet)); 131 arraysize(packet));
133 } 132 }
134 133
135 TEST(CryptoFramerTest, ConstructHandshakeMessageZeroLength) { 134 TEST(CryptoFramerTest, ConstructHandshakeMessageZeroLength) {
136 CryptoHandshakeMessage message; 135 CryptoHandshakeMessage message;
137 message.set_tag(0xFFAA7733); 136 message.set_tag(0xFFAA7733);
138 message.SetStringPiece(0x12345678, ""); 137 message.SetStringPiece(0x12345678, "");
139 138
140 unsigned char packet[] = { 139 unsigned char packet[] = {// tag
141 // tag 140 0x33, 0x77, 0xAA, 0xFF,
142 0x33, 0x77, 0xAA, 0xFF, 141 // num entries
143 // num entries 142 0x01, 0x00,
144 0x01, 0x00, 143 // padding
145 // padding 144 0x00, 0x00,
146 0x00, 0x00, 145 // tag 1
147 // tag 1 146 0x78, 0x56, 0x34, 0x12,
148 0x78, 0x56, 0x34, 0x12, 147 // end offset 1
149 // end offset 1 148 0x00, 0x00, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00,
151 }; 149 };
152 150
153 CryptoFramer framer; 151 CryptoFramer framer;
154 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message)); 152 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
155 ASSERT_TRUE(data.get() != NULL); 153 ASSERT_TRUE(data.get() != NULL);
156 154
157 test::CompareCharArraysWithHexError("constructed packet", data->data(), 155 test::CompareCharArraysWithHexError("constructed packet",
158 data->length(), AsChars(packet), 156 data->data(),
157 data->length(),
158 AsChars(packet),
159 arraysize(packet)); 159 arraysize(packet));
160 } 160 }
161 161
162 TEST(CryptoFramerTest, ConstructHandshakeMessageTooManyEntries) { 162 TEST(CryptoFramerTest, ConstructHandshakeMessageTooManyEntries) {
163 CryptoHandshakeMessage message; 163 CryptoHandshakeMessage message;
164 message.set_tag(0xFFAA7733); 164 message.set_tag(0xFFAA7733);
165 for (uint32 key = 1; key <= kMaxEntries + 1; ++key) { 165 for (uint32 key = 1; key <= kMaxEntries + 1; ++key) {
166 message.SetStringPiece(key, "abcdef"); 166 message.SetStringPiece(key, "abcdef");
167 } 167 }
168 168
169 CryptoFramer framer; 169 CryptoFramer framer;
170 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message)); 170 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
171 EXPECT_TRUE(data.get() == NULL); 171 EXPECT_TRUE(data.get() == NULL);
172 } 172 }
173 173
174 TEST(CryptoFramerTest, ConstructHandshakeMessageMinimumSize) { 174 TEST(CryptoFramerTest, ConstructHandshakeMessageMinimumSize) {
175 CryptoHandshakeMessage message; 175 CryptoHandshakeMessage message;
176 message.set_tag(0xFFAA7733); 176 message.set_tag(0xFFAA7733);
177 message.SetStringPiece(0x01020304, "test"); 177 message.SetStringPiece(0x01020304, "test");
178 message.set_minimum_size(64); 178 message.set_minimum_size(64);
179 179
180 unsigned char packet[] = { 180 unsigned char packet[] = {// tag
181 // tag 181 0x33, 0x77, 0xAA, 0xFF,
182 0x33, 0x77, 0xAA, 0xFF, 182 // num entries
183 // num entries 183 0x02, 0x00,
184 0x02, 0x00, 184 // padding
185 // padding 185 0x00, 0x00,
186 0x00, 0x00, 186 // tag 1
187 // tag 1 187 'P', 'A', 'D', 0,
188 'P', 'A', 'D', 0, 188 // end offset 1
189 // end offset 1 189 0x24, 0x00, 0x00, 0x00,
190 0x24, 0x00, 0x00, 0x00, 190 // tag 2
191 // tag 2 191 0x04, 0x03, 0x02, 0x01,
192 0x04, 0x03, 0x02, 0x01, 192 // end offset 2
193 // end offset 2 193 0x28, 0x00, 0x00, 0x00,
194 0x28, 0x00, 0x00, 0x00, 194 // 36 bytes of padding.
195 // 36 bytes of padding. 195 '-', '-', '-', '-', '-', '-', '-', '-', '-',
196 '-', '-', '-', '-', '-', '-', '-', '-', 196 '-', '-', '-', '-', '-', '-', '-', '-', '-',
197 '-', '-', '-', '-', '-', '-', '-', '-', 197 '-', '-', '-', '-', '-', '-', '-', '-', '-',
198 '-', '-', '-', '-', '-', '-', '-', '-', 198 '-', '-', '-', '-', '-', '-', '-', '-', '-',
199 '-', '-', '-', '-', '-', '-', '-', '-', 199 // value 2
200 '-', '-', '-', '-', 200 't', 'e', 's', 't',
201 // value 2
202 't', 'e', 's', 't',
203 }; 201 };
204 202
205 CryptoFramer framer; 203 CryptoFramer framer;
206 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message)); 204 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
207 ASSERT_TRUE(data.get() != NULL); 205 ASSERT_TRUE(data.get() != NULL);
208 206
209 test::CompareCharArraysWithHexError("constructed packet", data->data(), 207 test::CompareCharArraysWithHexError("constructed packet",
210 data->length(), AsChars(packet), 208 data->data(),
209 data->length(),
210 AsChars(packet),
211 arraysize(packet)); 211 arraysize(packet));
212 } 212 }
213 213
214 TEST(CryptoFramerTest, ConstructHandshakeMessageMinimumSizePadLast) { 214 TEST(CryptoFramerTest, ConstructHandshakeMessageMinimumSizePadLast) {
215 CryptoHandshakeMessage message; 215 CryptoHandshakeMessage message;
216 message.set_tag(0xFFAA7733); 216 message.set_tag(0xFFAA7733);
217 message.SetStringPiece(1, ""); 217 message.SetStringPiece(1, "");
218 message.set_minimum_size(64); 218 message.set_minimum_size(64);
219 219
220 unsigned char packet[] = { 220 unsigned char packet[] = {
221 // tag 221 // tag
222 0x33, 0x77, 0xAA, 0xFF, 222 0x33, 0x77, 0xAA, 0xFF,
223 // num entries 223 // num entries
224 0x02, 0x00, 224 0x02, 0x00,
225 // padding 225 // padding
226 0x00, 0x00, 226 0x00, 0x00,
227 // tag 1 227 // tag 1
228 0x01, 0x00, 0x00, 0x00, 228 0x01, 0x00, 0x00, 0x00,
229 // end offset 1 229 // end offset 1
230 0x00, 0x00, 0x00, 0x00, 230 0x00, 0x00, 0x00, 0x00,
231 // tag 2 231 // tag 2
232 'P', 'A', 'D', 0, 232 'P', 'A', 'D', 0,
233 // end offset 2 233 // end offset 2
234 0x28, 0x00, 0x00, 0x00, 234 0x28, 0x00, 0x00, 0x00,
235 // 40 bytes of padding. 235 // 40 bytes of padding.
236 '-', '-', '-', '-', '-', '-', '-', '-', 236 '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-',
237 '-', '-', '-', '-', '-', '-', '-', '-', 237 '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-',
238 '-', '-', '-', '-', '-', '-', '-', '-', 238 '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-',
239 '-', '-', '-', '-', '-', '-', '-', '-',
240 '-', '-', '-', '-', '-', '-', '-', '-',
241 }; 239 };
242 240
243 CryptoFramer framer; 241 CryptoFramer framer;
244 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message)); 242 scoped_ptr<QuicData> data(framer.ConstructHandshakeMessage(message));
245 ASSERT_TRUE(data.get() != NULL); 243 ASSERT_TRUE(data.get() != NULL);
246 244
247 test::CompareCharArraysWithHexError("constructed packet", data->data(), 245 test::CompareCharArraysWithHexError("constructed packet",
248 data->length(), AsChars(packet), 246 data->data(),
247 data->length(),
248 AsChars(packet),
249 arraysize(packet)); 249 arraysize(packet));
250 } 250 }
251 251
252 TEST(CryptoFramerTest, ProcessInput) { 252 TEST(CryptoFramerTest, ProcessInput) {
253 test::TestCryptoVisitor visitor; 253 test::TestCryptoVisitor visitor;
254 CryptoFramer framer; 254 CryptoFramer framer;
255 framer.set_visitor(&visitor); 255 framer.set_visitor(&visitor);
256 256
257 unsigned char input[] = { 257 unsigned char input[] = {// tag
258 // tag 258 0x33, 0x77, 0xAA, 0xFF,
259 0x33, 0x77, 0xAA, 0xFF, 259 // num entries
260 // num entries 260 0x02, 0x00,
261 0x02, 0x00, 261 // padding
262 // padding 262 0x00, 0x00,
263 0x00, 0x00, 263 // tag 1
264 // tag 1 264 0x78, 0x56, 0x34, 0x12,
265 0x78, 0x56, 0x34, 0x12, 265 // end offset 1
266 // end offset 1 266 0x06, 0x00, 0x00, 0x00,
267 0x06, 0x00, 0x00, 0x00, 267 // tag 2
268 // tag 2 268 0x79, 0x56, 0x34, 0x12,
269 0x79, 0x56, 0x34, 0x12, 269 // end offset 2
270 // end offset 2 270 0x0b, 0x00, 0x00, 0x00,
271 0x0b, 0x00, 0x00, 0x00, 271 // value 1
272 // value 1 272 'a', 'b', 'c', 'd', 'e', 'f',
273 'a', 'b', 'c', 'd', 273 // value 2
274 'e', 'f', 274 'g', 'h', 'i', 'j', 'k',
275 // value 2
276 'g', 'h', 'i', 'j',
277 'k',
278 }; 275 };
279 276
280 EXPECT_TRUE( 277 EXPECT_TRUE(
281 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input)))); 278 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input))));
282 EXPECT_EQ(0u, framer.InputBytesRemaining()); 279 EXPECT_EQ(0u, framer.InputBytesRemaining());
283 EXPECT_EQ(0, visitor.error_count_); 280 EXPECT_EQ(0, visitor.error_count_);
284 ASSERT_EQ(1u, visitor.messages_.size()); 281 ASSERT_EQ(1u, visitor.messages_.size());
285 const CryptoHandshakeMessage& message = visitor.messages_[0]; 282 const CryptoHandshakeMessage& message = visitor.messages_[0];
286 EXPECT_EQ(0xFFAA7733, message.tag()); 283 EXPECT_EQ(0xFFAA7733, message.tag());
287 EXPECT_EQ(2u, message.tag_value_map().size()); 284 EXPECT_EQ(2u, message.tag_value_map().size());
288 EXPECT_EQ("abcdef", CryptoTestUtils::GetValueForTag(message, 0x12345678)); 285 EXPECT_EQ("abcdef", CryptoTestUtils::GetValueForTag(message, 0x12345678));
289 EXPECT_EQ("ghijk", CryptoTestUtils::GetValueForTag(message, 0x12345679)); 286 EXPECT_EQ("ghijk", CryptoTestUtils::GetValueForTag(message, 0x12345679));
290 } 287 }
291 288
292 TEST(CryptoFramerTest, ProcessInputWithThreeKeys) { 289 TEST(CryptoFramerTest, ProcessInputWithThreeKeys) {
293 test::TestCryptoVisitor visitor; 290 test::TestCryptoVisitor visitor;
294 CryptoFramer framer; 291 CryptoFramer framer;
295 framer.set_visitor(&visitor); 292 framer.set_visitor(&visitor);
296 293
297 unsigned char input[] = { 294 unsigned char input[] = {// tag
298 // tag 295 0x33, 0x77, 0xAA, 0xFF,
299 0x33, 0x77, 0xAA, 0xFF, 296 // num entries
300 // num entries 297 0x03, 0x00,
301 0x03, 0x00, 298 // padding
302 // padding 299 0x00, 0x00,
303 0x00, 0x00, 300 // tag 1
304 // tag 1 301 0x78, 0x56, 0x34, 0x12,
305 0x78, 0x56, 0x34, 0x12, 302 // end offset 1
306 // end offset 1 303 0x06, 0x00, 0x00, 0x00,
307 0x06, 0x00, 0x00, 0x00, 304 // tag 2
308 // tag 2 305 0x79, 0x56, 0x34, 0x12,
309 0x79, 0x56, 0x34, 0x12, 306 // end offset 2
310 // end offset 2 307 0x0b, 0x00, 0x00, 0x00,
311 0x0b, 0x00, 0x00, 0x00, 308 // tag 3
312 // tag 3 309 0x7A, 0x56, 0x34, 0x12,
313 0x7A, 0x56, 0x34, 0x12, 310 // end offset 3
314 // end offset 3 311 0x12, 0x00, 0x00, 0x00,
315 0x12, 0x00, 0x00, 0x00, 312 // value 1
316 // value 1 313 'a', 'b', 'c', 'd', 'e', 'f',
317 'a', 'b', 'c', 'd', 314 // value 2
318 'e', 'f', 315 'g', 'h', 'i', 'j', 'k',
319 // value 2 316 // value 3
320 'g', 'h', 'i', 'j', 317 'l', 'm', 'n', 'o', 'p', 'q', 'r',
321 'k',
322 // value 3
323 'l', 'm', 'n', 'o',
324 'p', 'q', 'r',
325 }; 318 };
326 319
327 EXPECT_TRUE( 320 EXPECT_TRUE(
328 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input)))); 321 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input))));
329 EXPECT_EQ(0u, framer.InputBytesRemaining()); 322 EXPECT_EQ(0u, framer.InputBytesRemaining());
330 EXPECT_EQ(0, visitor.error_count_); 323 EXPECT_EQ(0, visitor.error_count_);
331 ASSERT_EQ(1u, visitor.messages_.size()); 324 ASSERT_EQ(1u, visitor.messages_.size());
332 const CryptoHandshakeMessage& message = visitor.messages_[0]; 325 const CryptoHandshakeMessage& message = visitor.messages_[0];
333 EXPECT_EQ(0xFFAA7733, message.tag()); 326 EXPECT_EQ(0xFFAA7733, message.tag());
334 EXPECT_EQ(3u, message.tag_value_map().size()); 327 EXPECT_EQ(3u, message.tag_value_map().size());
335 EXPECT_EQ("abcdef", CryptoTestUtils::GetValueForTag(message, 0x12345678)); 328 EXPECT_EQ("abcdef", CryptoTestUtils::GetValueForTag(message, 0x12345678));
336 EXPECT_EQ("ghijk", CryptoTestUtils::GetValueForTag(message, 0x12345679)); 329 EXPECT_EQ("ghijk", CryptoTestUtils::GetValueForTag(message, 0x12345679));
337 EXPECT_EQ("lmnopqr", CryptoTestUtils::GetValueForTag(message, 0x1234567A)); 330 EXPECT_EQ("lmnopqr", CryptoTestUtils::GetValueForTag(message, 0x1234567A));
338 } 331 }
339 332
340 TEST(CryptoFramerTest, ProcessInputIncrementally) { 333 TEST(CryptoFramerTest, ProcessInputIncrementally) {
341 test::TestCryptoVisitor visitor; 334 test::TestCryptoVisitor visitor;
342 CryptoFramer framer; 335 CryptoFramer framer;
343 framer.set_visitor(&visitor); 336 framer.set_visitor(&visitor);
344 337
345 unsigned char input[] = { 338 unsigned char input[] = {// tag
346 // tag 339 0x33, 0x77, 0xAA, 0xFF,
347 0x33, 0x77, 0xAA, 0xFF, 340 // num entries
348 // num entries 341 0x02, 0x00,
349 0x02, 0x00, 342 // padding
350 // padding 343 0x00, 0x00,
351 0x00, 0x00, 344 // tag 1
352 // tag 1 345 0x78, 0x56, 0x34, 0x12,
353 0x78, 0x56, 0x34, 0x12, 346 // end offset 1
354 // end offset 1 347 0x06, 0x00, 0x00, 0x00,
355 0x06, 0x00, 0x00, 0x00, 348 // tag 2
356 // tag 2 349 0x79, 0x56, 0x34, 0x12,
357 0x79, 0x56, 0x34, 0x12, 350 // end offset 2
358 // end offset 2 351 0x0b, 0x00, 0x00, 0x00,
359 0x0b, 0x00, 0x00, 0x00, 352 // value 1
360 // value 1 353 'a', 'b', 'c', 'd', 'e', 'f',
361 'a', 'b', 'c', 'd', 354 // value 2
362 'e', 'f', 355 'g', 'h', 'i', 'j', 'k',
363 // value 2
364 'g', 'h', 'i', 'j',
365 'k',
366 }; 356 };
367 357
368 for (size_t i = 0; i < arraysize(input); i++) { 358 for (size_t i = 0; i < arraysize(input); i++) {
369 EXPECT_TRUE(framer.ProcessInput(StringPiece(AsChars(input) + i, 1))); 359 EXPECT_TRUE(framer.ProcessInput(StringPiece(AsChars(input) + i, 1)));
370 } 360 }
371 EXPECT_EQ(0u, framer.InputBytesRemaining()); 361 EXPECT_EQ(0u, framer.InputBytesRemaining());
372 ASSERT_EQ(1u, visitor.messages_.size()); 362 ASSERT_EQ(1u, visitor.messages_.size());
373 const CryptoHandshakeMessage& message = visitor.messages_[0]; 363 const CryptoHandshakeMessage& message = visitor.messages_[0];
374 EXPECT_EQ(0xFFAA7733, message.tag()); 364 EXPECT_EQ(0xFFAA7733, message.tag());
375 EXPECT_EQ(2u, message.tag_value_map().size()); 365 EXPECT_EQ(2u, message.tag_value_map().size());
376 EXPECT_EQ("abcdef", CryptoTestUtils::GetValueForTag(message, 0x12345678)); 366 EXPECT_EQ("abcdef", CryptoTestUtils::GetValueForTag(message, 0x12345678));
377 EXPECT_EQ("ghijk", CryptoTestUtils::GetValueForTag(message, 0x12345679)); 367 EXPECT_EQ("ghijk", CryptoTestUtils::GetValueForTag(message, 0x12345679));
378 } 368 }
379 369
380 TEST(CryptoFramerTest, ProcessInputTagsOutOfOrder) { 370 TEST(CryptoFramerTest, ProcessInputTagsOutOfOrder) {
381 test::TestCryptoVisitor visitor; 371 test::TestCryptoVisitor visitor;
382 CryptoFramer framer; 372 CryptoFramer framer;
383 framer.set_visitor(&visitor); 373 framer.set_visitor(&visitor);
384 374
385 unsigned char input[] = { 375 unsigned char input[] = {// tag
386 // tag 376 0x33, 0x77, 0xAA, 0xFF,
387 0x33, 0x77, 0xAA, 0xFF, 377 // num entries
388 // num entries 378 0x02, 0x00,
389 0x02, 0x00, 379 // padding
390 // padding 380 0x00, 0x00,
391 0x00, 0x00, 381 // tag 1
392 // tag 1 382 0x78, 0x56, 0x34, 0x13,
393 0x78, 0x56, 0x34, 0x13, 383 // end offset 1
394 // end offset 1 384 0x01, 0x00, 0x00, 0x00,
395 0x01, 0x00, 0x00, 0x00, 385 // tag 2
396 // tag 2 386 0x79, 0x56, 0x34, 0x12,
397 0x79, 0x56, 0x34, 0x12, 387 // end offset 2
398 // end offset 2 388 0x02, 0x00, 0x00, 0x00,
399 0x02, 0x00, 0x00, 0x00,
400 }; 389 };
401 390
402 EXPECT_FALSE( 391 EXPECT_FALSE(
403 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input)))); 392 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input))));
404 EXPECT_EQ(QUIC_CRYPTO_TAGS_OUT_OF_ORDER, framer.error()); 393 EXPECT_EQ(QUIC_CRYPTO_TAGS_OUT_OF_ORDER, framer.error());
405 EXPECT_EQ(1, visitor.error_count_); 394 EXPECT_EQ(1, visitor.error_count_);
406 } 395 }
407 396
408 TEST(CryptoFramerTest, ProcessEndOffsetsOutOfOrder) { 397 TEST(CryptoFramerTest, ProcessEndOffsetsOutOfOrder) {
409 test::TestCryptoVisitor visitor; 398 test::TestCryptoVisitor visitor;
410 CryptoFramer framer; 399 CryptoFramer framer;
411 framer.set_visitor(&visitor); 400 framer.set_visitor(&visitor);
412 401
413 unsigned char input[] = { 402 unsigned char input[] = {// tag
414 // tag 403 0x33, 0x77, 0xAA, 0xFF,
415 0x33, 0x77, 0xAA, 0xFF, 404 // num entries
416 // num entries 405 0x02, 0x00,
417 0x02, 0x00, 406 // padding
418 // padding 407 0x00, 0x00,
419 0x00, 0x00, 408 // tag 1
420 // tag 1 409 0x79, 0x56, 0x34, 0x12,
421 0x79, 0x56, 0x34, 0x12, 410 // end offset 1
422 // end offset 1 411 0x01, 0x00, 0x00, 0x00,
423 0x01, 0x00, 0x00, 0x00, 412 // tag 2
424 // tag 2 413 0x78, 0x56, 0x34, 0x13,
425 0x78, 0x56, 0x34, 0x13, 414 // end offset 2
426 // end offset 2 415 0x00, 0x00, 0x00, 0x00,
427 0x00, 0x00, 0x00, 0x00,
428 }; 416 };
429 417
430 EXPECT_FALSE( 418 EXPECT_FALSE(
431 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input)))); 419 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input))));
432 EXPECT_EQ(QUIC_CRYPTO_TAGS_OUT_OF_ORDER, framer.error()); 420 EXPECT_EQ(QUIC_CRYPTO_TAGS_OUT_OF_ORDER, framer.error());
433 EXPECT_EQ(1, visitor.error_count_); 421 EXPECT_EQ(1, visitor.error_count_);
434 } 422 }
435 423
436 TEST(CryptoFramerTest, ProcessInputTooManyEntries) { 424 TEST(CryptoFramerTest, ProcessInputTooManyEntries) {
437 test::TestCryptoVisitor visitor; 425 test::TestCryptoVisitor visitor;
438 CryptoFramer framer; 426 CryptoFramer framer;
439 framer.set_visitor(&visitor); 427 framer.set_visitor(&visitor);
440 428
441 unsigned char input[] = { 429 unsigned char input[] = {// tag
442 // tag 430 0x33, 0x77, 0xAA, 0xFF,
443 0x33, 0x77, 0xAA, 0xFF, 431 // num entries
444 // num entries 432 0xA0, 0x00,
445 0xA0, 0x00, 433 // padding
446 // padding 434 0x00, 0x00,
447 0x00, 0x00,
448 }; 435 };
449 436
450 EXPECT_FALSE( 437 EXPECT_FALSE(
451 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input)))); 438 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input))));
452 EXPECT_EQ(QUIC_CRYPTO_TOO_MANY_ENTRIES, framer.error()); 439 EXPECT_EQ(QUIC_CRYPTO_TOO_MANY_ENTRIES, framer.error());
453 EXPECT_EQ(1, visitor.error_count_); 440 EXPECT_EQ(1, visitor.error_count_);
454 } 441 }
455 442
456 TEST(CryptoFramerTest, ProcessInputZeroLength) { 443 TEST(CryptoFramerTest, ProcessInputZeroLength) {
457 test::TestCryptoVisitor visitor; 444 test::TestCryptoVisitor visitor;
458 CryptoFramer framer; 445 CryptoFramer framer;
459 framer.set_visitor(&visitor); 446 framer.set_visitor(&visitor);
460 447
461 unsigned char input[] = { 448 unsigned char input[] = {// tag
462 // tag 449 0x33, 0x77, 0xAA, 0xFF,
463 0x33, 0x77, 0xAA, 0xFF, 450 // num entries
464 // num entries 451 0x02, 0x00,
465 0x02, 0x00, 452 // padding
466 // padding 453 0x00, 0x00,
467 0x00, 0x00, 454 // tag 1
468 // tag 1 455 0x78, 0x56, 0x34, 0x12,
469 0x78, 0x56, 0x34, 0x12, 456 // end offset 1
470 // end offset 1 457 0x00, 0x00, 0x00, 0x00,
471 0x00, 0x00, 0x00, 0x00, 458 // tag 2
472 // tag 2 459 0x79, 0x56, 0x34, 0x12,
473 0x79, 0x56, 0x34, 0x12, 460 // end offset 2
474 // end offset 2 461 0x05, 0x00, 0x00, 0x00,
475 0x05, 0x00, 0x00, 0x00,
476 }; 462 };
477 463
478 EXPECT_TRUE( 464 EXPECT_TRUE(
479 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input)))); 465 framer.ProcessInput(StringPiece(AsChars(input), arraysize(input))));
480 EXPECT_EQ(0, visitor.error_count_); 466 EXPECT_EQ(0, visitor.error_count_);
481 } 467 }
482 468
483 } // namespace test 469 } // namespace test
484 470
485 } // namespace net 471 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698