// Copyright 2013 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_server.h" #include "net/quic/crypto/quic_random.h" #include "net/quic/quic_utils.h" #include "net/tools/quic/test_tools/mock_quic_dispatcher.h" #include "testing/gtest/include/gtest/gtest.h" using ::testing::_; namespace net { namespace tools { namespace test { namespace { class QuicServerDispatchPacketTest : public ::testing::Test { public: QuicServerDispatchPacketTest() : crypto_config_("blah", QuicRandom::GetInstance()), dispatcher_(config_, crypto_config_, 1234, &eps_) {} void MaybeDispatchPacket(const QuicEncryptedPacket& packet) { IPEndPoint client_addr, server_addr; QuicServer::MaybeDispatchPacket(&dispatcher_, packet, client_addr, server_addr); } protected: QuicConfig config_; QuicCryptoServerConfig crypto_config_; EpollServer eps_; MockQuicDispatcher dispatcher_; }; TEST_F(QuicServerDispatchPacketTest, DoNotDispatchPacketWithoutGUID) { // Packet too short to be considered valid. unsigned char invalid_packet[] = { 0x00 }; QuicEncryptedPacket encrypted_invalid_packet( QuicUtils::AsChars(invalid_packet), arraysize(invalid_packet), false); // We expect the invalid packet to be dropped, and ProcessPacket should never // be called. EXPECT_CALL(dispatcher_, ProcessPacket(_, _, _, _, _)).Times(0); MaybeDispatchPacket(encrypted_invalid_packet); } TEST_F(QuicServerDispatchPacketTest, DispatchValidPacket) { unsigned char valid_packet[] = { // public flags (8 byte guid) 0x3C, // guid 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, // packet sequence number 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, // private flags 0x00 }; QuicEncryptedPacket encrypted_valid_packet(QuicUtils::AsChars(valid_packet), arraysize(valid_packet), false); EXPECT_CALL(dispatcher_, ProcessPacket(_, _, _, _, _)).Times(1); MaybeDispatchPacket(encrypted_valid_packet); } } // namespace } // namespace test } // namespace tools } // namespace net