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

Side by Side Diff: net/url_request/url_request_unittest.cc

Issue 155897: Add support to URLRequest for deferring redirects.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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/url_request/url_request_unittest.h" 5 #include "net/url_request/url_request_unittest.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include <windows.h> 10 #include <windows.h>
11 #include <shlobj.h> 11 #include <shlobj.h>
12 #elif defined(OS_LINUX) 12 #elif defined(OS_LINUX)
13 #include "base/nss_init.h" 13 #include "base/nss_init.h"
14 #endif 14 #endif
15 15
16 #include <algorithm> 16 #include <algorithm>
17 #include <string> 17 #include <string>
18 18
19 #include "base/file_util.h" 19 #include "base/file_util.h"
20 #include "base/message_loop.h" 20 #include "base/message_loop.h"
21 #include "base/path_service.h" 21 #include "base/path_service.h"
22 #include "base/process_util.h" 22 #include "base/process_util.h"
23 #include "base/string_piece.h" 23 #include "base/string_piece.h"
24 #include "base/string_util.h" 24 #include "base/string_util.h"
25 #include "net/base/cookie_monster.h" 25 #include "net/base/cookie_monster.h"
26 #include "net/base/load_flags.h" 26 #include "net/base/load_flags.h"
27 #include "net/base/net_errors.h" 27 #include "net/base/net_errors.h"
28 #include "net/base/net_module.h" 28 #include "net/base/net_module.h"
29 #include "net/base/net_util.h" 29 #include "net/base/net_util.h"
30 #include "net/base/upload_data.h"
30 #include "net/disk_cache/disk_cache.h" 31 #include "net/disk_cache/disk_cache.h"
31 #include "net/http/http_cache.h" 32 #include "net/http/http_cache.h"
32 #include "net/http/http_network_layer.h" 33 #include "net/http/http_network_layer.h"
33 #include "net/http/http_response_headers.h" 34 #include "net/http/http_response_headers.h"
34 #include "net/proxy/proxy_service.h" 35 #include "net/proxy/proxy_service.h"
35 #include "net/socket/ssl_test_util.h" 36 #include "net/socket/ssl_test_util.h"
36 #include "net/url_request/url_request.h" 37 #include "net/url_request/url_request.h"
37 #include "net/url_request/url_request_test_job.h" 38 #include "net/url_request/url_request_test_job.h"
38 #include "testing/gtest/include/gtest/gtest.h" 39 #include "testing/gtest/include/gtest/gtest.h"
39 #include "testing/platform_test.h" 40 #include "testing/platform_test.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 srand(seed); 94 srand(seed);
94 } 95 }
95 96
96 for (size_t i = 0; i < len; i++) { 97 for (size_t i = 0; i < len; i++) {
97 buffer[i] = static_cast<char>(rand()); 98 buffer[i] = static_cast<char>(rand());
98 if (!buffer[i]) 99 if (!buffer[i])
99 buffer[i] = 'g'; 100 buffer[i] = 'g';
100 } 101 }
101 } 102 }
102 103
104 scoped_refptr<net::UploadData> CreateSimpleUploadData(const char* data) {
105 scoped_refptr<net::UploadData> upload = new net::UploadData;
106 upload->AppendBytes(data, strlen(data));
107 return upload;
108 }
109
103 } // namespace 110 } // namespace
104 111
105 // Inherit PlatformTest since we require the autorelease pool on Mac OS X.f 112 // Inherit PlatformTest since we require the autorelease pool on Mac OS X.f
106 class URLRequestTest : public PlatformTest { 113 class URLRequestTest : public PlatformTest {
107 }; 114 };
108 115
109 TEST_F(URLRequestTest, ProxyTunnelRedirectTest) { 116 TEST_F(URLRequestTest, ProxyTunnelRedirectTest) {
110 // In this unit test, we're using the HTTPTestServer as a proxy server and 117 // In this unit test, we're using the HTTPTestServer as a proxy server and
111 // issuing a CONNECT request with the magic host name "www.redirect.com". 118 // issuing a CONNECT request with the magic host name "www.redirect.com".
112 // The HTTPTestServer will return a 302 response, which we should not 119 // The HTTPTestServer will return a 302 response, which we should not
(...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 req.Start(); 1071 req.Start();
1065 MessageLoop::current()->Run(); 1072 MessageLoop::current()->Run();
1066 1073
1067 EXPECT_EQ(1, d.response_started_count()); 1074 EXPECT_EQ(1, d.response_started_count());
1068 EXPECT_EQ(0, d.bytes_received()); 1075 EXPECT_EQ(0, d.bytes_received());
1069 EXPECT_FALSE(d.received_data_before_response()); 1076 EXPECT_FALSE(d.received_data_before_response());
1070 EXPECT_EQ(URLRequestStatus::CANCELED, req.status().status()); 1077 EXPECT_EQ(URLRequestStatus::CANCELED, req.status().status());
1071 } 1078 }
1072 } 1079 }
1073 1080
1081 TEST_F(URLRequestTest, DeferredRedirect) {
1082 scoped_refptr<HTTPTestServer> server =
1083 HTTPTestServer::CreateServer(L"net/data/url_request_unittest", NULL);
1084 ASSERT_TRUE(NULL != server.get());
1085 TestDelegate d;
1086 {
1087 d.set_quit_on_redirect(true);
1088 TestURLRequest req(server->TestServerPage(
1089 "files/redirect-test.html"), &d);
1090 req.Start();
1091 MessageLoop::current()->Run();
1092
1093 EXPECT_EQ(1, d.received_redirect_count());
1094
1095 req.FollowDeferredRedirect();
1096 MessageLoop::current()->Run();
1097
1098 EXPECT_EQ(1, d.response_started_count());
1099 EXPECT_FALSE(d.received_data_before_response());
1100 EXPECT_EQ(URLRequestStatus::SUCCESS, req.status().status());
1101
1102 FilePath path;
1103 PathService::Get(base::DIR_SOURCE_ROOT, &path);
1104 path = path.Append(FILE_PATH_LITERAL("net"));
1105 path = path.Append(FILE_PATH_LITERAL("data"));
1106 path = path.Append(FILE_PATH_LITERAL("url_request_unittest"));
1107 path = path.Append(FILE_PATH_LITERAL("with-headers.html"));
1108
1109 std::string contents;
1110 EXPECT_TRUE(file_util::ReadFileToString(path, &contents));
1111 EXPECT_EQ(contents, d.data_received());
1112 }
1113 }
1114
1115 TEST_F(URLRequestTest, CancelDeferredRedirect) {
1116 scoped_refptr<HTTPTestServer> server =
1117 HTTPTestServer::CreateServer(L"net/data/url_request_unittest", NULL);
1118 ASSERT_TRUE(NULL != server.get());
1119 TestDelegate d;
1120 {
1121 d.set_quit_on_redirect(true);
1122 TestURLRequest req(server->TestServerPage(
1123 "files/redirect-test.html"), &d);
1124 req.Start();
1125 MessageLoop::current()->Run();
1126
1127 EXPECT_EQ(1, d.received_redirect_count());
1128
1129 req.Cancel();
1130 MessageLoop::current()->Run();
1131
1132 EXPECT_EQ(1, d.response_started_count());
1133 EXPECT_EQ(0, d.bytes_received());
1134 EXPECT_FALSE(d.received_data_before_response());
1135 EXPECT_EQ(URLRequestStatus::CANCELED, req.status().status());
1136 }
1137 }
1138
1074 TEST_F(URLRequestTest, VaryHeader) { 1139 TEST_F(URLRequestTest, VaryHeader) {
1075 scoped_refptr<HTTPTestServer> server = 1140 scoped_refptr<HTTPTestServer> server =
1076 HTTPTestServer::CreateServer(L"net/data/url_request_unittest", NULL); 1141 HTTPTestServer::CreateServer(L"net/data/url_request_unittest", NULL);
1077 ASSERT_TRUE(NULL != server.get()); 1142 ASSERT_TRUE(NULL != server.get());
1078 1143
1079 scoped_refptr<URLRequestContext> context = new URLRequestHttpCacheContext(); 1144 scoped_refptr<URLRequestContext> context = new URLRequestHttpCacheContext();
1080 1145
1081 Time response_time; 1146 Time response_time;
1082 1147
1083 // populate the cache 1148 // populate the cache
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1229 EXPECT_TRUE(d.data_received().find("Cookie: got_challenged=true") 1294 EXPECT_TRUE(d.data_received().find("Cookie: got_challenged=true")
1230 != std::string::npos); 1295 != std::string::npos);
1231 } 1296 }
1232 } 1297 }
1233 1298
1234 // In this test, we do a POST which the server will 302 redirect. 1299 // In this test, we do a POST which the server will 302 redirect.
1235 // The subsequent transaction should use GET, and should not send the 1300 // The subsequent transaction should use GET, and should not send the
1236 // Content-Type header. 1301 // Content-Type header.
1237 // http://code.google.com/p/chromium/issues/detail?id=843 1302 // http://code.google.com/p/chromium/issues/detail?id=843
1238 TEST_F(URLRequestTest, Post302RedirectGet) { 1303 TEST_F(URLRequestTest, Post302RedirectGet) {
1304 const char kData[] = "hello world";
1239 scoped_refptr<HTTPTestServer> server = 1305 scoped_refptr<HTTPTestServer> server =
1240 HTTPTestServer::CreateServer(L"net/data/url_request_unittest", NULL); 1306 HTTPTestServer::CreateServer(L"net/data/url_request_unittest", NULL);
1241 ASSERT_TRUE(NULL != server.get()); 1307 ASSERT_TRUE(NULL != server.get());
1242 TestDelegate d; 1308 TestDelegate d;
1243 TestURLRequest req(server->TestServerPage("files/redirect-to-echoall"), &d); 1309 TestURLRequest req(server->TestServerPage("files/redirect-to-echoall"), &d);
1244 req.set_method("POST"); 1310 req.set_method("POST");
1311 req.set_upload(CreateSimpleUploadData(kData));
1245 1312
1246 // Set headers (some of which are specific to the POST). 1313 // Set headers (some of which are specific to the POST).
1247 // ("Content-Length: 10" is just a junk value to make sure it gets stripped).
1248 req.SetExtraRequestHeaders( 1314 req.SetExtraRequestHeaders(
1249 "Content-Type: multipart/form-data; " 1315 "Content-Type: multipart/form-data; "
1250 "boundary=----WebKitFormBoundaryAADeAA+NAAWMAAwZ\r\n" 1316 "boundary=----WebKitFormBoundaryAADeAA+NAAWMAAwZ\r\n"
1251 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9," 1317 "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,"
1252 "text/plain;q=0.8,image/png,*/*;q=0.5\r\n" 1318 "text/plain;q=0.8,image/png,*/*;q=0.5\r\n"
1253 "Accept-Language: en-US,en\r\n" 1319 "Accept-Language: en-US,en\r\n"
1254 "Accept-Charset: ISO-8859-1,*,utf-8\r\n" 1320 "Accept-Charset: ISO-8859-1,*,utf-8\r\n"
1255 "Content-Length: 10\r\n" 1321 "Content-Length: 11\r\n"
1256 "Origin: http://localhost:1337/"); 1322 "Origin: http://localhost:1337/");
1257 req.Start(); 1323 req.Start();
1258 MessageLoop::current()->Run(); 1324 MessageLoop::current()->Run();
1259 1325
1260 std::string mime_type; 1326 std::string mime_type;
1261 req.GetMimeType(&mime_type); 1327 req.GetMimeType(&mime_type);
1262 EXPECT_EQ("text/html", mime_type); 1328 EXPECT_EQ("text/html", mime_type);
1263 1329
1264 const std::string& data = d.data_received(); 1330 const std::string& data = d.data_received();
1265 1331
1266 // Check that the post-specific headers were stripped: 1332 // Check that the post-specific headers were stripped:
1267 EXPECT_FALSE(ContainsString(data, "Content-Length:")); 1333 EXPECT_FALSE(ContainsString(data, "Content-Length:"));
1268 EXPECT_FALSE(ContainsString(data, "Content-Type:")); 1334 EXPECT_FALSE(ContainsString(data, "Content-Type:"));
1269 EXPECT_FALSE(ContainsString(data, "Origin:")); 1335 EXPECT_FALSE(ContainsString(data, "Origin:"));
1270 1336
1271 // These extra request headers should not have been stripped. 1337 // These extra request headers should not have been stripped.
1272 EXPECT_TRUE(ContainsString(data, "Accept:")); 1338 EXPECT_TRUE(ContainsString(data, "Accept:"));
1273 EXPECT_TRUE(ContainsString(data, "Accept-Language:")); 1339 EXPECT_TRUE(ContainsString(data, "Accept-Language:"));
1274 EXPECT_TRUE(ContainsString(data, "Accept-Charset:")); 1340 EXPECT_TRUE(ContainsString(data, "Accept-Charset:"));
1275 } 1341 }
1276 1342
1277 TEST_F(URLRequestTest, Post307RedirectPost) { 1343 // TODO(darin): Re-enable this test once bug 16832 is fixed.
1344 TEST_F(URLRequestTest, DISABLED_Post307RedirectPost) {
1345 const char kData[] = "hello world";
1278 scoped_refptr<HTTPTestServer> server = 1346 scoped_refptr<HTTPTestServer> server =
1279 HTTPTestServer::CreateServer(L"net/data/url_request_unittest", NULL); 1347 HTTPTestServer::CreateServer(L"net/data/url_request_unittest", NULL);
1280 ASSERT_TRUE(NULL != server.get()); 1348 ASSERT_TRUE(NULL != server.get());
1281 TestDelegate d; 1349 TestDelegate d;
1282 TestURLRequest req(server->TestServerPage("files/redirect307-to-echoall"), 1350 TestURLRequest req(server->TestServerPage("files/redirect307-to-echo"),
1283 &d); 1351 &d);
1284 req.set_method("POST"); 1352 req.set_method("POST");
1353 req.set_upload(CreateSimpleUploadData(kData).get());
1354 req.SetExtraRequestHeaders(
1355 "Content-Length: " + UintToString(sizeof(kData) - 1));
1285 req.Start(); 1356 req.Start();
1286 MessageLoop::current()->Run(); 1357 MessageLoop::current()->Run();
1287 EXPECT_EQ(req.method(), "POST"); 1358 EXPECT_EQ("POST", req.method());
1359 EXPECT_EQ(kData, d.data_received());
1288 } 1360 }
1289 1361
1290 // Custom URLRequestJobs for use with interceptor tests 1362 // Custom URLRequestJobs for use with interceptor tests
1291 class RestartTestJob : public URLRequestTestJob { 1363 class RestartTestJob : public URLRequestTestJob {
1292 public: 1364 public:
1293 explicit RestartTestJob(URLRequest* request) 1365 explicit RestartTestJob(URLRequest* request)
1294 : URLRequestTestJob(request, true) {} 1366 : URLRequestTestJob(request, true) {}
1295 protected: 1367 protected:
1296 virtual void StartAsync() { 1368 virtual void StartAsync() {
1297 this->NotifyRestartRequired(); 1369 this->NotifyRestartRequired();
(...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after
1839 1911
1840 int64 file_size = 0; 1912 int64 file_size = 0;
1841 file_util::GetFileSize(app_path, &file_size); 1913 file_util::GetFileSize(app_path, &file_size);
1842 1914
1843 EXPECT_TRUE(!r.is_pending()); 1915 EXPECT_TRUE(!r.is_pending());
1844 EXPECT_EQ(1, d.response_started_count()); 1916 EXPECT_EQ(1, d.response_started_count());
1845 EXPECT_FALSE(d.received_data_before_response()); 1917 EXPECT_FALSE(d.received_data_before_response());
1846 EXPECT_EQ(d.bytes_received(), 0); 1918 EXPECT_EQ(d.bytes_received(), 0);
1847 } 1919 }
1848 } 1920 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698