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/lazy_instance.h" |
10 #include "base/memory/ptr_util.h" | 11 #include "base/memory/ptr_util.h" |
| 12 #include "base/strings/string_number_conversions.h" |
11 #include "base/strings/string_util.h" | 13 #include "base/strings/string_util.h" |
12 #include "net/test/embedded_test_server/embedded_test_server.h" | 14 #include "net/test/embedded_test_server/embedded_test_server.h" |
13 #include "net/test/embedded_test_server/http_request.h" | 15 #include "net/test/embedded_test_server/http_request.h" |
14 #include "net/test/embedded_test_server/http_response.h" | 16 #include "net/test/embedded_test_server/http_response.h" |
15 | 17 |
16 namespace { | 18 namespace { |
17 | 19 |
18 const char kEchoHeaderPath[] = "/EchoHeader?"; | 20 const char kEchoHeaderPath[] = "/EchoHeader?"; |
19 const char kSetCookiePath[] = "/SetCookie?"; | 21 const char kSetCookiePath[] = "/SetCookie?"; |
| 22 const char kBigDataPath[] = "/BigData?"; |
20 | 23 |
21 std::unique_ptr<net::EmbeddedTestServer> g_test_server; | 24 std::unique_ptr<net::EmbeddedTestServer> g_test_server; |
| 25 base::LazyInstance<std::string>::Leaky g_big_data_body = |
| 26 LAZY_INSTANCE_INITIALIZER; |
22 | 27 |
23 std::unique_ptr<net::test_server::HttpResponse> EchoHeaderInRequest( | 28 std::unique_ptr<net::test_server::HttpResponse> EchoHeaderInRequest( |
24 const net::test_server::HttpRequest& request) { | 29 const net::test_server::HttpRequest& request) { |
25 std::string header_name; | 30 std::string header_name; |
26 std::string header_value; | 31 std::string header_value; |
27 DCHECK(base::StartsWith(request.relative_url, kEchoHeaderPath, | 32 DCHECK(base::StartsWith(request.relative_url, kEchoHeaderPath, |
28 base::CompareCase::INSENSITIVE_ASCII)); | 33 base::CompareCase::INSENSITIVE_ASCII)); |
29 | 34 |
30 header_name = request.relative_url.substr(strlen(kEchoHeaderPath)); | 35 header_name = request.relative_url.substr(strlen(kEchoHeaderPath)); |
31 auto it = request.headers.find(header_name); | 36 auto it = request.headers.find(header_name); |
32 if (it != request.headers.end()) | 37 if (it != request.headers.end()) |
33 header_value = it->second; | 38 header_value = it->second; |
34 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); | 39 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); |
35 http_response->set_content(header_value); | 40 http_response->set_content(header_value); |
36 return std::move(http_response); | 41 return std::move(http_response); |
37 } | 42 } |
38 | 43 |
| 44 std::unique_ptr<net::test_server::HttpResponse> ReturnBigDataInResponse( |
| 45 const net::test_server::HttpRequest& request) { |
| 46 std::string data_size_str; |
| 47 DCHECK(base::StartsWith(request.relative_url, kBigDataPath, |
| 48 base::CompareCase::INSENSITIVE_ASCII)); |
| 49 |
| 50 data_size_str = request.relative_url.substr(strlen(kBigDataPath)); |
| 51 int64_t data_size; |
| 52 DCHECK(base::StringToInt64(base::StringPiece(data_size_str), &data_size)); |
| 53 DCHECK(data_size == static_cast<int64_t>(g_big_data_body.Get().size())); |
| 54 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); |
| 55 http_response->set_content(g_big_data_body.Get()); |
| 56 return std::move(http_response); |
| 57 } |
| 58 |
39 std::unique_ptr<net::test_server::HttpResponse> SetAndEchoCookieInResponse( | 59 std::unique_ptr<net::test_server::HttpResponse> SetAndEchoCookieInResponse( |
40 const net::test_server::HttpRequest& request) { | 60 const net::test_server::HttpRequest& request) { |
41 std::string cookie_line; | 61 std::string cookie_line; |
42 DCHECK(base::StartsWith(request.relative_url, kSetCookiePath, | 62 DCHECK(base::StartsWith(request.relative_url, kSetCookiePath, |
43 base::CompareCase::INSENSITIVE_ASCII)); | 63 base::CompareCase::INSENSITIVE_ASCII)); |
44 cookie_line = request.relative_url.substr(strlen(kSetCookiePath)); | 64 cookie_line = request.relative_url.substr(strlen(kSetCookiePath)); |
45 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); | 65 auto http_response = base::MakeUnique<net::test_server::BasicHttpResponse>(); |
46 http_response->set_content(cookie_line); | 66 http_response->set_content(cookie_line); |
47 http_response->AddCustomHeader("Set-Cookie", cookie_line); | 67 http_response->AddCustomHeader("Set-Cookie", cookie_line); |
48 return std::move(http_response); | 68 return std::move(http_response); |
49 } | 69 } |
50 | 70 |
51 std::unique_ptr<net::test_server::HttpResponse> CronetTestRequestHandler( | 71 std::unique_ptr<net::test_server::HttpResponse> CronetTestRequestHandler( |
52 const net::test_server::HttpRequest& request) { | 72 const net::test_server::HttpRequest& request) { |
53 if (base::StartsWith(request.relative_url, kEchoHeaderPath, | 73 if (base::StartsWith(request.relative_url, kEchoHeaderPath, |
54 base::CompareCase::INSENSITIVE_ASCII)) { | 74 base::CompareCase::INSENSITIVE_ASCII)) { |
55 return EchoHeaderInRequest(request); | 75 return EchoHeaderInRequest(request); |
56 } | 76 } |
57 if (base::StartsWith(request.relative_url, kSetCookiePath, | 77 if (base::StartsWith(request.relative_url, kSetCookiePath, |
58 base::CompareCase::INSENSITIVE_ASCII)) { | 78 base::CompareCase::INSENSITIVE_ASCII)) { |
59 return SetAndEchoCookieInResponse(request); | 79 return SetAndEchoCookieInResponse(request); |
60 } | 80 } |
| 81 if (base::StartsWith(request.relative_url, kBigDataPath, |
| 82 base::CompareCase::INSENSITIVE_ASCII)) { |
| 83 return ReturnBigDataInResponse(request); |
| 84 } |
61 return base::MakeUnique<net::test_server::BasicHttpResponse>(); | 85 return base::MakeUnique<net::test_server::BasicHttpResponse>(); |
62 } | 86 } |
63 | 87 |
64 } // namespace | 88 } // namespace |
65 | 89 |
66 namespace cronet { | 90 namespace cronet { |
67 | 91 |
68 /* static */ | 92 /* static */ |
69 bool TestServer::Start() { | 93 bool TestServer::Start() { |
70 DCHECK(!g_test_server.get()); | 94 DCHECK(!g_test_server.get()); |
(...skipping 12 matching lines...) Expand all Loading... |
83 std::string TestServer::GetEchoHeaderURL(const std::string& header_name) { | 107 std::string TestServer::GetEchoHeaderURL(const std::string& header_name) { |
84 DCHECK(g_test_server); | 108 DCHECK(g_test_server); |
85 return g_test_server->GetURL(kEchoHeaderPath + header_name).spec(); | 109 return g_test_server->GetURL(kEchoHeaderPath + header_name).spec(); |
86 } | 110 } |
87 | 111 |
88 std::string TestServer::GetSetCookieURL(const std::string& cookie_line) { | 112 std::string TestServer::GetSetCookieURL(const std::string& cookie_line) { |
89 DCHECK(g_test_server); | 113 DCHECK(g_test_server); |
90 return g_test_server->GetURL(kSetCookiePath + cookie_line).spec(); | 114 return g_test_server->GetURL(kSetCookiePath + cookie_line).spec(); |
91 } | 115 } |
92 | 116 |
| 117 std::string TestServer::GetBigDataURL(long data_size) { |
| 118 DCHECK(g_test_server); |
| 119 g_big_data_body.Get() = std::string(data_size, 'c'); |
| 120 return g_test_server->GetURL(kBigDataPath + base::Int64ToString(data_size)) |
| 121 .spec(); |
| 122 } |
| 123 |
93 } // namespace cronet | 124 } // namespace cronet |
OLD | NEW |