| OLD | NEW |
| 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 void FinishDefaultTestWithoutVerification() { | 261 void FinishDefaultTestWithoutVerification() { |
| 262 output_.rv = callback_.WaitForResult(); | 262 output_.rv = callback_.WaitForResult(); |
| 263 if (output_.rv != OK) | 263 if (output_.rv != OK) |
| 264 session_->spdy_session_pool()->CloseCurrentSessions(ERR_ABORTED); | 264 session_->spdy_session_pool()->CloseCurrentSessions(ERR_ABORTED); |
| 265 } | 265 } |
| 266 | 266 |
| 267 // Most tests will want to call this function. In particular, the MockReads | 267 // Most tests will want to call this function. In particular, the MockReads |
| 268 // should end with an empty read, and that read needs to be processed to | 268 // should end with an empty read, and that read needs to be processed to |
| 269 // ensure proper deletion of the spdy_session_pool. | 269 // ensure proper deletion of the spdy_session_pool. |
| 270 void VerifyDataConsumed() { | 270 void VerifyDataConsumed() { |
| 271 for (const SocketDataProvider* provider : data_vector_) { | 271 for (DataVector::iterator it = data_vector_.begin(); |
| 272 EXPECT_TRUE(provider->AllReadDataConsumed()); | 272 it != data_vector_.end(); ++it) { |
| 273 EXPECT_TRUE(provider->AllWriteDataConsumed()); | 273 EXPECT_TRUE((*it)->at_read_eof()) << "Read count: " |
| 274 << (*it)->read_count() |
| 275 << " Read index: " |
| 276 << (*it)->read_index(); |
| 277 EXPECT_TRUE((*it)->at_write_eof()) << "Write count: " |
| 278 << (*it)->write_count() |
| 279 << " Write index: " |
| 280 << (*it)->write_index(); |
| 274 } | 281 } |
| 275 } | 282 } |
| 276 | 283 |
| 277 // Occasionally a test will expect to error out before certain reads are | 284 // Occasionally a test will expect to error out before certain reads are |
| 278 // processed. In that case we want to explicitly ensure that the reads were | 285 // processed. In that case we want to explicitly ensure that the reads were |
| 279 // not processed. | 286 // not processed. |
| 280 void VerifyDataNotConsumed() { | 287 void VerifyDataNotConsumed() { |
| 281 for (const SocketDataProvider* provider : data_vector_) { | 288 for (DataVector::iterator it = data_vector_.begin(); |
| 282 EXPECT_FALSE(provider->AllReadDataConsumed()); | 289 it != data_vector_.end(); ++it) { |
| 283 EXPECT_FALSE(provider->AllWriteDataConsumed()); | 290 EXPECT_TRUE(!(*it)->at_read_eof()) << "Read count: " |
| 291 << (*it)->read_count() |
| 292 << " Read index: " |
| 293 << (*it)->read_index(); |
| 294 EXPECT_TRUE(!(*it)->at_write_eof()) << "Write count: " |
| 295 << (*it)->write_count() |
| 296 << " Write index: " |
| 297 << (*it)->write_index(); |
| 284 } | 298 } |
| 285 } | 299 } |
| 286 | 300 |
| 287 void RunToCompletion(SocketDataProvider* data) { | 301 void RunToCompletion(SocketDataProvider* data) { |
| 288 RunPreTestSetup(); | 302 RunPreTestSetup(); |
| 289 AddData(data); | 303 AddData(data); |
| 290 RunDefaultTest(); | 304 RunDefaultTest(); |
| 291 VerifyDataConsumed(); | 305 VerifyDataConsumed(); |
| 292 } | 306 } |
| 293 | 307 |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 // the results into a single string. | 634 // the results into a single string. |
| 621 | 635 |
| 622 // Read the server push body. | 636 // Read the server push body. |
| 623 std::string result2; | 637 std::string result2; |
| 624 ReadResult(trans2.get(), data, &result2); | 638 ReadResult(trans2.get(), data, &result2); |
| 625 // Read the response body. | 639 // Read the response body. |
| 626 std::string result; | 640 std::string result; |
| 627 ReadResult(trans, data, &result); | 641 ReadResult(trans, data, &result); |
| 628 | 642 |
| 629 // Verify that we consumed all test data. | 643 // Verify that we consumed all test data. |
| 630 EXPECT_TRUE(data->AllReadDataConsumed()); | 644 EXPECT_TRUE(data->at_read_eof()); |
| 631 EXPECT_TRUE(data->AllWriteDataConsumed()); | 645 EXPECT_TRUE(data->at_write_eof()); |
| 632 | 646 |
| 633 // Verify that the received push data is same as the expected push data. | 647 // Verify that the received push data is same as the expected push data. |
| 634 EXPECT_EQ(result2.compare(expected), 0) << "Received data: " | 648 EXPECT_EQ(result2.compare(expected), 0) << "Received data: " |
| 635 << result2 | 649 << result2 |
| 636 << "||||| Expected data: " | 650 << "||||| Expected data: " |
| 637 << expected; | 651 << expected; |
| 638 | 652 |
| 639 // Verify the SYN_REPLY. | 653 // Verify the SYN_REPLY. |
| 640 // Copy the response info, because trans goes away. | 654 // Copy the response info, because trans goes away. |
| 641 *response = *trans->GetResponseInfo(); | 655 *response = *trans->GetResponseInfo(); |
| (...skipping 1792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2434 EXPECT_EQ(1, d.received_redirect_count()); | 2448 EXPECT_EQ(1, d.received_redirect_count()); |
| 2435 | 2449 |
| 2436 r->FollowDeferredRedirect(); | 2450 r->FollowDeferredRedirect(); |
| 2437 base::RunLoop().Run(); | 2451 base::RunLoop().Run(); |
| 2438 EXPECT_EQ(1, d.response_started_count()); | 2452 EXPECT_EQ(1, d.response_started_count()); |
| 2439 EXPECT_FALSE(d.received_data_before_response()); | 2453 EXPECT_FALSE(d.received_data_before_response()); |
| 2440 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); | 2454 EXPECT_EQ(URLRequestStatus::SUCCESS, r->status().status()); |
| 2441 std::string contents("hello!"); | 2455 std::string contents("hello!"); |
| 2442 EXPECT_EQ(contents, d.data_received()); | 2456 EXPECT_EQ(contents, d.data_received()); |
| 2443 } | 2457 } |
| 2444 EXPECT_TRUE(data.AllReadDataConsumed()); | 2458 EXPECT_TRUE(data.at_read_eof()); |
| 2445 EXPECT_TRUE(data.AllWriteDataConsumed()); | 2459 EXPECT_TRUE(data.at_write_eof()); |
| 2446 EXPECT_TRUE(data2.AllReadDataConsumed()); | 2460 EXPECT_TRUE(data2.at_read_eof()); |
| 2447 EXPECT_TRUE(data2.AllWriteDataConsumed()); | 2461 EXPECT_TRUE(data2.at_write_eof()); |
| 2448 } | 2462 } |
| 2449 | 2463 |
| 2450 // Send a spdy request to www.example.org. Get a pushed stream that redirects to | 2464 // Send a spdy request to www.example.org. Get a pushed stream that redirects to |
| 2451 // www.foo.com. | 2465 // www.foo.com. |
| 2452 TEST_P(SpdyNetworkTransactionTest, DISABLED_RedirectServerPush) { | 2466 TEST_P(SpdyNetworkTransactionTest, DISABLED_RedirectServerPush) { |
| 2453 scoped_ptr<SpdyHeaderBlock> headers( | 2467 scoped_ptr<SpdyHeaderBlock> headers( |
| 2454 spdy_util_.ConstructGetHeaderBlock(GetDefaultUrl())); | 2468 spdy_util_.ConstructGetHeaderBlock(GetDefaultUrl())); |
| 2455 (*headers)["user-agent"] = ""; | 2469 (*headers)["user-agent"] = ""; |
| 2456 (*headers)["accept-encoding"] = "gzip, deflate"; | 2470 (*headers)["accept-encoding"] = "gzip, deflate"; |
| 2457 | 2471 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2526 EXPECT_EQ(1, d2.received_redirect_count()); | 2540 EXPECT_EQ(1, d2.received_redirect_count()); |
| 2527 | 2541 |
| 2528 r2->FollowDeferredRedirect(); | 2542 r2->FollowDeferredRedirect(); |
| 2529 base::RunLoop().Run(); | 2543 base::RunLoop().Run(); |
| 2530 EXPECT_EQ(1, d2.response_started_count()); | 2544 EXPECT_EQ(1, d2.response_started_count()); |
| 2531 EXPECT_FALSE(d2.received_data_before_response()); | 2545 EXPECT_FALSE(d2.received_data_before_response()); |
| 2532 EXPECT_EQ(URLRequestStatus::SUCCESS, r2->status().status()); | 2546 EXPECT_EQ(URLRequestStatus::SUCCESS, r2->status().status()); |
| 2533 std::string contents2("hello!"); | 2547 std::string contents2("hello!"); |
| 2534 EXPECT_EQ(contents2, d2.data_received()); | 2548 EXPECT_EQ(contents2, d2.data_received()); |
| 2535 } | 2549 } |
| 2536 EXPECT_TRUE(data.AllReadDataConsumed()); | 2550 data.CompleteRead(); |
| 2537 EXPECT_TRUE(data.AllWriteDataConsumed()); | 2551 data2.CompleteRead(); |
| 2538 EXPECT_TRUE(data2.AllReadDataConsumed()); | 2552 EXPECT_TRUE(data.at_read_eof()); |
| 2539 EXPECT_TRUE(data2.AllWriteDataConsumed()); | 2553 EXPECT_TRUE(data.at_write_eof()); |
| 2554 EXPECT_TRUE(data2.at_read_eof()); |
| 2555 EXPECT_TRUE(data2.at_write_eof()); |
| 2540 } | 2556 } |
| 2541 | 2557 |
| 2542 TEST_P(SpdyNetworkTransactionTest, ServerPushSingleDataFrame) { | 2558 TEST_P(SpdyNetworkTransactionTest, ServerPushSingleDataFrame) { |
| 2543 scoped_ptr<SpdyFrame> stream1_syn( | 2559 scoped_ptr<SpdyFrame> stream1_syn( |
| 2544 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 2560 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 2545 scoped_ptr<SpdyFrame> stream1_body( | 2561 scoped_ptr<SpdyFrame> stream1_body( |
| 2546 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 2562 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 2547 MockWrite writes[] = { | 2563 MockWrite writes[] = { |
| 2548 CreateMockWrite(*stream1_syn, 0), | 2564 CreateMockWrite(*stream1_syn, 0), |
| 2549 }; | 2565 }; |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2702 | 2718 |
| 2703 // Start the transaction with basic parameters. | 2719 // Start the transaction with basic parameters. |
| 2704 TestCompletionCallback callback; | 2720 TestCompletionCallback callback; |
| 2705 int rv = trans->Start( | 2721 int rv = trans->Start( |
| 2706 &CreateGetRequest(), callback.callback(), BoundNetLog()); | 2722 &CreateGetRequest(), callback.callback(), BoundNetLog()); |
| 2707 EXPECT_EQ(ERR_IO_PENDING, rv); | 2723 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2708 rv = callback.WaitForResult(); | 2724 rv = callback.WaitForResult(); |
| 2709 EXPECT_EQ(OK, rv); | 2725 EXPECT_EQ(OK, rv); |
| 2710 | 2726 |
| 2711 // Verify that we consumed all test data. | 2727 // Verify that we consumed all test data. |
| 2712 EXPECT_TRUE(data.AllReadDataConsumed()); | 2728 EXPECT_TRUE(data.at_read_eof()) << "Read count: " |
| 2713 EXPECT_TRUE(data.AllWriteDataConsumed()); | 2729 << data.read_count() |
| 2730 << " Read index: " |
| 2731 << data.read_index(); |
| 2732 EXPECT_TRUE(data.at_write_eof()) << "Write count: " |
| 2733 << data.write_count() |
| 2734 << " Write index: " |
| 2735 << data.write_index(); |
| 2714 | 2736 |
| 2715 // Verify the SYN_REPLY. | 2737 // Verify the SYN_REPLY. |
| 2716 HttpResponseInfo response = *trans->GetResponseInfo(); | 2738 HttpResponseInfo response = *trans->GetResponseInfo(); |
| 2717 EXPECT_TRUE(response.headers.get() != NULL); | 2739 EXPECT_TRUE(response.headers.get() != NULL); |
| 2718 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 2740 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
| 2719 } | 2741 } |
| 2720 | 2742 |
| 2721 // Verify that we don't leak streams and that we properly send a reset | 2743 // Verify that we don't leak streams and that we properly send a reset |
| 2722 // if the server pushes the same stream twice. | 2744 // if the server pushes the same stream twice. |
| 2723 TEST_P(SpdyNetworkTransactionTest, ServerPushDuplicate) { | 2745 TEST_P(SpdyNetworkTransactionTest, ServerPushDuplicate) { |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2914 | 2936 |
| 2915 // Start the transaction with basic parameters. | 2937 // Start the transaction with basic parameters. |
| 2916 TestCompletionCallback callback; | 2938 TestCompletionCallback callback; |
| 2917 int rv = trans->Start( | 2939 int rv = trans->Start( |
| 2918 &CreateGetRequest(), callback.callback(), BoundNetLog()); | 2940 &CreateGetRequest(), callback.callback(), BoundNetLog()); |
| 2919 EXPECT_EQ(ERR_IO_PENDING, rv); | 2941 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2920 rv = callback.WaitForResult(); | 2942 rv = callback.WaitForResult(); |
| 2921 EXPECT_EQ(OK, rv); | 2943 EXPECT_EQ(OK, rv); |
| 2922 | 2944 |
| 2923 // Verify that we consumed all test data. | 2945 // Verify that we consumed all test data. |
| 2924 EXPECT_TRUE(data.AllReadDataConsumed()); | 2946 EXPECT_TRUE(data.at_read_eof()) << "Read count: " |
| 2925 EXPECT_TRUE(data.AllWriteDataConsumed()); | 2947 << data.read_count() |
| 2948 << " Read index: " |
| 2949 << data.read_index(); |
| 2950 EXPECT_TRUE(data.at_write_eof()) << "Write count: " |
| 2951 << data.write_count() |
| 2952 << " Write index: " |
| 2953 << data.write_index(); |
| 2926 | 2954 |
| 2927 // Verify the SYN_REPLY. | 2955 // Verify the SYN_REPLY. |
| 2928 HttpResponseInfo response = *trans->GetResponseInfo(); | 2956 HttpResponseInfo response = *trans->GetResponseInfo(); |
| 2929 EXPECT_TRUE(response.headers.get() != NULL); | 2957 EXPECT_TRUE(response.headers.get() != NULL); |
| 2930 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 2958 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
| 2931 } | 2959 } |
| 2932 | 2960 |
| 2933 TEST_P(SpdyNetworkTransactionTest, ServerPushInvalidAssociatedStreamID9) { | 2961 TEST_P(SpdyNetworkTransactionTest, ServerPushInvalidAssociatedStreamID9) { |
| 2934 scoped_ptr<SpdyFrame> stream1_syn( | 2962 scoped_ptr<SpdyFrame> stream1_syn( |
| 2935 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 2963 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 2963 | 2991 |
| 2964 // Start the transaction with basic parameters. | 2992 // Start the transaction with basic parameters. |
| 2965 TestCompletionCallback callback; | 2993 TestCompletionCallback callback; |
| 2966 int rv = trans->Start( | 2994 int rv = trans->Start( |
| 2967 &CreateGetRequest(), callback.callback(), BoundNetLog()); | 2995 &CreateGetRequest(), callback.callback(), BoundNetLog()); |
| 2968 EXPECT_EQ(ERR_IO_PENDING, rv); | 2996 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2969 rv = callback.WaitForResult(); | 2997 rv = callback.WaitForResult(); |
| 2970 EXPECT_EQ(OK, rv); | 2998 EXPECT_EQ(OK, rv); |
| 2971 | 2999 |
| 2972 // Verify that we consumed all test data. | 3000 // Verify that we consumed all test data. |
| 2973 EXPECT_TRUE(data.AllReadDataConsumed()); | 3001 EXPECT_TRUE(data.at_read_eof()) << "Read count: " |
| 2974 EXPECT_TRUE(data.AllWriteDataConsumed()); | 3002 << data.read_count() |
| 3003 << " Read index: " |
| 3004 << data.read_index(); |
| 3005 EXPECT_TRUE(data.at_write_eof()) << "Write count: " |
| 3006 << data.write_count() |
| 3007 << " Write index: " |
| 3008 << data.write_index(); |
| 2975 | 3009 |
| 2976 // Verify the SYN_REPLY. | 3010 // Verify the SYN_REPLY. |
| 2977 HttpResponseInfo response = *trans->GetResponseInfo(); | 3011 HttpResponseInfo response = *trans->GetResponseInfo(); |
| 2978 EXPECT_TRUE(response.headers.get() != NULL); | 3012 EXPECT_TRUE(response.headers.get() != NULL); |
| 2979 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 3013 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
| 2980 } | 3014 } |
| 2981 | 3015 |
| 2982 TEST_P(SpdyNetworkTransactionTest, ServerPushNoURL) { | 3016 TEST_P(SpdyNetworkTransactionTest, ServerPushNoURL) { |
| 2983 scoped_ptr<SpdyFrame> stream1_syn( | 3017 scoped_ptr<SpdyFrame> stream1_syn( |
| 2984 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 3018 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3016 | 3050 |
| 3017 // Start the transaction with basic parameters. | 3051 // Start the transaction with basic parameters. |
| 3018 TestCompletionCallback callback; | 3052 TestCompletionCallback callback; |
| 3019 int rv = trans->Start( | 3053 int rv = trans->Start( |
| 3020 &CreateGetRequest(), callback.callback(), BoundNetLog()); | 3054 &CreateGetRequest(), callback.callback(), BoundNetLog()); |
| 3021 EXPECT_EQ(ERR_IO_PENDING, rv); | 3055 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 3022 rv = callback.WaitForResult(); | 3056 rv = callback.WaitForResult(); |
| 3023 EXPECT_EQ(OK, rv); | 3057 EXPECT_EQ(OK, rv); |
| 3024 | 3058 |
| 3025 // Verify that we consumed all test data. | 3059 // Verify that we consumed all test data. |
| 3026 EXPECT_TRUE(data.AllReadDataConsumed()); | 3060 EXPECT_TRUE(data.at_read_eof()) << "Read count: " |
| 3027 EXPECT_TRUE(data.AllWriteDataConsumed()); | 3061 << data.read_count() |
| 3062 << " Read index: " |
| 3063 << data.read_index(); |
| 3064 EXPECT_TRUE(data.at_write_eof()) << "Write count: " |
| 3065 << data.write_count() |
| 3066 << " Write index: " |
| 3067 << data.write_index(); |
| 3028 | 3068 |
| 3029 // Verify the SYN_REPLY. | 3069 // Verify the SYN_REPLY. |
| 3030 HttpResponseInfo response = *trans->GetResponseInfo(); | 3070 HttpResponseInfo response = *trans->GetResponseInfo(); |
| 3031 EXPECT_TRUE(response.headers.get() != NULL); | 3071 EXPECT_TRUE(response.headers.get() != NULL); |
| 3032 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 3072 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
| 3033 } | 3073 } |
| 3034 | 3074 |
| 3035 // Verify that various SynReply headers parse correctly through the | 3075 // Verify that various SynReply headers parse correctly through the |
| 3036 // HTTP layer. | 3076 // HTTP layer. |
| 3037 TEST_P(SpdyNetworkTransactionTest, SynReplyHeaders) { | 3077 TEST_P(SpdyNetworkTransactionTest, SynReplyHeaders) { |
| (...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3482 writes, arraysize(writes)); | 3522 writes, arraysize(writes)); |
| 3483 | 3523 |
| 3484 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 3524 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 3485 BoundNetLog(), GetParam(), NULL); | 3525 BoundNetLog(), GetParam(), NULL); |
| 3486 helper.SetDeterministic(); | 3526 helper.SetDeterministic(); |
| 3487 helper.RunPreTestSetup(); | 3527 helper.RunPreTestSetup(); |
| 3488 helper.AddDeterministicData(&data); | 3528 helper.AddDeterministicData(&data); |
| 3489 EXPECT_TRUE(helper.StartDefaultTest()); | 3529 EXPECT_TRUE(helper.StartDefaultTest()); |
| 3490 data.RunFor(2); | 3530 data.RunFor(2); |
| 3491 helper.FinishDefaultTest(); | 3531 helper.FinishDefaultTest(); |
| 3492 EXPECT_TRUE(data.AllWriteDataConsumed()); | 3532 EXPECT_TRUE(data.at_write_eof()); |
| 3493 EXPECT_TRUE(!data.AllReadDataConsumed()); | 3533 EXPECT_TRUE(!data.at_read_eof()); |
| 3494 TransactionHelperResult out = helper.output(); | 3534 TransactionHelperResult out = helper.output(); |
| 3495 EXPECT_EQ(ERR_FAILED, out.rv); | 3535 EXPECT_EQ(ERR_FAILED, out.rv); |
| 3496 } | 3536 } |
| 3497 | 3537 |
| 3498 // Test that partial writes work. | 3538 // Test that partial writes work. |
| 3499 TEST_P(SpdyNetworkTransactionTest, PartialWrite) { | 3539 TEST_P(SpdyNetworkTransactionTest, PartialWrite) { |
| 3500 // Chop the SYN_STREAM frame into 5 chunks. | 3540 // Chop the SYN_STREAM frame into 5 chunks. |
| 3501 scoped_ptr<SpdyFrame> req( | 3541 scoped_ptr<SpdyFrame> req( |
| 3502 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 3542 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 3503 const int kChunks = 5; | 3543 const int kChunks = 5; |
| (...skipping 1676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5180 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 5220 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
| 5181 | 5221 |
| 5182 // Verify the pushed stream. | 5222 // Verify the pushed stream. |
| 5183 EXPECT_TRUE(response2.headers.get() != NULL); | 5223 EXPECT_TRUE(response2.headers.get() != NULL); |
| 5184 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); | 5224 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); |
| 5185 | 5225 |
| 5186 // Read the final EOF (which will close the session) | 5226 // Read the final EOF (which will close the session) |
| 5187 data.RunFor(1); | 5227 data.RunFor(1); |
| 5188 | 5228 |
| 5189 // Verify that we consumed all test data. | 5229 // Verify that we consumed all test data. |
| 5190 EXPECT_TRUE(data.AllReadDataConsumed()); | 5230 EXPECT_TRUE(data.at_read_eof()); |
| 5191 EXPECT_TRUE(data.AllWriteDataConsumed()); | 5231 EXPECT_TRUE(data.at_write_eof()); |
| 5192 } | 5232 } |
| 5193 | 5233 |
| 5194 // TODO(baranovich): HTTP 2 does not allow multiple HEADERS frames | 5234 // TODO(baranovich): HTTP 2 does not allow multiple HEADERS frames |
| 5195 TEST_P(SpdyNetworkTransactionTest, ServerPushWithTwoHeaderFrames) { | 5235 TEST_P(SpdyNetworkTransactionTest, ServerPushWithTwoHeaderFrames) { |
| 5196 // We push a stream and attempt to claim it before the headers come down. | 5236 // We push a stream and attempt to claim it before the headers come down. |
| 5197 scoped_ptr<SpdyFrame> stream1_syn( | 5237 scoped_ptr<SpdyFrame> stream1_syn( |
| 5198 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 5238 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 5199 scoped_ptr<SpdyFrame> stream1_body( | 5239 scoped_ptr<SpdyFrame> stream1_body( |
| 5200 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 5240 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 5201 MockWrite writes[] = { | 5241 MockWrite writes[] = { |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5320 // Verify we got all the headers from all header blocks. | 5360 // Verify we got all the headers from all header blocks. |
| 5321 if (spdy_util_.spdy_version() < SPDY4) | 5361 if (spdy_util_.spdy_version() < SPDY4) |
| 5322 EXPECT_TRUE(response2.headers->HasHeaderValue("alpha", "beta")); | 5362 EXPECT_TRUE(response2.headers->HasHeaderValue("alpha", "beta")); |
| 5323 EXPECT_TRUE(response2.headers->HasHeaderValue("hello", "bye")); | 5363 EXPECT_TRUE(response2.headers->HasHeaderValue("hello", "bye")); |
| 5324 EXPECT_TRUE(response2.headers->HasHeaderValue("status", "200")); | 5364 EXPECT_TRUE(response2.headers->HasHeaderValue("status", "200")); |
| 5325 | 5365 |
| 5326 // Read the final EOF (which will close the session) | 5366 // Read the final EOF (which will close the session) |
| 5327 data.RunFor(1); | 5367 data.RunFor(1); |
| 5328 | 5368 |
| 5329 // Verify that we consumed all test data. | 5369 // Verify that we consumed all test data. |
| 5330 EXPECT_TRUE(data.AllReadDataConsumed()); | 5370 EXPECT_TRUE(data.at_read_eof()); |
| 5331 EXPECT_TRUE(data.AllWriteDataConsumed()); | 5371 EXPECT_TRUE(data.at_write_eof()); |
| 5332 } | 5372 } |
| 5333 | 5373 |
| 5334 TEST_P(SpdyNetworkTransactionTest, ServerPushWithNoStatusHeaderFrames) { | 5374 TEST_P(SpdyNetworkTransactionTest, ServerPushWithNoStatusHeaderFrames) { |
| 5335 // We push a stream and attempt to claim it before the headers come down. | 5375 // We push a stream and attempt to claim it before the headers come down. |
| 5336 scoped_ptr<SpdyFrame> stream1_syn( | 5376 scoped_ptr<SpdyFrame> stream1_syn( |
| 5337 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 5377 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 5338 scoped_ptr<SpdyFrame> stream1_body( | 5378 scoped_ptr<SpdyFrame> stream1_body( |
| 5339 spdy_util_.ConstructSpdyBodyFrame(1, true)); | 5379 spdy_util_.ConstructSpdyBodyFrame(1, true)); |
| 5340 MockWrite writes[] = { | 5380 MockWrite writes[] = { |
| 5341 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), | 5381 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5427 VerifyStreamsClosed(helper); | 5467 VerifyStreamsClosed(helper); |
| 5428 | 5468 |
| 5429 // Verify the SYN_REPLY. | 5469 // Verify the SYN_REPLY. |
| 5430 EXPECT_TRUE(response.headers.get() != NULL); | 5470 EXPECT_TRUE(response.headers.get() != NULL); |
| 5431 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 5471 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
| 5432 | 5472 |
| 5433 // Read the final EOF (which will close the session). | 5473 // Read the final EOF (which will close the session). |
| 5434 data.RunFor(1); | 5474 data.RunFor(1); |
| 5435 | 5475 |
| 5436 // Verify that we consumed all test data. | 5476 // Verify that we consumed all test data. |
| 5437 EXPECT_TRUE(data.AllReadDataConsumed()); | 5477 EXPECT_TRUE(data.at_read_eof()); |
| 5438 EXPECT_TRUE(data.AllWriteDataConsumed()); | 5478 EXPECT_TRUE(data.at_write_eof()); |
| 5439 } | 5479 } |
| 5440 | 5480 |
| 5441 TEST_P(SpdyNetworkTransactionTest, SynReplyWithHeaders) { | 5481 TEST_P(SpdyNetworkTransactionTest, SynReplyWithHeaders) { |
| 5442 scoped_ptr<SpdyFrame> req( | 5482 scoped_ptr<SpdyFrame> req( |
| 5443 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); | 5483 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); |
| 5444 scoped_ptr<SpdyFrame> rst( | 5484 scoped_ptr<SpdyFrame> rst( |
| 5445 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 5485 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); |
| 5446 MockWrite writes[] = { | 5486 MockWrite writes[] = { |
| 5447 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), | 5487 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), |
| 5448 }; | 5488 }; |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5613 | 5653 |
| 5614 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | 5654 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); |
| 5615 EXPECT_EQ(ERR_IO_PENDING, rv); | 5655 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5616 rv = callback.WaitForResult(); | 5656 rv = callback.WaitForResult(); |
| 5617 | 5657 |
| 5618 // Read the response body. | 5658 // Read the response body. |
| 5619 std::string result; | 5659 std::string result; |
| 5620 ReadResult(trans, &data, &result); | 5660 ReadResult(trans, &data, &result); |
| 5621 | 5661 |
| 5622 // Verify that we consumed all test data. | 5662 // Verify that we consumed all test data. |
| 5623 EXPECT_TRUE(data.AllReadDataConsumed()); | 5663 EXPECT_TRUE(data.at_read_eof()); |
| 5624 EXPECT_TRUE(data.AllWriteDataConsumed()); | 5664 EXPECT_TRUE(data.at_write_eof()); |
| 5625 | 5665 |
| 5626 // Verify the SYN_REPLY. | 5666 // Verify the SYN_REPLY. |
| 5627 // Copy the response info, because trans goes away. | 5667 // Copy the response info, because trans goes away. |
| 5628 response = *trans->GetResponseInfo(); | 5668 response = *trans->GetResponseInfo(); |
| 5629 | 5669 |
| 5630 VerifyStreamsClosed(helper); | 5670 VerifyStreamsClosed(helper); |
| 5631 | 5671 |
| 5632 // Verify the SYN_REPLY. | 5672 // Verify the SYN_REPLY. |
| 5633 EXPECT_TRUE(response.headers.get() != NULL); | 5673 EXPECT_TRUE(response.headers.get() != NULL); |
| 5634 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 5674 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5667 | 5707 |
| 5668 // Start the transaction with basic parameters. | 5708 // Start the transaction with basic parameters. |
| 5669 TestCompletionCallback callback; | 5709 TestCompletionCallback callback; |
| 5670 int rv = trans->Start( | 5710 int rv = trans->Start( |
| 5671 &CreateGetRequest(), callback.callback(), BoundNetLog()); | 5711 &CreateGetRequest(), callback.callback(), BoundNetLog()); |
| 5672 EXPECT_EQ(ERR_IO_PENDING, rv); | 5712 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 5673 rv = callback.WaitForResult(); | 5713 rv = callback.WaitForResult(); |
| 5674 EXPECT_EQ(OK, rv); | 5714 EXPECT_EQ(OK, rv); |
| 5675 | 5715 |
| 5676 // Verify that we consumed all test data. | 5716 // Verify that we consumed all test data. |
| 5677 EXPECT_TRUE(data.AllReadDataConsumed()); | 5717 EXPECT_TRUE(data.at_read_eof()) << "Read count: " |
| 5678 EXPECT_TRUE(data.AllWriteDataConsumed()); | 5718 << data.read_count() |
| 5719 << " Read index: " |
| 5720 << data.read_index(); |
| 5721 EXPECT_TRUE(data.at_write_eof()) << "Write count: " |
| 5722 << data.write_count() |
| 5723 << " Write index: " |
| 5724 << data.write_index(); |
| 5679 | 5725 |
| 5680 // Verify the SYN_REPLY. | 5726 // Verify the SYN_REPLY. |
| 5681 HttpResponseInfo response = *trans->GetResponseInfo(); | 5727 HttpResponseInfo response = *trans->GetResponseInfo(); |
| 5682 EXPECT_TRUE(response.headers.get() != NULL); | 5728 EXPECT_TRUE(response.headers.get() != NULL); |
| 5683 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 5729 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
| 5684 } | 5730 } |
| 5685 | 5731 |
| 5686 TEST_P(SpdyNetworkTransactionTest, OutOfOrderSynStream) { | 5732 TEST_P(SpdyNetworkTransactionTest, OutOfOrderSynStream) { |
| 5687 // This first request will start to establish the SpdySession. | 5733 // This first request will start to establish the SpdySession. |
| 5688 // Then we will start the second (MEDIUM priority) and then third | 5734 // Then we will start the second (MEDIUM priority) and then third |
| (...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6601 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { | 6647 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { |
| 6602 scoped_ptr<SSLSocketDataProvider> ssl_provider( | 6648 scoped_ptr<SSLSocketDataProvider> ssl_provider( |
| 6603 new SSLSocketDataProvider(ASYNC, OK)); | 6649 new SSLSocketDataProvider(ASYNC, OK)); |
| 6604 // Set to TLS_RSA_WITH_NULL_MD5 | 6650 // Set to TLS_RSA_WITH_NULL_MD5 |
| 6605 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); | 6651 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); |
| 6606 | 6652 |
| 6607 RunTLSUsageCheckTest(ssl_provider.Pass()); | 6653 RunTLSUsageCheckTest(ssl_provider.Pass()); |
| 6608 } | 6654 } |
| 6609 | 6655 |
| 6610 } // namespace net | 6656 } // namespace net |
| OLD | NEW |