/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ // Copyright 2004-present Facebook. All rights reserved. #include #include #include #include #include #include using namespace quic; using namespace quic::test; using namespace testing; using namespace folly; namespace quic { namespace test { class QuicHeaderCodecTest : public Test {}; TEST_F(QuicHeaderCodecTest, EmptyBuffer) { auto emptyBuffer = folly::IOBuf::create(0); EXPECT_FALSE(parseHeader(*emptyBuffer).hasValue()); } TEST_F(QuicHeaderCodecTest, TooSmallBuffer) { auto smallBuffer = folly::IOBuf::create(1); smallBuffer->append(1); folly::io::RWPrivateCursor wcursor(smallBuffer.get()); wcursor.writeBE(0x01); EXPECT_FALSE(parseHeader(*smallBuffer).hasValue()); } TEST_F(QuicHeaderCodecTest, VersionNegotiationPacketTest) { ConnectionId srcConnId = getTestConnectionId(0), destConnId = getTestConnectionId(1); QuicVersion version = MVFST1; std::vector versions{version}; VersionNegotiationPacketBuilder builder(srcConnId, destConnId, versions); auto packet = std::move(builder).buildPacket(); auto result = parseHeader(*packet.second); EXPECT_TRUE(result->isVersionNegotiation); } TEST_F(QuicHeaderCodecTest, ShortHeaderTest) { PacketNum packetNum = 1; RegularQuicPacketBuilder builder( kDefaultUDPSendPacketLen, ShortHeader( ProtectionType::KeyPhaseZero, getTestConnectionId(), packetNum), 0 /* largestAcked */); auto packet = std::move(builder).buildPacket(); auto result = parseHeader(*packet.header); auto& header = result->parsedHeader->header; EXPECT_EQ( getTestConnectionId(), variant_match( header, [](const LongHeader& longHeader) { return longHeader.getDestinationConnId(); }, [](const ShortHeader& shortHeader) { return shortHeader.getConnectionId(); })); EXPECT_NO_THROW(boost::get(header)); } } // namespace test } // namespace quic