1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/quic/quic_server.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/quic/crypto/quic_random.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/quic/quic_utils.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/quic/test_tools/mock_quic_dispatcher.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/quic/test_tools/quic_test_utils.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing ::testing::_;
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace net {
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace test {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace {
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// TODO(dmz) Remove "Chrome" part of name once net/tools/quic is deleted.
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass QuicChromeServerDispatchPacketTest : public ::testing::Test {
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  QuicChromeServerDispatchPacketTest()
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      : crypto_config_("blah", QuicRandom::GetInstance()),
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        dispatcher_(config_,
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                    crypto_config_,
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                    new QuicDispatcher::DefaultPacketWriterFactory(),
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                    &helper_) {
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    dispatcher_.Initialize(NULL);
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void DispatchPacket(const QuicEncryptedPacket& packet) {
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    IPEndPoint client_addr, server_addr;
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    dispatcher_.ProcessPacket(server_addr, client_addr, packet);
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected:
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  QuicConfig config_;
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  QuicCryptoServerConfig crypto_config_;
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MockHelper helper_;
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  MockQuicDispatcher dispatcher_;
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
44116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(QuicChromeServerDispatchPacketTest, DispatchPacket) {
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  unsigned char valid_packet[] = {
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // public flags (8 byte connection_id)
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    0x3C,
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // connection_id
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    0x10, 0x32, 0x54, 0x76,
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    0x98, 0xBA, 0xDC, 0xFE,
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // packet sequence number
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    0xBC, 0x9A, 0x78, 0x56,
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    0x34, 0x12,
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // private flags
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    0x00 };
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  QuicEncryptedPacket encrypted_valid_packet(QuicUtils::AsChars(valid_packet),
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                             arraysize(valid_packet), false);
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_CALL(dispatcher_, ProcessPacket(_, _, _)).Times(1);
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DispatchPacket(encrypted_valid_packet);
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace test
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace net
66