// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/tools/quic/quic_simple_server.h" #include #include "net/quic/address_utils.h" #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_random.h" #include "net/third_party/quiche/src/quiche/quic/core/deterministic_connection_id_generator.h" #include "net/third_party/quiche/src/quiche/quic/core/quic_crypto_stream.h" #include "net/third_party/quiche/src/quiche/quic/core/quic_utils.h" #include "net/third_party/quiche/src/quiche/quic/platform/api/quic_test.h" #include "net/third_party/quiche/src/quiche/quic/test_tools/crypto_test_utils.h" #include "net/third_party/quiche/src/quiche/quic/test_tools/mock_quic_dispatcher.h" #include "net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.h" #include "net/third_party/quiche/src/quiche/quic/tools/quic_memory_cache_backend.h" #include "net/tools/quic/quic_simple_server_session_helper.h" #include "testing/gtest/include/gtest/gtest.h" using ::testing::_; namespace net::test { // TODO(dmz) Remove "Chrome" part of name once net/tools/quic is deleted. class QuicChromeServerDispatchPacketTest : public ::testing::Test { public: QuicChromeServerDispatchPacketTest() : crypto_config_("blah", quic::QuicRandom::GetInstance(), quic::test::crypto_test_utils::ProofSourceForTesting(), quic::KeyExchangeSource::Default()), version_manager_(quic::AllSupportedVersions()), connection_id_generator_(quic::kQuicDefaultConnectionIdLength), dispatcher_(std::make_unique( &config_, &crypto_config_, &version_manager_, std::make_unique(), std::make_unique( quic::QuicRandom::GetInstance()), std::make_unique(), &memory_cache_backend_, connection_id_generator_)) { dispatcher_->InitializeWithWriter(nullptr); } void DispatchPacket(const quic::QuicReceivedPacket& packet) { IPEndPoint client_addr, server_addr; dispatcher_->ProcessPacket(ToQuicSocketAddress(server_addr), ToQuicSocketAddress(client_addr), packet); } protected: quic::QuicConfig config_; quic::QuicCryptoServerConfig crypto_config_; quic::QuicVersionManager version_manager_; quic::DeterministicConnectionIdGenerator connection_id_generator_; std::unique_ptr dispatcher_; quic::QuicMemoryCacheBackend memory_cache_backend_; }; TEST_F(QuicChromeServerDispatchPacketTest, DispatchPacket) { unsigned char valid_packet[] = {// public flags (8 byte connection_id) 0x3C, // connection_id 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, // packet sequence number 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, // private flags 0x00}; quic::QuicReceivedPacket encrypted_valid_packet( reinterpret_cast(valid_packet), std::size(valid_packet), quic::QuicTime::Zero(), false); EXPECT_CALL(*dispatcher_, ProcessPacket(_, _, _)).Times(1); DispatchPacket(encrypted_valid_packet); } } // namespace net::test