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

Unified Diff: components/cronet/android/test/native_test_server.cc

Issue 2164863002: Fix CronetHttpURLConnectionTest#testServerHangsUp flake (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: self review Created 4 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 side-by-side diff with in-line comments
Download patch
Index: components/cronet/android/test/native_test_server.cc
diff --git a/components/cronet/android/test/native_test_server.cc b/components/cronet/android/test/native_test_server.cc
index 60bd3a0070f05ece18867b1c09476d101c118382..3f1b9c1a8222da2786f2d23554d2f7fe84364066 100644
--- a/components/cronet/android/test/native_test_server.cc
+++ b/components/cronet/android/test/native_test_server.cc
@@ -15,10 +15,12 @@
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/macros.h"
+#include "base/memory/ptr_util.h"
#include "base/path_service.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/test/test_support_android.h"
+#include "base/threading/thread_task_runner_handle.h"
#include "components/cronet/android/test/cronet_test_util.h"
#include "jni/NativeTestServer_jni.h"
#include "net/base/host_port_pair.h"
@@ -27,6 +29,7 @@
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "net/test/embedded_test_server/http_request.h"
#include "net/test/embedded_test_server/http_response.h"
+#include "net/test/embedded_test_server/request_handler_util.h"
#include "url/gurl.h"
namespace cronet {
@@ -38,6 +41,7 @@ const char kEchoHeaderPath[] = "/echo_header";
const char kEchoAllHeadersPath[] = "/echo_all_headers";
const char kEchoMethodPath[] = "/echo_method";
const char kRedirectToEchoBodyPath[] = "/redirect_to_echo_body";
+const char kInfiniteResponsePath[] = "/infinite_response";
// Path that advertises the dictionary passed in query params if client
// supports Sdch encoding. E.g. /sdch/index?q=LeQxM80O will make the server
// responds with "Get-Dictionary: /sdch/dict/LeQxM80O".
@@ -49,6 +53,32 @@ const char kSdchDictPath[] = "/sdch/dict/";
net::EmbeddedTestServer* g_test_server = nullptr;
+// A HttpResponse that is never ending.
+class InfiniteResponse : public net::test_server::BasicHttpResponse {
+ public:
+ InfiniteResponse() {}
+
+ void SendResponse(
+ const net::test_server::SendBytesCallback& send,
+ const net::test_server::SendCompleteCallback& done) override {
+ // Use am arbitrarily large content length so that the client will be
+ // expecting data.
+ send.Run("HTTP/1.1 200 OK\r\nContent-Length:100000000\r\n\r\n",
pauljensen 2016/07/20 17:40:23 Is there any way we can avoid this arbitrary numbe
xunjieli 2016/07/20 17:46:18 If we don't specify the Content-Length, client wil
pauljensen 2016/07/20 17:55:55 10^8 isn't really that big relative to the size of
xunjieli 2016/07/20 18:42:02 Done. Good point!
+ base::Bind(&InfiniteResponse::SendInfinite, send));
+ }
+
+ private:
+ // Keeps sending the word "echo" over and over again.
+ static void SendInfinite(const net::test_server::SendBytesCallback& send) {
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE,
+ base::Bind(send, "echo",
+ base::Bind(&InfiniteResponse::SendInfinite, send)));
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(InfiniteResponse);
+};
+
std::unique_ptr<net::test_server::RawHttpResponse> ConstructResponseBasedOnFile(
const base::FilePath& file_path) {
std::string file_contents;
@@ -161,6 +191,11 @@ std::unique_ptr<net::test_server::HttpResponse> SdchRequestHandler(
return std::unique_ptr<net::test_server::BasicHttpResponse>();
}
+std::unique_ptr<net::test_server::HttpResponse> HandleInfiniteRequest(
+ const net::test_server::HttpRequest& request) {
+ return base::WrapUnique(new InfiniteResponse);
+}
+
} // namespace
jboolean StartNativeTestServer(JNIEnv* env,
@@ -178,6 +213,9 @@ jboolean StartNativeTestServer(JNIEnv* env,
g_test_server = new net::EmbeddedTestServer();
g_test_server->RegisterRequestHandler(
base::Bind(&NativeTestServerRequestHandler));
+ g_test_server->RegisterDefaultHandler(
+ base::Bind(&net::test_server::HandlePrefixedRequest,
+ kInfiniteResponsePath, base::Bind(&HandleInfiniteRequest)));
g_test_server->RegisterRequestHandler(base::Bind(&SdchRequestHandler));
base::FilePath test_files_root(
base::android::ConvertJavaStringToUTF8(env, jtest_files_root));
@@ -259,6 +297,14 @@ ScopedJavaLocalRef<jstring> GetSdchURL(JNIEnv* env,
return base::android::ConvertUTF8ToJavaString(env, url);
}
+ScopedJavaLocalRef<jstring> GetInfiniteResponseURL(
+ JNIEnv* env,
+ const JavaParamRef<jclass>& jcaller) {
+ DCHECK(g_test_server);
+ GURL url = g_test_server->GetURL(kInfiniteResponsePath);
+ return base::android::ConvertUTF8ToJavaString(env, url.spec());
+}
+
ScopedJavaLocalRef<jstring> GetHostPort(JNIEnv* env,
const JavaParamRef<jclass>& jcaller) {
DCHECK(g_test_server);

Powered by Google App Engine
This is Rietveld 408576698