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

Side by Side Diff: net/spdy/chromium/spdy_network_transaction_unittest.cc

Issue 2943113002: Reset pushed stream unless using GET or HEAD method. (Closed)
Patch Set: Created 3 years, 6 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
« no previous file with comments | « no previous file | net/spdy/chromium/spdy_session.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <cmath> 5 #include <cmath>
6 #include <memory> 6 #include <memory>
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 2221 matching lines...) Expand 10 before | Expand all | Expand 10 after
2232 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); 2232 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
2233 MockWrite writes[] = { 2233 MockWrite writes[] = {
2234 CreateMockWrite(req, 0), CreateMockWrite(priority, 2), 2234 CreateMockWrite(req, 0), CreateMockWrite(priority, 2),
2235 }; 2235 };
2236 2236
2237 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); 2237 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
2238 SpdySerializedFrame response_body_frame( 2238 SpdySerializedFrame response_body_frame(
2239 spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true)); 2239 spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true));
2240 2240
2241 SpdyHeaderBlock push_headers; 2241 SpdyHeaderBlock push_headers;
2242 push_headers[":method"] = "GET";
2242 spdy_util_.AddUrlToHeaderBlock(SpdyString(kDefaultUrl) + "b.dat", 2243 spdy_util_.AddUrlToHeaderBlock(SpdyString(kDefaultUrl) + "b.dat",
2243 &push_headers); 2244 &push_headers);
2244 2245
2245 SpdySerializedFrame push_init_frame( 2246 SpdySerializedFrame push_init_frame(
2246 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); 2247 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1));
2247 2248
2248 SpdySerializedFrame push_headers_frame( 2249 SpdySerializedFrame push_headers_frame(
2249 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); 2250 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0));
2250 2251
2251 SpdySerializedFrame push_body_frame(spdy_util_.ConstructSpdyDataFrame( 2252 SpdySerializedFrame push_body_frame(spdy_util_.ConstructSpdyDataFrame(
(...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after
3140 ReadResult(&trans2, &result); 3141 ReadResult(&trans2, &result);
3141 EXPECT_EQ(kPushedData, result); 3142 EXPECT_EQ(kPushedData, result);
3142 3143
3143 data.Resume(); 3144 data.Resume();
3144 base::RunLoop().RunUntilIdle(); 3145 base::RunLoop().RunUntilIdle();
3145 3146
3146 EXPECT_TRUE(data.AllReadDataConsumed()); 3147 EXPECT_TRUE(data.AllReadDataConsumed());
3147 EXPECT_TRUE(data.AllWriteDataConsumed()); 3148 EXPECT_TRUE(data.AllWriteDataConsumed());
3148 } 3149 }
3149 3150
3151 // Regression test for https://crbug.com/727653.
3152 TEST_F(SpdyNetworkTransactionTest, RejectServerPushWithNoMethod) {
3153 SpdySerializedFrame req(
3154 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
3155 SpdySerializedFrame rst(
3156 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM));
3157 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 3)};
3158
3159 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
3160
3161 SpdyHeaderBlock push_promise_header_block;
3162 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat").c_str(),
3163 &push_promise_header_block);
3164 SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block));
3165 SpdySerializedFrame push_promise_frame(
3166 spdy_util_.SerializeFrame(push_promise));
3167
3168 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true));
3169 MockRead reads[] = {
3170 CreateMockRead(reply, 1), CreateMockRead(push_promise_frame, 2),
3171 CreateMockRead(body, 4), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)};
3172
3173 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3174 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
3175 NetLogWithSource(), nullptr);
3176 helper.RunToCompletion(&data);
3177 }
3178
3179 // Regression test for https://crbug.com/727653.
3180 TEST_F(SpdyNetworkTransactionTest, RejectServerPushWithInvalidMethod) {
3181 SpdySerializedFrame req(
3182 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
3183 SpdySerializedFrame rst(
3184 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM));
3185 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 3)};
3186
3187 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
3188
3189 SpdyHeaderBlock push_promise_header_block;
3190 push_promise_header_block[":method"] = "POST";
3191 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat").c_str(),
3192 &push_promise_header_block);
3193 SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block));
3194 SpdySerializedFrame push_promise_frame(
3195 spdy_util_.SerializeFrame(push_promise));
3196
3197 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true));
3198 MockRead reads[] = {
3199 CreateMockRead(reply, 1), CreateMockRead(push_promise_frame, 2),
3200 CreateMockRead(body, 4), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)};
3201
3202 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3203 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
3204 NetLogWithSource(), nullptr);
3205 helper.RunToCompletion(&data);
3206 }
3207
3150 // Verify that various response headers parse correctly through the HTTP layer. 3208 // Verify that various response headers parse correctly through the HTTP layer.
3151 TEST_F(SpdyNetworkTransactionTest, ResponseHeaders) { 3209 TEST_F(SpdyNetworkTransactionTest, ResponseHeaders) {
3152 struct ResponseHeadersTests { 3210 struct ResponseHeadersTests {
3153 int num_headers; 3211 int num_headers;
3154 const char* extra_headers[5]; 3212 const char* extra_headers[5];
3155 SpdyHeaderBlock expected_headers; 3213 SpdyHeaderBlock expected_headers;
3156 } test_cases[] = {// This uses a multi-valued cookie header. 3214 } test_cases[] = {// This uses a multi-valued cookie header.
3157 { 3215 {
3158 2, 3216 2,
3159 {"cookie", "val1", "cookie", 3217 {"cookie", "val1", "cookie",
(...skipping 1522 matching lines...) Expand 10 before | Expand all | Expand 10 after
4682 SpdySerializedFrame stream2_priority( 4740 SpdySerializedFrame stream2_priority(
4683 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); 4741 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
4684 MockWrite writes[] = { 4742 MockWrite writes[] = {
4685 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), 4743 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3),
4686 }; 4744 };
4687 4745
4688 SpdySerializedFrame stream1_reply( 4746 SpdySerializedFrame stream1_reply(
4689 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); 4747 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
4690 4748
4691 SpdyHeaderBlock initial_headers; 4749 SpdyHeaderBlock initial_headers;
4750 initial_headers[":method"] = "GET";
4692 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), 4751 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
4693 &initial_headers); 4752 &initial_headers);
4694 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( 4753 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
4695 std::move(initial_headers), 2, 1)); 4754 std::move(initial_headers), 2, 1));
4696 4755
4697 SpdyHeaderBlock late_headers; 4756 SpdyHeaderBlock late_headers;
4698 late_headers[spdy_util_.GetStatusKey()] = "200"; 4757 late_headers[spdy_util_.GetStatusKey()] = "200";
4699 late_headers["hello"] = "bye"; 4758 late_headers["hello"] = "bye";
4700 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( 4759 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders(
4701 2, std::move(late_headers), false)); 4760 2, std::move(late_headers), false));
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
4740 SpdySerializedFrame stream2_priority( 4799 SpdySerializedFrame stream2_priority(
4741 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); 4800 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true));
4742 MockWrite writes[] = { 4801 MockWrite writes[] = {
4743 CreateMockWrite(stream1_syn, 0, SYNCHRONOUS), 4802 CreateMockWrite(stream1_syn, 0, SYNCHRONOUS),
4744 CreateMockWrite(stream2_priority, 3), 4803 CreateMockWrite(stream2_priority, 3),
4745 }; 4804 };
4746 4805
4747 SpdySerializedFrame stream1_reply( 4806 SpdySerializedFrame stream1_reply(
4748 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); 4807 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
4749 SpdyHeaderBlock initial_headers; 4808 SpdyHeaderBlock initial_headers;
4809 initial_headers[":method"] = "GET";
4750 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), 4810 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
4751 &initial_headers); 4811 &initial_headers);
4752 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( 4812 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
4753 std::move(initial_headers), 2, 1)); 4813 std::move(initial_headers), 2, 1));
4754 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); 4814 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true));
4755 SpdyHeaderBlock late_headers; 4815 SpdyHeaderBlock late_headers;
4756 late_headers[spdy_util_.GetStatusKey()] = "200"; 4816 late_headers[spdy_util_.GetStatusKey()] = "200";
4757 late_headers["hello"] = "bye"; 4817 late_headers["hello"] = "bye";
4758 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( 4818 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders(
4759 2, std::move(late_headers), false)); 4819 2, std::move(late_headers), false));
(...skipping 1859 matching lines...) Expand 10 before | Expand all | Expand 10 after
6619 6679
6620 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { 6680 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) {
6621 auto ssl_provider = base::MakeUnique<SSLSocketDataProvider>(ASYNC, OK); 6681 auto ssl_provider = base::MakeUnique<SSLSocketDataProvider>(ASYNC, OK);
6622 // Set to TLS_RSA_WITH_NULL_MD5 6682 // Set to TLS_RSA_WITH_NULL_MD5
6623 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); 6683 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status);
6624 6684
6625 RunTLSUsageCheckTest(std::move(ssl_provider)); 6685 RunTLSUsageCheckTest(std::move(ssl_provider));
6626 } 6686 }
6627 6687
6628 } // namespace net 6688 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/spdy/chromium/spdy_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698