| // 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 "quic/core/crypto/crypto_handshake_message.h" |
| |
| #include "quic/core/crypto/crypto_handshake.h" |
| #include "quic/core/crypto/crypto_protocol.h" |
| #include "quic/platform/api/quic_test.h" |
| #include "common/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 |