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 std::string data_size_str = request.relative_url.substr(strlen(kBigDataPath)); |
| 51 int64_t data_size; |
| 52 CHECK(base::StringToInt64(base::StringPiece(data_size_str), &data_size)); |
| 53 CHECK(data_size == static_cast<int64_t>(g_big_data_body.Get().size())); |
| 54 return base::MakeUnique<net::test_server::RawHttpResponse>( |
| 55 std::string(), g_big_data_body.Get()); |
| 56 } |
| 57 |
39 std::unique_ptr<net::test_server::HttpResponse> SetAndEchoCookieInResponse( | 58 std::unique_ptr<net::test_server::HttpResponse> SetAndEchoCookieInResponse( |
40 const net::test_server::HttpRequest& request) { | 59 const net::test_server::HttpRequest& request) { |
41 std::string cookie_line; | 60 std::string cookie_line; |
42 DCHECK(base::StartsWith(request.relative_url, kSetCookiePath, | 61 DCHECK(base::StartsWith(request.relative_url, kSetCookiePath, |
43 base::CompareCase::INSENSITIVE_ASCII)); | 62 base::CompareCase::INSENSITIVE_ASCII)); |
44 cookie_line = request.relative_url.substr(strlen(kSetCookiePath)); | 63 cookie_line = request.relative_url.substr(strlen(kSetCookiePath)); |
45 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); | 64 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); |
46 http_response->set_content(cookie_line); | 65 http_response->set_content(cookie_line); |
47 http_response->AddCustomHeader("Set-Cookie", cookie_line); | 66 http_response->AddCustomHeader("Set-Cookie", cookie_line); |
48 return std::move(http_response); | 67 return std::move(http_response); |
49 } | 68 } |
50 | 69 |
51 std::unique_ptr<net::test_server::HttpResponse> CronetTestRequestHandler( | 70 std::unique_ptr<net::test_server::HttpResponse> CronetTestRequestHandler( |
52 const net::test_server::HttpRequest& request) { | 71 const net::test_server::HttpRequest& request) { |
53 if (base::StartsWith(request.relative_url, kEchoHeaderPath, | 72 if (base::StartsWith(request.relative_url, kEchoHeaderPath, |
54 base::CompareCase::INSENSITIVE_ASCII)) { | 73 base::CompareCase::INSENSITIVE_ASCII)) { |
55 return EchoHeaderInRequest(request); | 74 return EchoHeaderInRequest(request); |
56 } | 75 } |
57 if (base::StartsWith(request.relative_url, kSetCookiePath, | 76 if (base::StartsWith(request.relative_url, kSetCookiePath, |
58 base::CompareCase::INSENSITIVE_ASCII)) { | 77 base::CompareCase::INSENSITIVE_ASCII)) { |
59 return SetAndEchoCookieInResponse(request); | 78 return SetAndEchoCookieInResponse(request); |
60 } | 79 } |
| 80 if (base::StartsWith(request.relative_url, kBigDataPath, |
| 81 base::CompareCase::INSENSITIVE_ASCII)) { |
| 82 return ReturnBigDataInResponse(request); |
| 83 } |
61 return base::MakeUnique<net::test_server::BasicHttpResponse>(); | 84 return base::MakeUnique<net::test_server::BasicHttpResponse>(); |
62 } | 85 } |
63 | 86 |
64 } // namespace | 87 } // namespace |
65 | 88 |
66 namespace cronet { | 89 namespace cronet { |
67 | 90 |
68 /* static */ | 91 /* static */ |
69 bool TestServer::Start() { | 92 bool TestServer::Start() { |
70 DCHECK(!g_test_server.get()); | 93 DCHECK(!g_test_server.get()); |
(...skipping 12 matching lines...) Expand all Loading... |
83 std::string TestServer::GetEchoHeaderURL(const std::string& header_name) { | 106 std::string TestServer::GetEchoHeaderURL(const std::string& header_name) { |
84 DCHECK(g_test_server); | 107 DCHECK(g_test_server); |
85 return g_test_server->GetURL(kEchoHeaderPath + header_name).spec(); | 108 return g_test_server->GetURL(kEchoHeaderPath + header_name).spec(); |
86 } | 109 } |
87 | 110 |
88 std::string TestServer::GetSetCookieURL(const std::string& cookie_line) { | 111 std::string TestServer::GetSetCookieURL(const std::string& cookie_line) { |
89 DCHECK(g_test_server); | 112 DCHECK(g_test_server); |
90 return g_test_server->GetURL(kSetCookiePath + cookie_line).spec(); | 113 return g_test_server->GetURL(kSetCookiePath + cookie_line).spec(); |
91 } | 114 } |
92 | 115 |
| 116 std::string TestServer::PrepareBigDataURL(long data_size) { |
| 117 DCHECK(g_test_server); |
| 118 DCHECK(g_big_data_body.Get().empty()); |
| 119 // Response line with headers. |
| 120 std::string response_builder; |
| 121 base::StringAppendF(&response_builder, "HTTP/1.1 200 OK\r\n"); |
| 122 base::StringAppendF(&response_builder, "Content-Length: %" PRIuS "\r\n", |
| 123 data_size); |
| 124 base::StringAppendF(&response_builder, "\r\n"); |
| 125 response_builder += std::string(data_size, 'c'); |
| 126 g_big_data_body.Get() = response_builder; |
| 127 return g_test_server |
| 128 ->GetURL(kBigDataPath + base::Int64ToString(response_builder.size())) |
| 129 .spec(); |
| 130 } |
| 131 |
| 132 void TestServer::ReleaseBigDataURL() { |
| 133 DCHECK(!g_big_data_body.Get().empty()); |
| 134 g_big_data_body.Get() = std::string(); |
| 135 } |
| 136 |
93 } // namespace cronet | 137 } // namespace cronet |
OLD | NEW |