// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.net;
import android.content.Context;
import org.jni_zero.JNINamespace;
import org.jni_zero.NativeMethods;
import org.chromium.base.test.util.UrlUtils;
import org.chromium.net.test.ServerCertificate;
/**
* Wrapper class to start an in-process native test server, and get URLs needed to talk to it.
*
* <p>NativeTestServer only supports HTTP/1.
*/
@JNINamespace("cronet")
public final class NativeTestServer {
// This variable contains the response body of a request to getSuccessURL().
public static final String SUCCESS_BODY = "this is a text file\n";
public static boolean startNativeTestServer(Context context) {
TestFilesInstaller.installIfNeeded(context);
return NativeTestServerJni.get()
.startNativeTestServer(
TestFilesInstaller.getInstalledPath(context),
UrlUtils.getIsolatedTestRoot(),
false, // useHttps
ServerCertificate.CERT_OK);
}
public static boolean startNativeTestServerWithHTTPS(
Context context, @ServerCertificate int serverCertificate) {
TestFilesInstaller.installIfNeeded(context);
return NativeTestServerJni.get()
.startNativeTestServer(
TestFilesInstaller.getInstalledPath(context),
UrlUtils.getIsolatedTestRoot(),
true, // useHttps
serverCertificate);
}
public static void shutdownNativeTestServer() {
NativeTestServerJni.get().shutdownNativeTestServer();
}
public static String getEchoBodyURL() {
return NativeTestServerJni.get().getEchoBodyURL();
}
public static String getEchoHeaderURL(String header) {
return NativeTestServerJni.get().getEchoHeaderURL(header);
}
public static String getEchoAllHeadersURL() {
return NativeTestServerJni.get().getEchoAllHeadersURL();
}
public static String getEchoMethodURL() {
return NativeTestServerJni.get().getEchoMethodURL();
}
public static String getRedirectToEchoBody() {
return NativeTestServerJni.get().getRedirectToEchoBody();
}
public static String getFileURL(String filePath) {
return NativeTestServerJni.get().getFileURL(filePath);
}
// Returns a URL that the server will return an Exabyte of data
public static String getExabyteResponseURL() {
return NativeTestServerJni.get().getExabyteResponseURL();
}
// The following URLs will make NativeTestServer serve a response based on
// the contents of the corresponding file and its mock-http-headers file.
public static String getSuccessURL() {
return NativeTestServerJni.get().getFileURL("/success.txt");
}
public static String getRedirectURL() {
return NativeTestServerJni.get().getFileURL("/redirect.html");
}
public static String getMultiRedirectURL() {
return NativeTestServerJni.get().getFileURL("/multiredirect.html");
}
public static String getNotFoundURL() {
return NativeTestServerJni.get().getFileURL("/notfound.html");
}
public static String getServerErrorURL() {
return NativeTestServerJni.get().getFileURL("/server_error.txt");
}
public static int getPort() {
return NativeTestServerJni.get().getPort();
}
public static String getHostPort() {
return NativeTestServerJni.get().getHostPort();
}
@NativeMethods("cronet_tests")
interface Natives {
boolean startNativeTestServer(
String filePath,
String testDataDir,
boolean useHttps,
@ServerCertificate int certificate);
void shutdownNativeTestServer();
String getEchoBodyURL();
String getEchoHeaderURL(String header);
String getEchoAllHeadersURL();
String getEchoMethodURL();
String getRedirectToEchoBody();
String getFileURL(String filePath);
String getExabyteResponseURL();
String getHostPort();
int getPort();
}
}