1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/third_party/quiche/src/quic/core/quic_tag.h"
6
7 #include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h"
8 #include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
9 #include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
10
11 namespace quic {
12 namespace test {
13 namespace {
14
15 class QuicTagTest : public QuicTest {};
16
TEST_F(QuicTagTest,TagToString)17 TEST_F(QuicTagTest, TagToString) {
18 EXPECT_EQ("SCFG", QuicTagToString(kSCFG));
19 EXPECT_EQ("SNO ", QuicTagToString(kServerNonceTag));
20 EXPECT_EQ("CRT ", QuicTagToString(kCertificateTag));
21 EXPECT_EQ("CHLO", QuicTagToString(MakeQuicTag('C', 'H', 'L', 'O')));
22 // A tag that contains a non-printing character will be printed as hex.
23 EXPECT_EQ("43484c1f", QuicTagToString(MakeQuicTag('C', 'H', 'L', '\x1f')));
24 }
25
TEST_F(QuicTagTest,MakeQuicTag)26 TEST_F(QuicTagTest, MakeQuicTag) {
27 QuicTag tag = MakeQuicTag('A', 'B', 'C', 'D');
28 char bytes[4];
29 memcpy(bytes, &tag, 4);
30 EXPECT_EQ('A', bytes[0]);
31 EXPECT_EQ('B', bytes[1]);
32 EXPECT_EQ('C', bytes[2]);
33 EXPECT_EQ('D', bytes[3]);
34 }
35
TEST_F(QuicTagTest,ParseQuicTag)36 TEST_F(QuicTagTest, ParseQuicTag) {
37 QuicTag tag_abcd = MakeQuicTag('A', 'B', 'C', 'D');
38 EXPECT_EQ(ParseQuicTag("ABCD"), tag_abcd);
39 EXPECT_EQ(ParseQuicTag("ABCDE"), tag_abcd);
40 QuicTag tag_efgh = MakeQuicTag('E', 'F', 'G', 'H');
41 EXPECT_EQ(ParseQuicTag("EFGH"), tag_efgh);
42 QuicTag tag_ijk = MakeQuicTag('I', 'J', 'K', 0);
43 EXPECT_EQ(ParseQuicTag("IJK"), tag_ijk);
44 QuicTag tag_l = MakeQuicTag('L', 0, 0, 0);
45 EXPECT_EQ(ParseQuicTag("L"), tag_l);
46 QuicTag tag_hex = MakeQuicTag('M', 'N', 'O', static_cast<char>(255));
47 EXPECT_EQ(ParseQuicTag("4d4e4fff"), tag_hex);
48 EXPECT_EQ(ParseQuicTag("4D4E4FFF"), tag_hex);
49 QuicTag tag_with_numbers = MakeQuicTag('P', 'Q', '1', '2');
50 EXPECT_EQ(ParseQuicTag("PQ12"), tag_with_numbers);
51 QuicTag tag_with_custom_chars = MakeQuicTag('r', '$', '_', '7');
52 EXPECT_EQ(ParseQuicTag("r$_7"), tag_with_custom_chars);
53 QuicTag tag_zero = 0;
54 EXPECT_EQ(ParseQuicTag(""), tag_zero);
55 QuicTagVector tag_vector;
56 EXPECT_EQ(ParseQuicTagVector(""), tag_vector);
57 EXPECT_EQ(ParseQuicTagVector(" "), tag_vector);
58 tag_vector.push_back(tag_abcd);
59 EXPECT_EQ(ParseQuicTagVector("ABCD"), tag_vector);
60 tag_vector.push_back(tag_efgh);
61 EXPECT_EQ(ParseQuicTagVector("ABCD,EFGH"), tag_vector);
62 tag_vector.push_back(tag_ijk);
63 EXPECT_EQ(ParseQuicTagVector("ABCD,EFGH,IJK"), tag_vector);
64 tag_vector.push_back(tag_l);
65 EXPECT_EQ(ParseQuicTagVector("ABCD,EFGH,IJK,L"), tag_vector);
66 tag_vector.push_back(tag_hex);
67 EXPECT_EQ(ParseQuicTagVector("ABCD,EFGH,IJK,L,4d4e4fff"), tag_vector);
68 tag_vector.push_back(tag_with_numbers);
69 EXPECT_EQ(ParseQuicTagVector("ABCD,EFGH,IJK,L,4d4e4fff,PQ12"), tag_vector);
70 tag_vector.push_back(tag_with_custom_chars);
71 EXPECT_EQ(ParseQuicTagVector("ABCD,EFGH,IJK,L,4d4e4fff,PQ12,r$_7"),
72 tag_vector);
73 tag_vector.push_back(tag_zero);
74 EXPECT_EQ(ParseQuicTagVector("ABCD,EFGH,IJK,L,4d4e4fff,PQ12,r$_7,"),
75 tag_vector);
76 }
77
78 } // namespace
79 } // namespace test
80 } // namespace quic
81