Chromium Code Reviews| Index: net/quic/quic_crypto_stream_test.cc |
| diff --git a/net/quic/quic_crypto_stream_test.cc b/net/quic/quic_crypto_stream_test.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..08fd470b71397bac67f9a93d198248c76c7db489 |
| --- /dev/null |
| +++ b/net/quic/quic_crypto_stream_test.cc |
| @@ -0,0 +1,100 @@ |
| +// Copyright (c) 2012 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/quic/quic_crypto_stream.h" |
| + |
| +#include <map> |
| +#include <string> |
| + |
| +#include "net/quic/quic_utils.h" |
| +#include "net/quic/test_tools/quic_test_utils.h" |
| +#include "testing/gmock/include/gmock/gmock.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +using std::map; |
| +using std::string; |
| + |
| +namespace net { |
| +namespace test { |
| +namespace { |
| + |
| +class MockQuicCryptoStream : public QuicCryptoStream { |
| + public: |
| + explicit MockQuicCryptoStream(QuicSession* session) |
| + : QuicCryptoStream(session) { |
| + } |
| + |
| + void OnHandshakeMessage(const CryptoHandshakeMessage& message) { |
| + message_tags_.push_back(message.tag); |
| + message_maps_.push_back(map<CryptoTag, string>()); |
| + CryptoTagValueMap::const_iterator it = message.tag_value_map.begin(); |
| + while (it != message.tag_value_map.end()) { |
| + message_maps_.back()[it->first] = it->second.as_string(); |
| + ++it; |
| + } |
| + } |
| + |
| + std::vector<CryptoTag> message_tags_; |
|
jar (doing other things)
2012/10/31 22:37:37
nit: I think even here in test land, members shoul
Ryan Hamilton
2012/11/01 22:52:20
Fixed upstream.
|
| + std::vector<map<CryptoTag, string> > message_maps_; |
| +}; |
|
jar (doing other things)
2012/10/31 22:37:37
nit: DISALLOW_COPY_AND_ASSIGN
Ryan Hamilton
2012/11/01 22:52:20
Fixed upstream.
|
| + |
| +class QuicCryptoStreamTest : public ::testing::Test { |
| + public: |
| + QuicCryptoStreamTest() |
| + : addr_(IPAddressNumber(), 1), |
| + connection_(new MockConnection(1, addr_)), |
| + session_(connection_, true), |
| + stream_(&session_) { |
| + message_.tag = kSHLO; |
| + message_.tag_value_map[1] = "abc"; |
| + message_.tag_value_map[2] = "def"; |
| + ConstructHandshakeMessage(); |
| + } |
| + |
| + void ConstructHandshakeMessage() { |
| + CryptoFramer framer; |
| + message_data_.reset(framer.ConstructHandshakeMessage(message_)); |
| + } |
| + |
| + IPEndPoint addr_; |
|
jar (doing other things)
2012/10/31 22:37:37
These should probably be protected:
Ryan Hamilton
2012/11/01 22:52:20
Fixed upstream.
|
| + MockConnection* connection_; |
| + MockSession session_; |
| + MockQuicCryptoStream stream_; |
| + CryptoHandshakeMessage message_; |
| + scoped_ptr<QuicData> message_data_; |
| +}; |
| + |
| +TEST_F(QuicCryptoStreamTest, NotInitiallyConected) { |
| + EXPECT_FALSE(stream_.handshake_complete()); |
| +} |
| + |
| +TEST_F(QuicCryptoStreamTest, OnErrorClosesConnection) { |
| + CryptoFramer framer; |
| + EXPECT_CALL(session_, ConnectionClose(QUIC_NO_ERROR, false)); |
| + stream_.OnError(&framer); |
| +} |
| + |
| +TEST_F(QuicCryptoStreamTest, ProcessData) { |
| + EXPECT_EQ(message_data_->length(), |
| + stream_.ProcessData(message_data_->data(), |
| + message_data_->length())); |
| + ASSERT_EQ(1u, stream_.message_tags_.size()); |
| + EXPECT_EQ(kSHLO, stream_.message_tags_[0]); |
| + EXPECT_EQ(2u, stream_.message_maps_[0].size()); |
| + EXPECT_EQ("abc",stream_.message_maps_[0][1]); |
| + EXPECT_EQ("def", stream_.message_maps_[0][2]); |
| +} |
| + |
| +TEST_F(QuicCryptoStreamTest, ProcessBadData) { |
| + string bad(message_data_->data(), message_data_->length()); |
| + bad[6] = 0xFF; // out of order tag |
| + |
| + EXPECT_CALL(*connection_, |
| + SendConnectionClose(QUIC_CRYPTO_TAGS_OUT_OF_ORDER)); |
| + EXPECT_EQ(0u, stream_.ProcessData(bad.data(), bad.length())); |
| +} |
| + |
| +} // namespace |
| +} // namespace test |
| +} // namespace net |