Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(245)

Side by Side Diff: net/spdy/spdy_session_unittest.cc

Issue 2600973002: Implement HTTP/2 settings field trial parameters. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/spdy/spdy_session.h" 5 #include "net/spdy/spdy_session.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 1863 matching lines...) Expand 10 before | Expand all | Expand 10 after
1874 spdy_stream1->Cancel(); 1874 spdy_stream1->Cancel();
1875 EXPECT_FALSE(spdy_stream1); 1875 EXPECT_FALSE(spdy_stream1);
1876 1876
1877 request.CancelRequest(); 1877 request.CancelRequest();
1878 callback.reset(); 1878 callback.reset();
1879 1879
1880 // Should not crash when running the pending callback. 1880 // Should not crash when running the pending callback.
1881 base::RunLoop().RunUntilIdle(); 1881 base::RunLoop().RunUntilIdle();
1882 } 1882 }
1883 1883
1884 TEST_F(SpdySessionTest, SendInitialDataOnNewSession) {
1885 session_deps_.host_resolver->set_synchronous_mode(true);
1886
1887 MockRead reads[] = {
1888 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever.
1889 };
1890
1891 SettingsMap settings;
1892 settings[SETTINGS_HEADER_TABLE_SIZE] = kMaxHeaderTableSize;
1893 settings[SETTINGS_MAX_CONCURRENT_STREAMS] = kMaxConcurrentPushedStreams;
1894 SpdySerializedFrame settings_frame(
1895 spdy_util_.ConstructSpdySettings(settings));
1896 MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix,
1897 kHttp2ConnectionHeaderPrefixSize),
1898 CreateMockWrite(settings_frame)};
1899
1900 StaticSocketDataProvider data(reads, arraysize(reads), writes,
1901 arraysize(writes));
1902 session_deps_.socket_factory->AddSocketDataProvider(&data);
1903
1904 AddSSLSocketData();
1905
1906 CreateNetworkSession();
1907
1908 SpdySessionPoolPeer pool_peer(spdy_session_pool_);
1909 pool_peer.SetEnableSendingInitialData(true);
1910
1911 CreateSecureSpdySession();
1912
1913 base::RunLoop().RunUntilIdle();
1914 EXPECT_TRUE(data.AllWriteDataConsumed());
1915 }
1916
1917 TEST_F(SpdySessionTest, Initialize) { 1884 TEST_F(SpdySessionTest, Initialize) {
1918 session_deps_.host_resolver->set_synchronous_mode(true); 1885 session_deps_.host_resolver->set_synchronous_mode(true);
1919 1886
1920 MockRead reads[] = { 1887 MockRead reads[] = {
1921 MockRead(ASYNC, 0, 0) // EOF 1888 MockRead(ASYNC, 0, 0) // EOF
1922 }; 1889 };
1923 1890
1924 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 1891 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
1925 session_deps_.socket_factory->AddSocketDataProvider(&data); 1892 session_deps_.socket_factory->AddSocketDataProvider(&data);
1926 1893
(...skipping 1953 matching lines...) Expand 10 before | Expand all | Expand 10 after
3880 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), 3847 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2),
3881 CreateMockRead(data_frame, 3), MockRead(ASYNC, ERR_IO_PENDING, 5), 3848 CreateMockRead(data_frame, 3), MockRead(ASYNC, ERR_IO_PENDING, 5),
3882 MockRead(ASYNC, 0, 6), 3849 MockRead(ASYNC, 0, 6),
3883 }; 3850 };
3884 3851
3885 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3852 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3886 session_deps_.socket_factory->AddSocketDataProvider(&data); 3853 session_deps_.socket_factory->AddSocketDataProvider(&data);
3887 3854
3888 AddSSLSocketData(); 3855 AddSSLSocketData();
3889 3856
3890 session_deps_.stream_max_recv_window_size = stream_max_recv_window_size; 3857 session_deps_.http2_settings[SETTINGS_INITIAL_WINDOW_SIZE] =
3858 stream_max_recv_window_size;
3891 CreateNetworkSession(); 3859 CreateNetworkSession();
3892 3860
3893 CreateSecureSpdySession(); 3861 CreateSecureSpdySession();
3894 3862
3895 base::WeakPtr<SpdyStream> spdy_stream = 3863 base::WeakPtr<SpdyStream> spdy_stream =
3896 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, 3864 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_,
3897 test_url_, LOWEST, NetLogWithSource()); 3865 test_url_, LOWEST, NetLogWithSource());
3898 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); 3866 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size());
3899 3867
3900 test::StreamDelegateDoNothing delegate(spdy_stream); 3868 test::StreamDelegateDoNothing delegate(spdy_stream);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
4017 CreateMockRead(first, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), 3985 CreateMockRead(first, 3), MockRead(ASYNC, ERR_IO_PENDING, 4),
4018 CreateMockRead(second, 5), MockRead(ASYNC, ERR_IO_PENDING, 7), 3986 CreateMockRead(second, 5), MockRead(ASYNC, ERR_IO_PENDING, 7),
4019 MockRead(ASYNC, 0, 8), 3987 MockRead(ASYNC, 0, 8),
4020 }; 3988 };
4021 3989
4022 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3990 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4023 session_deps_.socket_factory->AddSocketDataProvider(&data); 3991 session_deps_.socket_factory->AddSocketDataProvider(&data);
4024 3992
4025 AddSSLSocketData(); 3993 AddSSLSocketData();
4026 3994
4027 session_deps_.stream_max_recv_window_size = stream_max_recv_window_size; 3995 session_deps_.http2_settings[SETTINGS_INITIAL_WINDOW_SIZE] =
3996 stream_max_recv_window_size;
4028 CreateNetworkSession(); 3997 CreateNetworkSession();
4029 3998
4030 CreateSecureSpdySession(); 3999 CreateSecureSpdySession();
4031 4000
4032 base::WeakPtr<SpdyStream> spdy_stream = 4001 base::WeakPtr<SpdyStream> spdy_stream =
4033 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_, 4002 CreateStreamSynchronously(SPDY_REQUEST_RESPONSE_STREAM, session_,
4034 test_url_, LOWEST, NetLogWithSource()); 4003 test_url_, LOWEST, NetLogWithSource());
4035 test::StreamDelegateDoNothing delegate(spdy_stream); 4004 test::StreamDelegateDoNothing delegate(spdy_stream);
4036 spdy_stream->SetDelegate(&delegate); 4005 spdy_stream->SetDelegate(&delegate);
4037 4006
(...skipping 1346 matching lines...) Expand 10 before | Expand all | Expand 10 after
5384 // Client id exceeding watermark. 5353 // Client id exceeding watermark.
5385 EXPECT_FALSE(session_->OnUnknownFrame(9, 0)); 5354 EXPECT_FALSE(session_->OnUnknownFrame(9, 0));
5386 5355
5387 session_->last_accepted_push_stream_id_ = 6; 5356 session_->last_accepted_push_stream_id_ = 6;
5388 // Low server (even) ids are fine. 5357 // Low server (even) ids are fine.
5389 EXPECT_TRUE(session_->OnUnknownFrame(2, 0)); 5358 EXPECT_TRUE(session_->OnUnknownFrame(2, 0));
5390 // Server id exceeding last accepted id. 5359 // Server id exceeding last accepted id.
5391 EXPECT_FALSE(session_->OnUnknownFrame(8, 0)); 5360 EXPECT_FALSE(session_->OnUnknownFrame(8, 0));
5392 } 5361 }
5393 5362
5363 class SendInitialSettingsOnNewSpdySessionTest : public SpdySessionTest {
5364 protected:
5365 void RunInitialSettingsTest(const SettingsMap expected_settings) {
5366 session_deps_.host_resolver->set_synchronous_mode(true);
5367
5368 MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING)};
5369
5370 SpdySerializedFrame settings_frame(
5371 spdy_util_.ConstructSpdySettings(expected_settings));
5372 MockWrite writes[] = {MockWrite(ASYNC, kHttp2ConnectionHeaderPrefix,
5373 kHttp2ConnectionHeaderPrefixSize),
5374 CreateMockWrite(settings_frame)};
5375
5376 StaticSocketDataProvider data(reads, arraysize(reads), writes,
5377 arraysize(writes));
5378 session_deps_.socket_factory->AddSocketDataProvider(&data);
5379 AddSSLSocketData();
5380
5381 CreateNetworkSession();
5382
5383 SpdySessionPoolPeer pool_peer(spdy_session_pool_);
5384 pool_peer.SetEnableSendingInitialData(true);
5385
5386 CreateSecureSpdySession();
5387
5388 base::RunLoop().RunUntilIdle();
5389 EXPECT_TRUE(data.AllWriteDataConsumed());
5390 }
5391 };
5392
5393 // Setting values when Params::http2_settings is empty. Note that
5394 // SETTINGS_INITIAL_WINDOW_SIZE is sent in production, because it is set to a
5395 // non-default value, but it is not sent in tests, because the protocol default
5396 // value is used in tests.
5397 TEST_F(SendInitialSettingsOnNewSpdySessionTest, Empty) {
5398 SettingsMap expected_settings;
5399 expected_settings[SETTINGS_HEADER_TABLE_SIZE] = kSpdyMaxHeaderTableSize;
5400 expected_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
5401 kSpdyMaxConcurrentPushedStreams;
5402 RunInitialSettingsTest(expected_settings);
5403 }
5404
5405 // When a setting is set to the protocol default value,
5406 // no corresponding value is sent on the wire.
5407 TEST_F(SendInitialSettingsOnNewSpdySessionTest, ProtocolDefault) {
5408 // Explicitly set protocol default values for the following settings.
5409 session_deps_.http2_settings[SETTINGS_HEADER_TABLE_SIZE] = 4096;
5410 session_deps_.http2_settings[SETTINGS_ENABLE_PUSH] = 1;
5411 session_deps_.http2_settings[SETTINGS_INITIAL_WINDOW_SIZE] = 64 * 1024 - 1;
5412
5413 SettingsMap expected_settings;
5414 expected_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
5415 kSpdyMaxConcurrentPushedStreams;
5416 RunInitialSettingsTest(expected_settings);
5417 }
5418
5419 // Values set in Params::http2_settings overwrite Chromium's default values.
5420 TEST_F(SendInitialSettingsOnNewSpdySessionTest, OverwriteValues) {
5421 session_deps_.http2_settings[SETTINGS_HEADER_TABLE_SIZE] = 16 * 1024;
5422 session_deps_.http2_settings[SETTINGS_ENABLE_PUSH] = 0;
5423 session_deps_.http2_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 42;
5424 session_deps_.http2_settings[SETTINGS_INITIAL_WINDOW_SIZE] = 32 * 1024;
5425
5426 SettingsMap expected_settings;
5427 expected_settings[SETTINGS_HEADER_TABLE_SIZE] = 16 * 1024;
5428 expected_settings[SETTINGS_ENABLE_PUSH] = 0;
5429 expected_settings[SETTINGS_MAX_CONCURRENT_STREAMS] = 42;
5430 expected_settings[SETTINGS_INITIAL_WINDOW_SIZE] = 32 * 1024;
5431 RunInitialSettingsTest(expected_settings);
5432 }
5433
5434 // Unknown parameters should still be sent to the server.
5435 TEST_F(SendInitialSettingsOnNewSpdySessionTest, UnknownSettings) {
5436 // The following parameters are not defined in the HTTP/2 specification.
5437 session_deps_.http2_settings[static_cast<SpdySettingsIds>(7)] = 1234;
5438 session_deps_.http2_settings[static_cast<SpdySettingsIds>(25)] = 5678;
5439
5440 SettingsMap expected_settings;
5441 expected_settings[SETTINGS_HEADER_TABLE_SIZE] = kSpdyMaxHeaderTableSize;
5442 expected_settings[SETTINGS_MAX_CONCURRENT_STREAMS] =
5443 kSpdyMaxConcurrentPushedStreams;
5444 expected_settings[static_cast<SpdySettingsIds>(7)] = 1234;
5445 expected_settings[static_cast<SpdySettingsIds>(25)] = 5678;
5446 RunInitialSettingsTest(expected_settings);
5447 }
5448
5394 class AltSvcFrameTest : public SpdySessionTest { 5449 class AltSvcFrameTest : public SpdySessionTest {
5395 public: 5450 public:
5396 AltSvcFrameTest() 5451 AltSvcFrameTest()
5397 : alternative_service_("quic", 5452 : alternative_service_("quic",
5398 "alternative.example.org", 5453 "alternative.example.org",
5399 443, 5454 443,
5400 86400, 5455 86400,
5401 SpdyAltSvcWireFormat::VersionVector()) {} 5456 SpdyAltSvcWireFormat::VersionVector()) {}
5402 5457
5403 void AddSocketData(const SpdyAltSvcIR& altsvc_ir) { 5458 void AddSocketData(const SpdyAltSvcIR& altsvc_ir) {
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
5876 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), 5931 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(),
5877 "spdy_pooling.pem"); 5932 "spdy_pooling.pem");
5878 ssl_info.is_issued_by_known_root = true; 5933 ssl_info.is_issued_by_known_root = true;
5879 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); 5934 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin));
5880 5935
5881 EXPECT_TRUE(SpdySession::CanPool( 5936 EXPECT_TRUE(SpdySession::CanPool(
5882 &tss, ssl_info, "www.example.org", "mail.example.org")); 5937 &tss, ssl_info, "www.example.org", "mail.example.org"));
5883 } 5938 }
5884 5939
5885 } // namespace net 5940 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698