|  | // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "net/third_party/quiche/src/quic/core/crypto/crypto_handshake_message.h" | 
|  |  | 
|  | #include "net/third_party/quiche/src/quic/core/crypto/crypto_handshake.h" | 
|  | #include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h" | 
|  | #include "net/third_party/quiche/src/quic/platform/api/quic_test.h" | 
|  | #include "net/third_party/quiche/src/common/platform/api/quiche_endian.h" | 
|  |  | 
|  | namespace quic { | 
|  | namespace test { | 
|  | namespace { | 
|  |  | 
|  | TEST(CryptoHandshakeMessageTest, DebugString) { | 
|  | const char* str = "SHLO<\n>"; | 
|  |  | 
|  | CryptoHandshakeMessage message; | 
|  | message.set_tag(kSHLO); | 
|  | EXPECT_EQ(str, message.DebugString()); | 
|  |  | 
|  | // Test copy | 
|  | CryptoHandshakeMessage message2(message); | 
|  | EXPECT_EQ(str, message2.DebugString()); | 
|  |  | 
|  | // Test move | 
|  | CryptoHandshakeMessage message3(std::move(message)); | 
|  | EXPECT_EQ(str, message3.DebugString()); | 
|  |  | 
|  | // Test assign | 
|  | CryptoHandshakeMessage message4 = message3; | 
|  | EXPECT_EQ(str, message4.DebugString()); | 
|  |  | 
|  | // Test move-assign | 
|  | CryptoHandshakeMessage message5 = std::move(message3); | 
|  | EXPECT_EQ(str, message5.DebugString()); | 
|  | } | 
|  |  | 
|  | TEST(CryptoHandshakeMessageTest, DebugStringWithUintVector) { | 
|  | const char* str = | 
|  | "REJ <\n  RREJ: " | 
|  | "SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE," | 
|  | "CLIENT_NONCE_NOT_UNIQUE_FAILURE\n>"; | 
|  |  | 
|  | CryptoHandshakeMessage message; | 
|  | message.set_tag(kREJ); | 
|  | std::vector<uint32_t> reasons = { | 
|  | SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE, | 
|  | CLIENT_NONCE_NOT_UNIQUE_FAILURE}; | 
|  | message.SetVector(kRREJ, reasons); | 
|  | EXPECT_EQ(str, message.DebugString()); | 
|  |  | 
|  | // Test copy | 
|  | CryptoHandshakeMessage message2(message); | 
|  | EXPECT_EQ(str, message2.DebugString()); | 
|  |  | 
|  | // Test move | 
|  | CryptoHandshakeMessage message3(std::move(message)); | 
|  | EXPECT_EQ(str, message3.DebugString()); | 
|  |  | 
|  | // Test assign | 
|  | CryptoHandshakeMessage message4 = message3; | 
|  | EXPECT_EQ(str, message4.DebugString()); | 
|  |  | 
|  | // Test move-assign | 
|  | CryptoHandshakeMessage message5 = std::move(message3); | 
|  | EXPECT_EQ(str, message5.DebugString()); | 
|  | } | 
|  |  | 
|  | TEST(CryptoHandshakeMessageTest, DebugStringWithTagVector) { | 
|  | const char* str = "CHLO<\n  COPT: 'TBBR','PAD ','BYTE'\n>"; | 
|  |  | 
|  | CryptoHandshakeMessage message; | 
|  | message.set_tag(kCHLO); | 
|  | message.SetVector(kCOPT, QuicTagVector{kTBBR, kPAD, kBYTE}); | 
|  | EXPECT_EQ(str, message.DebugString()); | 
|  |  | 
|  | // Test copy | 
|  | CryptoHandshakeMessage message2(message); | 
|  | EXPECT_EQ(str, message2.DebugString()); | 
|  |  | 
|  | // Test move | 
|  | CryptoHandshakeMessage message3(std::move(message)); | 
|  | EXPECT_EQ(str, message3.DebugString()); | 
|  |  | 
|  | // Test assign | 
|  | CryptoHandshakeMessage message4 = message3; | 
|  | EXPECT_EQ(str, message4.DebugString()); | 
|  |  | 
|  | // Test move-assign | 
|  | CryptoHandshakeMessage message5 = std::move(message3); | 
|  | EXPECT_EQ(str, message5.DebugString()); | 
|  | } | 
|  |  | 
|  | TEST(CryptoHandshakeMessageTest, HasStringPiece) { | 
|  | CryptoHandshakeMessage message; | 
|  | EXPECT_FALSE(message.HasStringPiece(kALPN)); | 
|  | message.SetStringPiece(kALPN, "foo"); | 
|  | EXPECT_TRUE(message.HasStringPiece(kALPN)); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  | }  // namespace test | 
|  | }  // namespace quic |