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

Side by Side Diff: net/test/embedded_test_server/http_request_unittest.cc

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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 | « net/test/embedded_test_server/http_request.cc ('k') | net/test/run_all_unittests.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 "net/test/embedded_test_server/http_request.h" 5 #include "net/test/embedded_test_server/http_request.h"
6 6
7 #include "base/memory/scoped_ptr.h"
7 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
8 9
9 namespace net { 10 namespace net {
10 namespace test_server { 11 namespace test_server {
11 12
12 TEST(HttpRequestTest, ParseRequest) { 13 TEST(HttpRequestTest, ParseRequest) {
13 HttpRequestParser parser; 14 HttpRequestParser parser;
14 15
15 // Process request in chunks to check if the parser deals with border cases. 16 // Process request in chunks to check if the parser deals with border cases.
16 // Also, check multi-line headers as well as multiple requests in the same 17 // Also, check multi-line headers as well as multiple requests in the same
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 parser.ProcessChunk("Content-Length: 0\r\n\r\n"); 70 parser.ProcessChunk("Content-Length: 0\r\n\r\n");
70 ASSERT_EQ(HttpRequestParser::ACCEPTED, parser.ParseRequest()); 71 ASSERT_EQ(HttpRequestParser::ACCEPTED, parser.ParseRequest());
71 72
72 scoped_ptr<HttpRequest> request = parser.GetRequest(); 73 scoped_ptr<HttpRequest> request = parser.GetRequest();
73 EXPECT_EQ("", request->content); 74 EXPECT_EQ("", request->content);
74 EXPECT_TRUE(request->has_content); 75 EXPECT_TRUE(request->has_content);
75 EXPECT_EQ(1u, request->headers.count("Content-Length")); 76 EXPECT_EQ(1u, request->headers.count("Content-Length"));
76 EXPECT_EQ("0", request->headers["Content-Length"]); 77 EXPECT_EQ("0", request->headers["Content-Length"]);
77 } 78 }
78 79
80 TEST(HttpRequestTest, ParseRequestWithChunkedBody) {
81 HttpRequestParser parser;
82
83 parser.ProcessChunk("POST /foobar.html HTTP/1.1\r\n");
84 parser.ProcessChunk("Transfer-Encoding: chunked\r\n\r\n");
85 parser.ProcessChunk("5\r\nhello\r\n");
86 parser.ProcessChunk("1\r\n \r\n");
87 parser.ProcessChunk("5\r\nworld\r\n");
88 parser.ProcessChunk("0\r\n\r\n");
89 ASSERT_EQ(HttpRequestParser::ACCEPTED, parser.ParseRequest());
90
91 scoped_ptr<HttpRequest> request = parser.GetRequest();
92 EXPECT_EQ("hello world", request->content);
93 EXPECT_TRUE(request->has_content);
94 EXPECT_EQ(1u, request->headers.count("Transfer-Encoding"));
95 EXPECT_EQ("chunked", request->headers["Transfer-Encoding"]);
96 }
97
98 TEST(HttpRequestTest, ParseRequestWithChunkedBodySlow) {
99 HttpRequestParser parser;
100
101 parser.ProcessChunk("POST /foobar.html HTTP/1.1\r\n");
102 parser.ProcessChunk("Transfer-Encoding: chunked\r\n\r\n");
103 std::string chunked_body = "5\r\nhello\r\n0\r\n\r\n";
104
105 // Send one character at a time, and make the parser parse the request.
106 for (size_t i = 0; i < chunked_body.size(); i++) {
107 parser.ProcessChunk(chunked_body.substr(i, 1));
108 // Except for the last pass, ParseRequest() should give WAITING.
109 if (i != chunked_body.size() - 1) {
110 ASSERT_EQ(HttpRequestParser::WAITING, parser.ParseRequest());
111 }
112 }
113 // All chunked data has been sent, the last ParseRequest should give ACCEPTED.
114 ASSERT_EQ(HttpRequestParser::ACCEPTED, parser.ParseRequest());
115 scoped_ptr<HttpRequest> request = parser.GetRequest();
116 EXPECT_EQ("hello", request->content);
117 EXPECT_TRUE(request->has_content);
118 EXPECT_EQ(1u, request->headers.count("Transfer-Encoding"));
119 EXPECT_EQ("chunked", request->headers["Transfer-Encoding"]);
120 }
121
79 TEST(HttpRequestTest, ParseRequestWithoutBody) { 122 TEST(HttpRequestTest, ParseRequestWithoutBody) {
80 HttpRequestParser parser; 123 HttpRequestParser parser;
81 124
82 parser.ProcessChunk("POST /foobar.html HTTP/1.1\r\n\r\n"); 125 parser.ProcessChunk("POST /foobar.html HTTP/1.1\r\n\r\n");
83 ASSERT_EQ(HttpRequestParser::ACCEPTED, parser.ParseRequest()); 126 ASSERT_EQ(HttpRequestParser::ACCEPTED, parser.ParseRequest());
84 127
85 scoped_ptr<HttpRequest> request = parser.GetRequest(); 128 scoped_ptr<HttpRequest> request = parser.GetRequest();
86 EXPECT_EQ("", request->content); 129 EXPECT_EQ("", request->content);
87 EXPECT_FALSE(request->has_content); 130 EXPECT_FALSE(request->has_content);
88 } 131 }
89 132
90 TEST(HttpRequestTest, ParseGet) { 133 TEST(HttpRequestTest, ParseGet) {
91 HttpRequestParser parser; 134 HttpRequestParser parser;
92 135
93 parser.ProcessChunk("GET /foobar.html HTTP/1.1\r\n\r\n"); 136 parser.ProcessChunk("GET /foobar.html HTTP/1.1\r\n\r\n");
94 ASSERT_EQ(HttpRequestParser::ACCEPTED, parser.ParseRequest()); 137 ASSERT_EQ(HttpRequestParser::ACCEPTED, parser.ParseRequest());
95 138
96 scoped_ptr<HttpRequest> request = parser.GetRequest(); 139 scoped_ptr<HttpRequest> request = parser.GetRequest();
97 EXPECT_EQ("/foobar.html", request->relative_url); 140 EXPECT_EQ("/foobar.html", request->relative_url);
98 EXPECT_EQ("GET", request->method_string); 141 EXPECT_EQ("GET", request->method_string);
99 EXPECT_EQ(METHOD_GET, request->method); 142 EXPECT_EQ(METHOD_GET, request->method);
100 EXPECT_EQ("", request->content); 143 EXPECT_EQ("", request->content);
101 EXPECT_FALSE(request->has_content); 144 EXPECT_FALSE(request->has_content);
102 } 145 }
103 146
104 } // namespace test_server 147 } // namespace test_server
105 } // namespace net 148 } // namespace net
OLDNEW
« no previous file with comments | « net/test/embedded_test_server/http_request.cc ('k') | net/test/run_all_unittests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698