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 |