xref: /aosp_15_r20/external/cronet/net/tools/quic/quic_simple_server_test.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2014 The Chromium Authors
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 "net/tools/quic/quic_simple_server.h"
6 
7 #include <memory>
8 
9 #include "net/quic/address_utils.h"
10 #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_random.h"
11 #include "net/third_party/quiche/src/quiche/quic/core/deterministic_connection_id_generator.h"
12 #include "net/third_party/quiche/src/quiche/quic/core/quic_crypto_stream.h"
13 #include "net/third_party/quiche/src/quiche/quic/core/quic_utils.h"
14 #include "net/third_party/quiche/src/quiche/quic/platform/api/quic_test.h"
15 #include "net/third_party/quiche/src/quiche/quic/test_tools/crypto_test_utils.h"
16 #include "net/third_party/quiche/src/quiche/quic/test_tools/mock_quic_dispatcher.h"
17 #include "net/third_party/quiche/src/quiche/quic/test_tools/quic_test_utils.h"
18 #include "net/third_party/quiche/src/quiche/quic/tools/quic_memory_cache_backend.h"
19 #include "net/tools/quic/quic_simple_server_session_helper.h"
20 #include "testing/gtest/include/gtest/gtest.h"
21 
22 using ::testing::_;
23 
24 namespace net::test {
25 
26 // TODO(dmz) Remove "Chrome" part of name once net/tools/quic is deleted.
27 class QuicChromeServerDispatchPacketTest : public ::testing::Test {
28  public:
QuicChromeServerDispatchPacketTest()29   QuicChromeServerDispatchPacketTest()
30       : crypto_config_("blah",
31                        quic::QuicRandom::GetInstance(),
32                        quic::test::crypto_test_utils::ProofSourceForTesting(),
33                        quic::KeyExchangeSource::Default()),
34         version_manager_(quic::AllSupportedVersions()),
35         connection_id_generator_(quic::kQuicDefaultConnectionIdLength),
36         dispatcher_(std::make_unique<quic::test::MockQuicDispatcher>(
37             &config_,
38             &crypto_config_,
39             &version_manager_,
40             std::make_unique<quic::test::MockQuicConnectionHelper>(),
41             std::make_unique<QuicSimpleServerSessionHelper>(
42                 quic::QuicRandom::GetInstance()),
43             std::make_unique<quic::test::MockAlarmFactory>(),
44             &memory_cache_backend_,
45             connection_id_generator_)) {
46     dispatcher_->InitializeWithWriter(nullptr);
47   }
48 
DispatchPacket(const quic::QuicReceivedPacket & packet)49   void DispatchPacket(const quic::QuicReceivedPacket& packet) {
50     IPEndPoint client_addr, server_addr;
51     dispatcher_->ProcessPacket(ToQuicSocketAddress(server_addr),
52                                ToQuicSocketAddress(client_addr), packet);
53   }
54 
55  protected:
56   quic::QuicConfig config_;
57   quic::QuicCryptoServerConfig crypto_config_;
58   quic::QuicVersionManager version_manager_;
59   quic::DeterministicConnectionIdGenerator connection_id_generator_;
60   std::unique_ptr<quic::test::MockQuicDispatcher> dispatcher_;
61   quic::QuicMemoryCacheBackend memory_cache_backend_;
62 };
63 
TEST_F(QuicChromeServerDispatchPacketTest,DispatchPacket)64 TEST_F(QuicChromeServerDispatchPacketTest, DispatchPacket) {
65   unsigned char valid_packet[] = {// public flags (8 byte connection_id)
66                                   0x3C,
67                                   // connection_id
68                                   0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC,
69                                   0xFE,
70                                   // packet sequence number
71                                   0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
72                                   // private flags
73                                   0x00};
74   quic::QuicReceivedPacket encrypted_valid_packet(
75       reinterpret_cast<char*>(valid_packet), std::size(valid_packet),
76       quic::QuicTime::Zero(), false);
77 
78   EXPECT_CALL(*dispatcher_, ProcessPacket(_, _, _)).Times(1);
79   DispatchPacket(encrypted_valid_packet);
80 }
81 
82 }  // namespace net::test
83