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