// Copyright 2014 The Chromium Authors. All rights reserved.
// 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 "net/third_party/quic/core/crypto/quic_random.h"
#include "net/third_party/quic/core/quic_crypto_stream.h"
#include "net/third_party/quic/core/quic_utils.h"
#include "net/third_party/quic/core/tls_server_handshaker.h"
#include "net/third_party/quic/platform/api/quic_test.h"
#include "net/third_party/quic/test_tools/crypto_test_utils.h"
#include "net/third_party/quic/test_tools/mock_quic_dispatcher.h"
#include "net/third_party/quic/test_tools/quic_test_utils.h"
#include "net/third_party/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 {
namespace test {

// TODO(dmz) Remove "Chrome" part of name once net/tools/quic is deleted.
class QuicChromeServerDispatchPacketTest : public QuicTest {
 public:
  QuicChromeServerDispatchPacketTest()
      : crypto_config_("blah",
                       quic::QuicRandom::GetInstance(),
                       quic::test::crypto_test_utils::ProofSourceForTesting(),
                       quic::KeyExchangeSource::Default(),
                       quic::TlsServerHandshaker::CreateSslCtx()),
        version_manager_(quic::AllSupportedVersions()),
        dispatcher_(config_,
                    &crypto_config_,
                    &version_manager_,
                    std::unique_ptr<quic::test::MockQuicConnectionHelper>(
                        new quic::test::MockQuicConnectionHelper),
                    std::unique_ptr<quic::QuicCryptoServerStream::Helper>(
                        new QuicSimpleServerSessionHelper(
                            quic::QuicRandom::GetInstance())),
                    std::unique_ptr<quic::test::MockAlarmFactory>(
                        new quic::test::MockAlarmFactory),
                    &memory_cache_backend_) {
    dispatcher_.InitializeWithWriter(nullptr);
  }

  void DispatchPacket(const quic::QuicReceivedPacket& packet) {
    IPEndPoint client_addr, server_addr;
    dispatcher_.ProcessPacket(
        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(server_addr)),
        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(client_addr)),
        packet);
  }

 protected:
  quic::QuicConfig config_;
  quic::QuicCryptoServerConfig crypto_config_;
  quic::QuicVersionManager version_manager_;
  quic::test::MockQuicDispatcher 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<char*>(valid_packet), arraysize(valid_packet),
      quic::QuicTime::Zero(), false);

  EXPECT_CALL(dispatcher_, ProcessPacket(_, _, _)).Times(1);
  DispatchPacket(encrypted_valid_packet);
}

}  // namespace test
}  // namespace net
