Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/cronet/ios/test/test_server.h" | 5 #include "components/cronet/ios/test/test_server.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/format_macros.h" | |
| 11 #include "base/lazy_instance.h" | |
| 10 #include "base/memory/ptr_util.h" | 12 #include "base/memory/ptr_util.h" |
| 13 #include "base/strings/string_number_conversions.h" | |
| 11 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
| 15 #include "base/strings/stringprintf.h" | |
| 12 #include "net/test/embedded_test_server/embedded_test_server.h" | 16 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 13 #include "net/test/embedded_test_server/http_request.h" | 17 #include "net/test/embedded_test_server/http_request.h" |
| 14 #include "net/test/embedded_test_server/http_response.h" | 18 #include "net/test/embedded_test_server/http_response.h" |
| 15 | 19 |
| 16 namespace { | 20 namespace { |
| 17 | 21 |
| 18 const char kEchoHeaderPath[] = "/EchoHeader?"; | 22 const char kEchoHeaderPath[] = "/EchoHeader?"; |
| 19 const char kSetCookiePath[] = "/SetCookie?"; | 23 const char kSetCookiePath[] = "/SetCookie?"; |
| 24 const char kBigDataPath[] = "/BigData"; | |
| 20 | 25 |
| 21 std::unique_ptr<net::EmbeddedTestServer> g_test_server; | 26 std::unique_ptr<net::EmbeddedTestServer> g_test_server; |
| 27 base::LazyInstance<std::string>::Leaky g_big_data_body = | |
| 28 LAZY_INSTANCE_INITIALIZER; | |
| 22 | 29 |
| 23 std::unique_ptr<net::test_server::HttpResponse> EchoHeaderInRequest( | 30 std::unique_ptr<net::test_server::HttpResponse> EchoHeaderInRequest( |
| 24 const net::test_server::HttpRequest& request) { | 31 const net::test_server::HttpRequest& request) { |
| 25 std::string header_name; | 32 std::string header_name; |
| 26 std::string header_value; | 33 std::string header_value; |
| 27 DCHECK(base::StartsWith(request.relative_url, kEchoHeaderPath, | 34 DCHECK(base::StartsWith(request.relative_url, kEchoHeaderPath, |
| 28 base::CompareCase::INSENSITIVE_ASCII)); | 35 base::CompareCase::INSENSITIVE_ASCII)); |
| 29 | 36 |
| 30 header_name = request.relative_url.substr(strlen(kEchoHeaderPath)); | 37 header_name = request.relative_url.substr(strlen(kEchoHeaderPath)); |
| 31 auto it = request.headers.find(header_name); | 38 auto it = request.headers.find(header_name); |
| 32 if (it != request.headers.end()) | 39 if (it != request.headers.end()) |
| 33 header_value = it->second; | 40 header_value = it->second; |
| 34 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); | 41 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); |
| 35 http_response->set_content(header_value); | 42 http_response->set_content(header_value); |
| 36 return std::move(http_response); | 43 return std::move(http_response); |
| 37 } | 44 } |
| 38 | 45 |
| 46 std::unique_ptr<net::test_server::HttpResponse> ReturnBigDataInResponse( | |
| 47 const net::test_server::HttpRequest& request) { | |
| 48 DCHECK(base::StartsWith(request.relative_url, kBigDataPath, | |
| 49 base::CompareCase::INSENSITIVE_ASCII)); | |
| 50 return base::MakeUnique<net::test_server::RawHttpResponse>( | |
| 51 std::string(), g_big_data_body.Get()); | |
| 52 } | |
| 53 | |
| 39 std::unique_ptr<net::test_server::HttpResponse> SetAndEchoCookieInResponse( | 54 std::unique_ptr<net::test_server::HttpResponse> SetAndEchoCookieInResponse( |
| 40 const net::test_server::HttpRequest& request) { | 55 const net::test_server::HttpRequest& request) { |
| 41 std::string cookie_line; | 56 std::string cookie_line; |
| 42 DCHECK(base::StartsWith(request.relative_url, kSetCookiePath, | 57 DCHECK(base::StartsWith(request.relative_url, kSetCookiePath, |
| 43 base::CompareCase::INSENSITIVE_ASCII)); | 58 base::CompareCase::INSENSITIVE_ASCII)); |
| 44 cookie_line = request.relative_url.substr(strlen(kSetCookiePath)); | 59 cookie_line = request.relative_url.substr(strlen(kSetCookiePath)); |
| 45 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); | 60 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); |
| 46 http_response->set_content(cookie_line); | 61 http_response->set_content(cookie_line); |
| 47 http_response->AddCustomHeader("Set-Cookie", cookie_line); | 62 http_response->AddCustomHeader("Set-Cookie", cookie_line); |
| 48 return std::move(http_response); | 63 return std::move(http_response); |
| 49 } | 64 } |
| 50 | 65 |
| 51 std::unique_ptr<net::test_server::HttpResponse> CronetTestRequestHandler( | 66 std::unique_ptr<net::test_server::HttpResponse> CronetTestRequestHandler( |
| 52 const net::test_server::HttpRequest& request) { | 67 const net::test_server::HttpRequest& request) { |
| 53 if (base::StartsWith(request.relative_url, kEchoHeaderPath, | 68 if (base::StartsWith(request.relative_url, kEchoHeaderPath, |
| 54 base::CompareCase::INSENSITIVE_ASCII)) { | 69 base::CompareCase::INSENSITIVE_ASCII)) { |
| 55 return EchoHeaderInRequest(request); | 70 return EchoHeaderInRequest(request); |
| 56 } | 71 } |
| 57 if (base::StartsWith(request.relative_url, kSetCookiePath, | 72 if (base::StartsWith(request.relative_url, kSetCookiePath, |
| 58 base::CompareCase::INSENSITIVE_ASCII)) { | 73 base::CompareCase::INSENSITIVE_ASCII)) { |
| 59 return SetAndEchoCookieInResponse(request); | 74 return SetAndEchoCookieInResponse(request); |
| 60 } | 75 } |
| 76 if (base::StartsWith(request.relative_url, kBigDataPath, | |
| 77 base::CompareCase::INSENSITIVE_ASCII)) { | |
| 78 return ReturnBigDataInResponse(request); | |
| 79 } | |
| 61 return base::MakeUnique<net::test_server::BasicHttpResponse>(); | 80 return base::MakeUnique<net::test_server::BasicHttpResponse>(); |
| 62 } | 81 } |
| 63 | 82 |
| 64 } // namespace | 83 } // namespace |
| 65 | 84 |
| 66 namespace cronet { | 85 namespace cronet { |
| 67 | 86 |
| 68 /* static */ | 87 /* static */ |
| 69 bool TestServer::Start() { | 88 bool TestServer::Start() { |
| 70 DCHECK(!g_test_server.get()); | 89 DCHECK(!g_test_server.get()); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 83 std::string TestServer::GetEchoHeaderURL(const std::string& header_name) { | 102 std::string TestServer::GetEchoHeaderURL(const std::string& header_name) { |
| 84 DCHECK(g_test_server); | 103 DCHECK(g_test_server); |
| 85 return g_test_server->GetURL(kEchoHeaderPath + header_name).spec(); | 104 return g_test_server->GetURL(kEchoHeaderPath + header_name).spec(); |
| 86 } | 105 } |
| 87 | 106 |
| 88 std::string TestServer::GetSetCookieURL(const std::string& cookie_line) { | 107 std::string TestServer::GetSetCookieURL(const std::string& cookie_line) { |
| 89 DCHECK(g_test_server); | 108 DCHECK(g_test_server); |
| 90 return g_test_server->GetURL(kSetCookiePath + cookie_line).spec(); | 109 return g_test_server->GetURL(kSetCookiePath + cookie_line).spec(); |
| 91 } | 110 } |
| 92 | 111 |
| 112 std::string TestServer::PrepareBigDataURL(long data_size) { | |
| 113 DCHECK(g_test_server); | |
| 114 // Response line with headers. | |
|
kapishnikov
2017/04/19 18:19:01
Since g_big_data_body is global, can we add a chec
mef
2017/04/19 19:04:48
Done.
| |
| 115 std::string response_builder; | |
| 116 base::StringAppendF(&response_builder, "HTTP/1.1 200 OK\r\n"); | |
| 117 base::StringAppendF(&response_builder, "Content-Length: %" PRIuS "\r\n", | |
| 118 data_size); | |
| 119 base::StringAppendF(&response_builder, "\r\n"); | |
| 120 response_builder += std::string(data_size, 'c'); | |
| 121 g_big_data_body.Get() = response_builder; | |
| 122 return g_test_server->GetURL(kBigDataPath).spec(); | |
| 123 } | |
| 124 | |
| 93 } // namespace cronet | 125 } // namespace cronet |
| OLD | NEW |