| Index: net/quic/quic_crypto_client_stream_test.cc
|
| diff --git a/net/quic/quic_crypto_client_stream_test.cc b/net/quic/quic_crypto_client_stream_test.cc
|
| index 3515d32aac7e6a2255c0b430c5aeea5b650536c5..344dfe1c54a74c4a1b3743855dbbc577e04e0164 100644
|
| --- a/net/quic/quic_crypto_client_stream_test.cc
|
| +++ b/net/quic/quic_crypto_client_stream_test.cc
|
| @@ -11,6 +11,7 @@
|
| #include "net/quic/quic_flags.h"
|
| #include "net/quic/quic_protocol.h"
|
| #include "net/quic/quic_server_id.h"
|
| +#include "net/quic/quic_utils.h"
|
| #include "net/quic/test_tools/crypto_test_utils.h"
|
| #include "net/quic/test_tools/quic_test_utils.h"
|
| #include "net/quic/test_tools/simple_quic_framer.h"
|
| @@ -140,6 +141,66 @@ TEST_F(QuicCryptoClientStreamTest, ExpiredServerConfig) {
|
| ASSERT_EQ(1u, connection_->packets_.size());
|
| }
|
|
|
| +TEST_F(QuicCryptoClientStreamTest, ServerConfigUpdate) {
|
| + // Test that the crypto client stream can receive server config updates after
|
| + // the connection has been established.
|
| + CompleteCryptoHandshake();
|
| +
|
| + QuicCryptoClientConfig::CachedState* state =
|
| + crypto_config_.LookupOrCreate(server_id_);
|
| +
|
| + // Ensure cached STK is different to what we send in the handshake.
|
| + EXPECT_NE("xstk", state->source_address_token());
|
| +
|
| + // Initialize using {...} syntax to avoid trailing \0 if converting from
|
| + // string.
|
| + unsigned char stk[] = { 'x', 's', 't', 'k' };
|
| +
|
| + // Minimum SCFG that passes config validation checks.
|
| + unsigned char scfg[] = {
|
| + // SCFG
|
| + 0x53, 0x43, 0x46, 0x47,
|
| + // num entries
|
| + 0x01, 0x00,
|
| + // padding
|
| + 0x00, 0x00,
|
| + // EXPY
|
| + 0x45, 0x58, 0x50, 0x59,
|
| + // EXPY end offset
|
| + 0x08, 0x00, 0x00, 0x00,
|
| + // Value
|
| + '1', '2', '3', '4',
|
| + '5', '6', '7', '8'
|
| + };
|
| +
|
| + CryptoHandshakeMessage server_config_update;
|
| + server_config_update.set_tag(kSCUP);
|
| + server_config_update.SetValue(kSourceAddressTokenTag, stk);
|
| + server_config_update.SetValue(kSCFG, scfg);
|
| +
|
| + scoped_ptr<QuicData> data(
|
| + CryptoFramer::ConstructHandshakeMessage(server_config_update));
|
| + stream_->ProcessRawData(data->data(), data->length());
|
| +
|
| + // Make sure that the STK and SCFG are cached correctly.
|
| + EXPECT_EQ("xstk", state->source_address_token());
|
| +
|
| + string cached_scfg = state->server_config();
|
| + test::CompareCharArraysWithHexError(
|
| + "scfg", cached_scfg.data(), cached_scfg.length(),
|
| + QuicUtils::AsChars(scfg), arraysize(scfg));
|
| +}
|
| +
|
| +TEST_F(QuicCryptoClientStreamTest, ServerConfigUpdateBeforeHandshake) {
|
| + EXPECT_CALL(*connection_, SendConnectionClose(
|
| + QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE));
|
| + CryptoHandshakeMessage server_config_update;
|
| + server_config_update.set_tag(kSCUP);
|
| + scoped_ptr<QuicData> data(
|
| + CryptoFramer::ConstructHandshakeMessage(server_config_update));
|
| + stream_->ProcessRawData(data->data(), data->length());
|
| +}
|
| +
|
| } // namespace
|
| } // namespace test
|
| } // namespace net
|
|
|