diff options
author | Mohannad Farrag <aymanm@google.com> | 2024-01-16 11:19:54 +0000 |
---|---|---|
committer | Mohannad Farrag <aymanm@google.com> | 2024-01-17 19:08:44 +0000 |
commit | 34b3ec101cb50ce6f2dcf61a8aa3bd2d1e66f9a3 (patch) | |
tree | 83e71be75aa49acde72ce540d2f736be3a2c9491 | |
parent | 85df65e544adb55193339418571fab7bd3fbf911 (diff) | |
download | cronet-34b3ec101cb50ce6f2dcf61a8aa3bd2d1e66f9a3.tar.gz |
Apply crrev/c/5177031
Bug: 304217500
Change-Id: Ib74b816862f4f853b3aeffdb9f1647c11ed3f00f
10 files changed, 70 insertions, 81 deletions
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java index 94e7dd090..f4cb0bb96 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java @@ -54,7 +54,6 @@ import org.chromium.net.impl.CronetUrlRequestContext; import org.chromium.net.impl.ImplVersion; import org.chromium.net.impl.NativeCronetEngineBuilderImpl; import org.chromium.net.impl.NetworkExceptionImpl; -import org.chromium.net.test.EmbeddedTestServer; import java.io.BufferedReader; import java.io.File; @@ -81,23 +80,21 @@ public class CronetUrlRequestContextTest { private static final String MOCK_CRONET_TEST_SUCCESS_URL = "http://mock.http/success.txt"; private static final int MAX_FILE_SIZE = 1000000000; - private EmbeddedTestServer mTestServer; private String mUrl; private String mUrl404; private String mUrl500; @Before public void setUp() throws Exception { - mTestServer = - EmbeddedTestServer.createAndStartServer(mTestRule.getTestFramework().getContext()); - mUrl = mTestServer.getURL("/echo?status=200"); - mUrl404 = mTestServer.getURL("/echo?status=404"); - mUrl500 = mTestServer.getURL("/echo?status=500"); + NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext()); + mUrl = NativeTestServer.getSuccessURL(); + mUrl404 = NativeTestServer.getNotFoundURL(); + mUrl500 = NativeTestServer.getServerErrorURL(); } @After public void tearDown() throws Exception { - mTestServer.stopAndDestroyServer(); + NativeTestServer.shutdownNativeTestServer(); } class RequestThread extends Thread { diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java index 1bcb2fc6e..c32681ab4 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java @@ -42,9 +42,7 @@ import org.chromium.net.apihelpers.UploadDataProviders; import org.chromium.net.impl.CronetUrlRequest; import org.chromium.net.impl.NetworkExceptionImpl; import org.chromium.net.impl.UrlResponseInfoImpl; -import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.FailurePhase; -import org.chromium.net.test.ServerCertificate; import java.io.IOException; import java.net.ConnectException; @@ -1017,49 +1015,6 @@ public class CronetUrlRequestTest { assertThat(callback.mResponseStep).isEqualTo(ResponseStep.ON_FAILED); } - /** - * Tests that an SSL cert error with upload will be reported via {@link - * UrlRequest.Callback#onFailed}. - */ - @Test - @SmallTest - @IgnoreFor( - implementations = {CronetImplementation.FALLBACK}, - reason = "crbug.com/1495320: Refactor error checking") - public void testSSLCertificateError() throws Exception { - EmbeddedTestServer sslServer = - EmbeddedTestServer.createAndStartHTTPSServer( - mTestRule.getTestFramework().getContext(), ServerCertificate.CERT_EXPIRED); - - TestUrlRequestCallback callback = new TestUrlRequestCallback(); - UrlRequest.Builder builder = - mTestRule - .getTestFramework() - .getEngine() - .newUrlRequestBuilder( - sslServer.getURL("/"), callback, callback.getExecutor()); - - TestUploadDataProvider dataProvider = - new TestUploadDataProvider( - TestUploadDataProvider.SuccessCallbackMode.SYNC, callback.getExecutor()); - dataProvider.addRead("test".getBytes()); - builder.setUploadDataProvider(dataProvider, callback.getExecutor()); - builder.addHeader("Content-Type", "useless/string"); - builder.build().start(); - callback.blockForDone(); - dataProvider.assertClosed(); - - assertThat(callback.getResponseInfo()).isNull(); - assertThat(callback.mOnErrorCalled).isTrue(); - assertThat(callback.mError) - .hasMessageThat() - .contains("Exception in CronetUrlRequest: net::ERR_CERT_DATE_INVALID"); - mTestRule.assertCronetInternalErrorCode((NetworkException) callback.mError, -201); - assertThat(callback.mResponseStep).isEqualTo(ResponseStep.ON_FAILED); - - sslServer.stopAndDestroyServer(); - } - /** Checks that the buffer is updated correctly, when starting at an offset. */ @Test @SmallTest diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java index 6e0ae498b..1dc8ad69f 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/ExperimentalOptionsTest.java @@ -39,7 +39,6 @@ import org.chromium.net.CronetTestRule.CronetImplementation; import org.chromium.net.CronetTestRule.DisableAutomaticNetLog; import org.chromium.net.CronetTestRule.IgnoreFor; import org.chromium.net.impl.CronetUrlRequestContext; -import org.chromium.net.test.EmbeddedTestServer; import java.io.File; import java.io.FileInputStream; @@ -231,10 +230,9 @@ public class ExperimentalOptionsTest { // Tests that basic Cronet functionality works when host cache persistence is enabled, and that // persistence works. public void testHostCachePersistence() throws Exception { - EmbeddedTestServer testServer = - EmbeddedTestServer.createAndStartServer(mTestRule.getTestFramework().getContext()); + NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext()); - String realUrl = testServer.getURL("/echo?status=200"); + String realUrl = NativeTestServer.getFileURL("/echo?status=200"); URL javaUrl = new URL(realUrl); String realHost = javaUrl.getHost(); int realPort = javaUrl.getPort(); @@ -286,6 +284,7 @@ public class ExperimentalOptionsTest { callback.blockForDone(); assertThat(callback.getResponseInfoWithChecks()).hasHttpStatusCodeThat().isEqualTo(200); context.shutdown(); + NativeTestServer.shutdownNativeTestServer(); } @Test diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/NQETest.java b/components/cronet/android/test/javatests/src/org/chromium/net/NQETest.java index 7710ecad2..2407da5f2 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/NQETest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/NQETest.java @@ -29,7 +29,6 @@ import org.chromium.base.test.util.HistogramWatcher; import org.chromium.net.CronetTestRule.CronetImplementation; import org.chromium.net.CronetTestRule.IgnoreFor; import org.chromium.net.MetricsTestUtil.TestExecutor; -import org.chromium.net.test.EmbeddedTestServer; import java.io.File; import java.io.FileInputStream; @@ -50,7 +49,6 @@ public class NQETest { @Rule public final CronetTestRule mTestRule = CronetTestRule.withManualEngineStartup(); - private EmbeddedTestServer mTestServer; private String mUrl; // Thread on which network quality listeners should be notified. @@ -58,14 +56,13 @@ public class NQETest { @Before public void setUp() throws Exception { - mTestServer = - EmbeddedTestServer.createAndStartServer(mTestRule.getTestFramework().getContext()); - mUrl = mTestServer.getURL("/echo?status=200"); + NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext()); + mUrl = NativeTestServer.getFileURL("/echo?status=200"); } @After public void tearDown() throws Exception { - mTestServer.stopAndDestroyServer(); + NativeTestServer.shutdownNativeTestServer(); } private class ExecutorThreadFactory implements ThreadFactory { diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java index d55e8af3e..b0b4f6aea 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/RequestFinishedInfoTest.java @@ -26,7 +26,6 @@ import org.chromium.net.CronetTestRule.IgnoreFor; import org.chromium.net.CronetTestRule.RequiresMinApi; import org.chromium.net.MetricsTestUtil.TestExecutor; import org.chromium.net.impl.CronetMetrics; -import org.chromium.net.test.EmbeddedTestServer; import java.util.ArrayList; import java.util.Date; @@ -44,7 +43,6 @@ import java.util.concurrent.atomic.AtomicBoolean; public class RequestFinishedInfoTest { @Rule public final CronetTestRule mTestRule = CronetTestRule.withAutomaticEngineStartup(); - private EmbeddedTestServer mTestServer; private String mUrl; // A subclass of TestRequestFinishedListener to additionally assert that UrlRequest.Callback's @@ -70,14 +68,13 @@ public class RequestFinishedInfoTest { @Before public void setUp() throws Exception { - mTestServer = - EmbeddedTestServer.createAndStartServer(mTestRule.getTestFramework().getContext()); - mUrl = mTestServer.getURL("/echo?status=200"); + NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext()); + mUrl = NativeTestServer.getFileURL("/echo?status=200"); } @After public void tearDown() throws Exception { - mTestServer.stopAndDestroyServer(); + NativeTestServer.shutdownNativeTestServer(); } static class DirectExecutor implements Executor { diff --git a/components/cronet/android/test/native_test_server.cc b/components/cronet/android/test/native_test_server.cc index 157ab0239..e18cbecee 100644 --- a/components/cronet/android/test/native_test_server.cc +++ b/components/cronet/android/test/native_test_server.cc @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <jni.h> + #include <memory> #include <string> #include <utility> @@ -12,6 +14,7 @@ #include "base/test/test_support_android.h" #include "components/cronet/android/cronet_test_apk_jni/NativeTestServer_jni.h" #include "components/cronet/testing/test_server/test_server.h" +#include "net/test/embedded_test_server/embedded_test_server.h" using base::android::JavaParamRef; using base::android::ScopedJavaLocalRef; @@ -21,14 +24,21 @@ namespace cronet { jboolean JNI_NativeTestServer_StartNativeTestServer( JNIEnv* env, const JavaParamRef<jstring>& jtest_files_root, - const JavaParamRef<jstring>& jtest_data_dir) { + const JavaParamRef<jstring>& jtest_data_dir, + jboolean juse_https, + jint jserver_certificate) { base::FilePath test_data_dir( base::android::ConvertJavaStringToUTF8(env, jtest_data_dir)); base::InitAndroidTestPaths(test_data_dir); base::FilePath test_files_root( base::android::ConvertJavaStringToUTF8(env, jtest_files_root)); - return cronet::TestServer::StartServeFilesFromDirectory(test_files_root); + return cronet::TestServer::StartServeFilesFromDirectory( + test_files_root, + (juse_https ? net::test_server::EmbeddedTestServer::TYPE_HTTPS + : net::test_server::EmbeddedTestServer::TYPE_HTTP), + static_cast<net::EmbeddedTestServer::ServerCertificate>( + jserver_certificate)); } void JNI_NativeTestServer_ShutdownNativeTestServer(JNIEnv* env) { diff --git a/components/cronet/android/test/src/org/chromium/net/NativeTestServer.java b/components/cronet/android/test/src/org/chromium/net/NativeTestServer.java index 2c1301612..4723ac8d4 100644 --- a/components/cronet/android/test/src/org/chromium/net/NativeTestServer.java +++ b/components/cronet/android/test/src/org/chromium/net/NativeTestServer.java @@ -10,10 +10,12 @@ 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. + * 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 { @@ -23,7 +25,21 @@ public final class NativeTestServer { public static boolean startNativeTestServer(Context context) { TestFilesInstaller.installIfNeeded(context); return NativeTestServerJni.get().startNativeTestServer( - TestFilesInstaller.getInstalledPath(context), UrlUtils.getIsolatedTestRoot()); + 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() { @@ -92,7 +108,11 @@ public final class NativeTestServer { @NativeMethods("cronet_tests") interface Natives { - boolean startNativeTestServer(String filePath, String testDataDir); + boolean startNativeTestServer( + String filePath, + String testDataDir, + boolean useHttps, + @ServerCertificate int certificate); void shutdownNativeTestServer(); String getEchoBodyURL(); String getEchoHeaderURL(String header); diff --git a/components/cronet/testing/test_server/data/server_error.txt.mock-http-headers b/components/cronet/testing/test_server/data/server_error.txt.mock-http-headers index 472aa4b9b..23bb3abed 100644 --- a/components/cronet/testing/test_server/data/server_error.txt.mock-http-headers +++ b/components/cronet/testing/test_server/data/server_error.txt.mock-http-headers @@ -1 +1 @@ -HTTP/1.1 500 INTERNAL SERVER ERROR +HTTP/1.1 500 INTERNAL SERVER ERROR
\ No newline at end of file diff --git a/components/cronet/testing/test_server/test_server.cc b/components/cronet/testing/test_server/test_server.cc index 6fbe746eb..113b7955c 100644 --- a/components/cronet/testing/test_server/test_server.cc +++ b/components/cronet/testing/test_server/test_server.cc @@ -170,17 +170,19 @@ namespace cronet { /* static */ bool TestServer::StartServeFilesFromDirectory( - const base::FilePath& test_files_root) { + const base::FilePath& test_files_root, + net::EmbeddedTestServer::Type server_type, + net::EmbeddedTestServer::ServerCertificate server_certificate) { // Shouldn't happen. if (g_test_server) return false; - g_test_server = std::make_unique<net::EmbeddedTestServer>( - net::EmbeddedTestServer::TYPE_HTTP); + g_test_server = std::make_unique<net::EmbeddedTestServer>(server_type); g_test_server->RegisterRequestHandler( base::BindRepeating(&CronetTestRequestHandler)); g_test_server->ServeFilesFromDirectory(test_files_root); net::test_server::RegisterDefaultHandlers(g_test_server.get()); + g_test_server->SetSSLConfig(server_certificate); CHECK(g_test_server->Start()); return true; } @@ -189,7 +191,10 @@ bool TestServer::StartServeFilesFromDirectory( bool TestServer::Start() { base::FilePath src_root; CHECK(base::PathService::Get(base::DIR_SRC_TEST_DATA_ROOT, &src_root)); - return StartServeFilesFromDirectory(src_root.Append(kTestDataRelativePath)); + return StartServeFilesFromDirectory( + src_root.Append(kTestDataRelativePath), + net::test_server::EmbeddedTestServer::TYPE_HTTP, + net::test_server::EmbeddedTestServer::CERT_OK); } /* static */ diff --git a/components/cronet/testing/test_server/test_server.h b/components/cronet/testing/test_server/test_server.h index 82a74acd6..cd4d3635b 100644 --- a/components/cronet/testing/test_server/test_server.h +++ b/components/cronet/testing/test_server/test_server.h @@ -7,6 +7,8 @@ #include <string> +#include "net/test/embedded_test_server/embedded_test_server.h" + namespace base { class FilePath; } // namespace base @@ -17,11 +19,18 @@ class TestServer { public: // Starts the server serving files from default test data directory. // Returns true if started, false if server is already running. + // This will run the server in default mode (HTTP/1 with no SSL) static bool Start(); + // Starts the server serving files from |test_files_root| directory. // Returns true if started, false if server is already running. + // The provided server will support either HTTP/1 or HTTPS/1 depending + // on the |type| provided. static bool StartServeFilesFromDirectory( - const base::FilePath& test_files_root); + const base::FilePath& test_files_root, + net::EmbeddedTestServer::Type type, + net::EmbeddedTestServer::ServerCertificate cert); + // Shuts down the server. static void Shutdown(); |