1 // Copyright (c) 2015 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 "quiche/quic/core/crypto/crypto_handshake_message.h"
6
7 #include "quiche/quic/core/crypto/crypto_handshake.h"
8 #include "quiche/quic/core/crypto/crypto_protocol.h"
9 #include "quiche/quic/platform/api/quic_test.h"
10 #include "quiche/common/quiche_endian.h"
11
12 namespace quic {
13 namespace test {
14 namespace {
15
TEST(CryptoHandshakeMessageTest,DebugString)16 TEST(CryptoHandshakeMessageTest, DebugString) {
17 const char* str = "SHLO<\n>";
18
19 CryptoHandshakeMessage message;
20 message.set_tag(kSHLO);
21 EXPECT_EQ(str, message.DebugString());
22
23 // Test copy
24 CryptoHandshakeMessage message2(message);
25 EXPECT_EQ(str, message2.DebugString());
26
27 // Test move
28 CryptoHandshakeMessage message3(std::move(message));
29 EXPECT_EQ(str, message3.DebugString());
30
31 // Test assign
32 CryptoHandshakeMessage message4 = message3;
33 EXPECT_EQ(str, message4.DebugString());
34
35 // Test move-assign
36 CryptoHandshakeMessage message5 = std::move(message3);
37 EXPECT_EQ(str, message5.DebugString());
38 }
39
TEST(CryptoHandshakeMessageTest,DebugStringWithUintVector)40 TEST(CryptoHandshakeMessageTest, DebugStringWithUintVector) {
41 const char* str =
42 "REJ <\n RREJ: "
43 "SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,"
44 "CLIENT_NONCE_NOT_UNIQUE_FAILURE\n>";
45
46 CryptoHandshakeMessage message;
47 message.set_tag(kREJ);
48 std::vector<uint32_t> reasons = {
49 SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
50 CLIENT_NONCE_NOT_UNIQUE_FAILURE};
51 message.SetVector(kRREJ, reasons);
52 EXPECT_EQ(str, message.DebugString());
53
54 // Test copy
55 CryptoHandshakeMessage message2(message);
56 EXPECT_EQ(str, message2.DebugString());
57
58 // Test move
59 CryptoHandshakeMessage message3(std::move(message));
60 EXPECT_EQ(str, message3.DebugString());
61
62 // Test assign
63 CryptoHandshakeMessage message4 = message3;
64 EXPECT_EQ(str, message4.DebugString());
65
66 // Test move-assign
67 CryptoHandshakeMessage message5 = std::move(message3);
68 EXPECT_EQ(str, message5.DebugString());
69 }
70
TEST(CryptoHandshakeMessageTest,DebugStringWithTagVector)71 TEST(CryptoHandshakeMessageTest, DebugStringWithTagVector) {
72 const char* str = "CHLO<\n COPT: 'TBBR','PAD ','BYTE'\n>";
73
74 CryptoHandshakeMessage message;
75 message.set_tag(kCHLO);
76 message.SetVector(kCOPT, QuicTagVector{kTBBR, kPAD, kBYTE});
77 EXPECT_EQ(str, message.DebugString());
78
79 // Test copy
80 CryptoHandshakeMessage message2(message);
81 EXPECT_EQ(str, message2.DebugString());
82
83 // Test move
84 CryptoHandshakeMessage message3(std::move(message));
85 EXPECT_EQ(str, message3.DebugString());
86
87 // Test assign
88 CryptoHandshakeMessage message4 = message3;
89 EXPECT_EQ(str, message4.DebugString());
90
91 // Test move-assign
92 CryptoHandshakeMessage message5 = std::move(message3);
93 EXPECT_EQ(str, message5.DebugString());
94 }
95
TEST(CryptoHandshakeMessageTest,HasStringPiece)96 TEST(CryptoHandshakeMessageTest, HasStringPiece) {
97 CryptoHandshakeMessage message;
98 EXPECT_FALSE(message.HasStringPiece(kALPN));
99 message.SetStringPiece(kALPN, "foo");
100 EXPECT_TRUE(message.HasStringPiece(kALPN));
101 }
102
103 } // namespace
104 } // namespace test
105 } // namespace quic
106