diff options
author | Mohannad Farrag <aymanm@google.com> | 2024-01-18 16:08:10 +0000 |
---|---|---|
committer | Mohannad Farrag <aymanm@google.com> | 2024-01-18 16:08:10 +0000 |
commit | 5ab8eee2f1dd6a40a5bb6932f5ea6b7de5f0b5b5 (patch) | |
tree | 83e71be75aa49acde72ce540d2f736be3a2c9491 | |
parent | 09524263b7675c639c1b0ef6ee6b0f30d3e2d06b (diff) | |
parent | 34b3ec101cb50ce6f2dcf61a8aa3bd2d1e66f9a3 (diff) | |
download | cronet-5ab8eee2f1dd6a40a5bb6932f5ea6b7de5f0b5b5.tar.gz |
Merge remote-tracking branch 'aosp/upstream-staging' into merge_main_remove_div_2
Bug: 304217500
Change-Id: I9075433ccdc9da69adb80cfe5d58ef14b7ad16dc
27 files changed, 214 insertions, 312 deletions
diff --git a/Android.extras.bp b/Android.extras.bp index d997ee12c..41888671f 100644 --- a/Android.extras.bp +++ b/Android.extras.bp @@ -167,6 +167,7 @@ filegroup { name: "cronet_javatests_resources", srcs: [ "net/data/ssl/certificates/**/*", + "components/cronet/testing/test_server/data/**/*", ], visibility: [ "//packages/modules/Connectivity:__subpackages__", @@ -175,10 +176,6 @@ filegroup { android_library { name: "cronet_java_tests", - asset_dirs: [ - "components/cronet/testing/test_server/data/", - "net/data/ssl/certificates/", - ], manifest: "components/cronet/android/test/src/org/chromium/net/AndroidManifest.xml", srcs: [ ":cronet_logger_tests_sources", diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/BrotliTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/BrotliTest.java index 81b88c03b..d172a433f 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/BrotliTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/BrotliTest.java @@ -15,7 +15,6 @@ import androidx.test.filters.SmallTest; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -51,15 +50,13 @@ public class BrotliTest { builder, QuicTestServer.createMockCertVerifier()); }); } - assertThat(NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext())).isTrue(); + assertThat(Http2TestServer.startHttp2TestServer(mTestRule.getTestFramework().getContext())) + .isTrue(); } @After public void tearDown() throws Exception { - NativeTestServer.shutdownNativeTestServer(); - if (mCronetEngine != null) { - mCronetEngine.shutdown(); - } + assertThat(Http2TestServer.shutdownHttp2TestServer()).isTrue(); } @Test @@ -73,17 +70,17 @@ public class BrotliTest { }); mCronetEngine = mTestRule.getTestFramework().startEngine(); - String url = NativeTestServer.getEchoAllHeadersURL(); + String url = Http2TestServer.getEchoAllHeadersUrl(); TestUrlRequestCallback callback = startAndWaitForComplete(url); assertThat(callback.getResponseInfoWithChecks()).hasHttpStatusCodeThat().isEqualTo(200); - assertThat(callback.mResponseAsString).contains("Accept-Encoding: gzip, deflate, br"); + assertThat(callback.mResponseAsString).contains("accept-encoding: gzip, deflate, br"); } @Test @SmallTest public void testBrotliNotAdvertised() throws Exception { mCronetEngine = mTestRule.getTestFramework().startEngine(); - String url = NativeTestServer.getEchoAllHeadersURL(); + String url = Http2TestServer.getEchoAllHeadersUrl(); TestUrlRequestCallback callback = startAndWaitForComplete(url); assertThat(callback.getResponseInfoWithChecks()).hasHttpStatusCodeThat().isEqualTo(200); assertThat(callback.mResponseAsString).doesNotContain("br"); @@ -91,7 +88,6 @@ public class BrotliTest { @Test @SmallTest - @Ignore // TODO(danstahr): Add test server support for setting the Brotli header public void testBrotliDecoded() throws Exception { mTestRule .getTestFramework() diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetStressTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetStressTest.java index a5b3968c7..a23705034 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetStressTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetStressTest.java @@ -11,8 +11,6 @@ import static org.chromium.net.truth.UrlResponseInfoSubject.assertThat; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; -import org.chromium.base.test.util.Batch; -import org.chromium.net.apihelpers.UploadDataProviders; import org.junit.After; import org.junit.Before; import org.junit.Rule; diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestRuleTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestRuleTest.java index 8190ab7f8..3fa22d155 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestRuleTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetTestRuleTest.java @@ -26,6 +26,7 @@ import org.chromium.net.CronetTestRule.IgnoreFor; import org.chromium.net.CronetTestRule.RequiresMinAndroidApi; import org.chromium.net.CronetTestRule.RequiresMinApi; import org.chromium.net.impl.CronetUrlRequestContext; +import org.chromium.net.impl.JavaCronetEngine; /** Tests features of CronetTestRule. */ @RunWith(AndroidJUnit4.class) @@ -84,6 +85,34 @@ public class CronetTestRuleTest { */ @Test @SmallTest + public void testAllImplsMustRun() { + assertThat(mTestWasRun).isFalse(); + mTestWasRun = true; + mNumberOfReruns++; + assertThat(mNumberOfReruns).isLessThan(4); + switch (mTestRule.implementationUnderTest()) { + case STATICALLY_LINKED: + assertThat(mNativeImplWasRun).isFalse(); + mNativeImplWasRun = true; + break; + case FALLBACK: + assertThat(mFallbackImplWasRun).isFalse(); + mFallbackImplWasRun = true; + break; + case AOSP_PLATFORM: + assertThat(mPlatformImplWasRun).isFalse(); + mPlatformImplWasRun = true; + break; + } + if (mNumberOfReruns == 3) { + assertThat(mFallbackImplWasRun).isTrue(); + assertThat(mPlatformImplWasRun).isTrue(); + assertThat(mNativeImplWasRun).isTrue(); + } + } + + @Test + @SmallTest @IgnoreFor( implementations = {CronetImplementation.FALLBACK, CronetImplementation.AOSP_PLATFORM}, reason = "Testing the rule") @@ -96,4 +125,41 @@ public class CronetTestRuleTest { assertThat(mTestRule.getTestFramework().getEngine()) .isInstanceOf(CronetUrlRequestContext.class); } + + @Test + @SmallTest + @IgnoreFor( + implementations = { + CronetImplementation.STATICALLY_LINKED, + CronetImplementation.AOSP_PLATFORM + }, + reason = "Testing the rule") + public void testRunOnlyJavaMustRun() { + assertThat(mTestRule.testingJavaImpl()).isTrue(); + assertThat(mTestRule.implementationUnderTest()).isEqualTo(CronetImplementation.FALLBACK); + assertThat(mTestWasRun).isFalse(); + mTestWasRun = true; + assertThat(mTestRule.getTestFramework().getEngine()).isInstanceOf(JavaCronetEngine.class); + } + + @Test + @SmallTest + @IgnoreFor( + implementations = { + CronetImplementation.STATICALLY_LINKED, + CronetImplementation.FALLBACK + }, + reason = "Testing the rule") + @RequiresMinAndroidApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) + public void testRunOnlyAospPlatformMustRun() { + assertThat(mTestRule.testingJavaImpl()).isFalse(); + assertThat(mTestRule.implementationUnderTest()) + .isEqualTo(CronetImplementation.AOSP_PLATFORM); + assertThat(mTestWasRun).isFalse(); + mTestWasRun = true; + assertThat(mTestRule.getTestFramework().getEngine()) + .isNotInstanceOf(JavaCronetEngine.class); + assertThat(mTestRule.getTestFramework().getEngine()) + .isNotInstanceOf(CronetUrlRequestContext.class); + } } 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 5110bbb9d..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 @@ -5,11 +5,13 @@ package org.chromium.net; import static com.google.common.truth.Truth.assertThat; + +import static org.junit.Assert.assertThrows; +import static org.junit.Assume.assumeTrue; + import static org.chromium.net.CronetEngine.Builder.HTTP_CACHE_IN_MEMORY; import static org.chromium.net.CronetTestRule.getTestStorage; import static org.chromium.net.truth.UrlResponseInfoSubject.assertThat; -import static org.junit.Assert.assertThrows; -import static org.junit.Assume.assumeTrue; import android.net.Network; import android.os.Build; @@ -18,9 +20,11 @@ import android.os.ConditionVariable; import android.os.Handler; import android.os.Looper; import android.os.Process; + import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.testutils.SkipPresubmit; + import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; import org.json.JSONObject; @@ -31,7 +35,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.chromium.base.Log; -import org.chromium.base.FileUtils; import org.chromium.base.PathUtils; import org.chromium.base.test.util.DoNotBatch; import org.chromium.net.CronetTestRule.CronetImplementation; @@ -51,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; @@ -82,11 +84,11 @@ public class CronetUrlRequestContextTest { private String mUrl404; private String mUrl500; - @Before - public void setUp() throws Exception { - assertThat(NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext())).isTrue(); - mUrl = NativeTestServer.getSuccessURL(); - mUrl404 = NativeTestServer.getNotFoundURL(); + @Before + public void setUp() throws Exception { + NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext()); + mUrl = NativeTestServer.getSuccessURL(); + mUrl404 = NativeTestServer.getNotFoundURL(); mUrl500 = NativeTestServer.getServerErrorURL(); } @@ -784,7 +786,7 @@ public class CronetUrlRequestContextTest { assertThat(logFile.exists()).isTrue(); assertThat(logFile.length()).isNotEqualTo(0); assertThat(hasBytesInNetLog(logFile)).isFalse(); - FileUtils.recursivelyDeleteFile(netLogDir, FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(netLogDir); assertThat(netLogDir.exists()).isFalse(); } @@ -845,12 +847,13 @@ public class CronetUrlRequestContextTest { assertThat(logFile.exists()).isTrue(); assertThat(logFile.length()).isNotEqualTo(0); - FileUtils.recursivelyDeleteFile(netLogDir, FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(netLogDir); assertThat(netLogDir.exists()).isFalse(); } @Test @SmallTest + @SkipPresubmit(reason = "b/293141085 flaky test") @IgnoreFor( implementations = {CronetImplementation.AOSP_PLATFORM}, reason = "ActiveRequestCount is not available in AOSP") @@ -1270,9 +1273,9 @@ public class CronetUrlRequestContextTest { assertThat(containsStringInNetLog(logFile2, mUrl404)).isTrue(); assertThat(containsStringInNetLog(logFile2, mUrl500)).isTrue(); - FileUtils.recursivelyDeleteFile(netLogDir1, FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(netLogDir1); assertThat(netLogDir1.exists()).isFalse(); - FileUtils.recursivelyDeleteFile(netLogDir2, FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(netLogDir2); assertThat(netLogDir2.exists()).isFalse(); } @@ -1295,7 +1298,10 @@ public class CronetUrlRequestContextTest { @Test @SmallTest - @SkipPresubmit(reason = "b/293141085 Tests that enable disk cache are flaky") + @SkipPresubmit(reason = "b/293141085 flaky test") + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK}, + reason = "Fallback implementation does not have a network thread.") // Tests that if CronetEngine is shut down on the network thread, an appropriate exception // is thrown. public void testShutDownEngineOnNetworkThread() throws Exception { @@ -1353,7 +1359,10 @@ public class CronetUrlRequestContextTest { @Test @SmallTest - @SkipPresubmit(reason = "b/293141085 Tests that enable disk cache are flaky") + @SkipPresubmit(reason = "b/293141085 flaky test") + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK}, + reason = "Fallback implementation has no support for caches") // Tests that if CronetEngine is shut down when reading from disk cache, // there isn't a crash. See crbug.com/486120. public void testShutDownEngineWhenReadingFromDiskCache() throws Exception { @@ -1452,7 +1461,7 @@ public class CronetUrlRequestContextTest { netLogDir.getPath(), false, MAX_FILE_SIZE)); assertThat(e).hasMessageThat().isEqualTo("Engine is shut down."); assertThat(logFile.exists()).isFalse(); - FileUtils.recursivelyDeleteFile(netLogDir, FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(netLogDir); assertThat(netLogDir.exists()).isFalse(); } @@ -1514,7 +1523,7 @@ public class CronetUrlRequestContextTest { assertThat(logFile.exists()).isTrue(); assertThat(logFile.length()).isNotEqualTo(0); assertThat(hasBytesInNetLog(logFile)).isFalse(); - FileUtils.recursivelyDeleteFile(netLogDir, FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(netLogDir); assertThat(netLogDir.exists()).isFalse(); } @@ -1578,7 +1587,7 @@ public class CronetUrlRequestContextTest { assertThat(logFile.exists()).isTrue(); assertThat(logFile.length()).isNotEqualTo(0); assertThat(hasBytesInNetLog(logFile)).isFalse(); - FileUtils.recursivelyDeleteFile(netLogDir, FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(netLogDir); assertThat(netLogDir.exists()).isFalse(); } @@ -1634,7 +1643,7 @@ public class CronetUrlRequestContextTest { assertThat(logFile.exists()).isTrue(); assertThat(logFile.length()).isNotEqualTo(0); assertThat(hasBytesInNetLog(logFile)).isTrue(); - FileUtils.recursivelyDeleteFile(netLogDir, FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(netLogDir); assertThat(netLogDir.exists()).isFalse(); } @@ -1724,7 +1733,9 @@ public class CronetUrlRequestContextTest { @Test @SmallTest - @SkipPresubmit(reason = "b/293141085 Tests that enable disk cache are flaky") + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK}, + reason = "No caches support for fallback implementation") public void testEnableHttpCacheDisk() throws Exception { CronetEngine cronetEngine = createCronetEngineWithCache(CronetEngine.Builder.HTTP_CACHE_DISK); @@ -1738,7 +1749,10 @@ public class CronetUrlRequestContextTest { @Test @SmallTest - @SkipPresubmit(reason = "b/293141085 Tests that enable disk cache are flaky") + @SkipPresubmit(reason = "b/293141085 flaky test") + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK}, + reason = "No caches support for fallback implementation") public void testNoConcurrentDiskUsage() throws Exception { CronetEngine cronetEngine = createCronetEngineWithCache(CronetEngine.Builder.HTTP_CACHE_DISK); @@ -1759,7 +1773,10 @@ public class CronetUrlRequestContextTest { @Test @SmallTest - @SkipPresubmit(reason = "b/293141085 Tests that enable disk cache are flaky") + @SkipPresubmit(reason = "b/293141085 flaky test") + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK}, + reason = "No caches support for fallback implementation") public void testEnableHttpCacheDiskNoHttp() throws Exception { CronetEngine cronetEngine = createCronetEngineWithCache(CronetEngine.Builder.HTTP_CACHE_DISK_NO_HTTP); @@ -1780,7 +1797,9 @@ public class CronetUrlRequestContextTest { @Test @SmallTest - @SkipPresubmit(reason = "b/293141085 Tests that enable disk cache are flaky") + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK}, + reason = "No caches support for fallback implementation") public void testDisableCache() throws Exception { CronetEngine cronetEngine = createCronetEngineWithCache(CronetEngine.Builder.HTTP_CACHE_DISK); @@ -1819,7 +1838,9 @@ public class CronetUrlRequestContextTest { @Test @SmallTest - @SkipPresubmit(reason = "b/293141085 Tests that enable disk cache are flaky") + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK}, + reason = "No caches support for fallback implementation") public void testEnableHttpCacheDiskNewEngine() throws Exception { CronetEngine cronetEngine = createCronetEngineWithCache(CronetEngine.Builder.HTTP_CACHE_DISK); @@ -2041,6 +2062,9 @@ public class CronetUrlRequestContextTest { @Test @SmallTest + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK, CronetImplementation.AOSP_PLATFORM}, + reason = "LibraryLoader is supported only by the native implementation") public void testSetLibraryLoaderIsEnforcedByDefaultEmbeddedProvider() throws Exception { CronetEngine.Builder builder = new CronetEngine.Builder(mTestRule.getTestFramework().getContext()); @@ -2061,6 +2085,9 @@ public class CronetUrlRequestContextTest { @Test @SmallTest + @IgnoreFor( + implementations = {CronetImplementation.FALLBACK, CronetImplementation.AOSP_PLATFORM}, + reason = "LibraryLoader is supported only by the native implementation") public void testSetLibraryLoaderIsIgnoredInNativeCronetEngineBuilderImpl() throws Exception { CronetEngine.Builder builder = new CronetEngine.Builder( 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 876921d02..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 @@ -25,7 +25,6 @@ import androidx.test.filters.SmallTest; import org.jni_zero.NativeMethods; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -1016,47 +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 - @Ignore ("b/267353182 " - + "Figure out why EmbeddedTestServer was used instead of MockUrlForSSLCertificateError" - + "since this is similar test to one above") - @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("/") */ null, 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/DiskStorageTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java index d971d4f22..98dde3a68 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/DiskStorageTest.java @@ -13,7 +13,6 @@ import static org.chromium.net.truth.UrlResponseInfoSubject.assertThat; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; - import com.android.testutils.SkipPresubmit; import org.junit.After; @@ -22,7 +21,6 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.chromium.base.FileUtils; import org.chromium.base.PathUtils; import org.chromium.base.test.util.DoNotBatch; import org.chromium.net.CronetTestRule.CronetImplementation; @@ -57,7 +55,7 @@ public class DiskStorageTest { @After public void tearDown() throws Exception { if (mReadOnlyStoragePath != null) { - FileUtils.recursivelyDeleteFile(new File(mReadOnlyStoragePath), FileUtils.DELETE_ALL); + FileUtils.recursivelyDeleteFile(new File(mReadOnlyStoragePath)); } NativeTestServer.shutdownNativeTestServer(); } 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 01a63a591..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 @@ -21,13 +21,11 @@ import androidx.test.filters.MediumTest; import com.android.testutils.SkipPresubmit; -import org.json.JSONException; import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; import org.json.JSONObject; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -96,7 +94,6 @@ public class ExperimentalOptionsTest { @Test @MediumTest - @Ignore("b/275345637 Needs HTTP2 Server") @DisableAutomaticNetLog(reason = "Test is targeting NetLog") // Tests that NetLog writes effective experimental options to NetLog. public void testNetLog() throws Exception { @@ -158,7 +155,6 @@ public class ExperimentalOptionsTest { @Test @MediumTest - @Ignore("b/275345637 Needs HTTP2 Server") public void testSetSSLKeyLogFile() throws Exception { String url = Http2TestServer.getEchoMethodUrl(); File dir = new File(PathUtils.getDataDirectory()); @@ -234,9 +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 { - assertThat(NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext())).isTrue(); + NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext()); - String realUrl = NativeTestServer.getSuccessURL(); + String realUrl = NativeTestServer.getFileURL("/echo?status=200"); URL javaUrl = new URL(realUrl); String realHost = javaUrl.getHost(); int realPort = javaUrl.getPort(); @@ -316,7 +312,6 @@ public class ExperimentalOptionsTest { @Test @MediumTest - @Ignore("b/275345637 Needs HTTP2 Server") public void testDetectBrokenConnection() throws Exception { String url = Http2TestServer.getEchoMethodUrl(); mTestRule @@ -348,7 +343,6 @@ public class ExperimentalOptionsTest { @DisabledTest(message = "crbug.com/1320725") @Test @LargeTest - @Ignore("b/275345637 Needs HTTP2 Server") public void testDetectBrokenConnectionOnNetworkFailure() throws Exception { // HangingRequestUrl stops the server from replying until mHangingUrlLatch is opened, // simulating a network failure between client and server. diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/Http2TestServer.java b/components/cronet/android/test/javatests/src/org/chromium/net/Http2TestServer.java deleted file mode 100644 index 55c36010a..000000000 --- a/components/cronet/android/test/javatests/src/org/chromium/net/Http2TestServer.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright (C) 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.chromium.net; - -import android.content.Context; - -import java.io.File; -import java.util.concurrent.CountDownLatch; - - -/** - * This is a STUB AOSP-only version of org.chromium.net.test.Http2TestServer. This will allow us - * to not have comment out the tests but rather simply @Ignore them till we figure out what the - * plan for a H2 server is. - */ -public final class Http2TestServer { - - public static boolean shutdownHttp2TestServer() throws Exception { - return true; - } - - public static String getServerHost() { - throw new UnsupportedOperationException("This is a stub class"); - } - - public static int getServerPort() { - throw new UnsupportedOperationException("This is a stub class"); - } - - public static String getServerUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - public static ReportingCollector getReportingCollector() { - throw new UnsupportedOperationException("This is a stub class"); - } - - public static String getEchoAllHeadersUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - public static String getEchoHeaderUrl(String headerName) { - throw new UnsupportedOperationException("This is a stub class"); - } - - public static String getEchoMethodUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - /** - * When using this you must provide a CountDownLatch in the call to startHttp2TestServer. - * The request handler will continue to hang until the provided CountDownLatch reaches 0. - * - * @return url of the server resource which will hang indefinitely. - */ - public static String getHangingRequestUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - /** - * @return url of the server resource which will echo every received stream data frame. - */ - public static String getEchoStreamUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - /** - * @return url of the server resource which will echo request headers as response trailers. - */ - public static String getEchoTrailersUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - /** - * @return url of a brotli-encoded server resource. - */ - public static String getServeSimpleBrotliResponse() { - throw new UnsupportedOperationException("This is a stub class"); - } - - /** - * @return url of the reporting collector - */ - public static String getReportingCollectorUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - /** - * @return url of a resource that includes Reporting and NEL policy headers in its response - */ - public static String getSuccessWithNELHeadersUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - /** - * @return url of a resource that sends response headers with the same key - */ - public static String getCombinedHeadersUrl() { - throw new UnsupportedOperationException("This is a stub class"); - } - - public static boolean startHttp2TestServer(Context context) throws Exception { - return true; - } - - public static boolean startHttp2TestServer(Context context, CountDownLatch hangingUrlLatch) - throws Exception { - return true; - } - - private Http2TestServer() { - } - - private static class ReportingCollector { - } -} 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 1e490a7cb..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 @@ -18,7 +18,6 @@ import androidx.test.filters.SmallTest; import org.json.JSONObject; import org.junit.After; import org.junit.Before; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -57,8 +56,8 @@ public class NQETest { @Before public void setUp() throws Exception { - assertThat(NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext())).isTrue(); - mUrl = NativeTestServer.getSuccessURL(); + NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext()); + mUrl = NativeTestServer.getFileURL("/echo?status=200"); } @After @@ -277,7 +276,6 @@ public class NQETest { @Test @SmallTest - @Ignore("b/267353182 Permission denied error") public void testPrefsWriteRead() throws Exception { // When the loop is run for the first time, network quality is written to the disk. The // test verifies that in the next loop, the network quality is read back. diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java index b8d7442a7..2f2959e63 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/QuicTest.java @@ -13,7 +13,6 @@ import static org.chromium.net.truth.UrlResponseInfoSubject.assertThat; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; import androidx.test.filters.SmallTest; - import com.android.testutils.SkipPresubmit; import org.json.JSONObject; 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 1b0b0fd77..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 @@ -68,8 +68,8 @@ public class RequestFinishedInfoTest { @Before public void setUp() throws Exception { - assertThat(NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext())).isTrue(); - mUrl = NativeTestServer.getSuccessURL(); + NativeTestServer.startNativeTestServer(mTestRule.getTestFramework().getContext()); + mUrl = NativeTestServer.getFileURL("/echo?status=200"); } @After diff --git a/components/cronet/android/test/mock_cert_verifier.cc b/components/cronet/android/test/mock_cert_verifier.cc index 3fac267cd..21558fb00 100644 --- a/components/cronet/android/test/mock_cert_verifier.cc +++ b/components/cronet/android/test/mock_cert_verifier.cc @@ -62,7 +62,7 @@ static jlong JNI_MockCertVerifier_CreateMockCertVerifier( for (const auto& cert : certs) { net::CertVerifyResult verify_result; verify_result.verified_cert = - net::ImportCertFromFile(test_data_dir, cert); + net::ImportCertFromFile(net::GetTestCertsDirectory(), cert); // By default, HPKP verification is enabled for known trust roots only. verify_result.is_issued_by_known_root = jknown_root; 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/proguard.cfg b/components/cronet/android/test/proguard.cfg index 5df6efe76..797504ab4 100644 --- a/components/cronet/android/test/proguard.cfg +++ b/components/cronet/android/test/proguard.cfg @@ -11,6 +11,10 @@ # https://android.googlesource.com/platform/sdk/+/marshmallow-mr1-release/files/proguard-android.txt#54 -dontwarn android.support.** +# Do not obfuscate this class for testing since some of the tests check the class +# name in order to check that an instantiated engine is the Java one. +-keepnames class org.chromium.net.impl.JavaCronetEngine + # These classes should be explicitly kept to avoid failure if # class/merging/horizontal proguard optimization is enabled. # NOTE: make sure that only test classes are added to this list. diff --git a/components/cronet/android/test/quic_test_server.cc b/components/cronet/android/test/quic_test_server.cc index d0c65cb9e..6e6a0daa7 100644 --- a/components/cronet/android/test/quic_test_server.cc +++ b/components/cronet/android/test/quic_test_server.cc @@ -71,12 +71,12 @@ void StartOnServerThread(const base::FilePath& test_files_root, quic::QuicConfig config; // Set up server certs. + base::FilePath directory = test_data_dir.Append("net/data/ssl/certificates"); std::unique_ptr<net::ProofSourceChromium> proof_source( new net::ProofSourceChromium()); - CHECK(proof_source->Initialize( - test_data_dir.Append("quic-chain.pem"), - test_data_dir.Append("quic-leaf-cert.key"), - base::FilePath())); + CHECK(proof_source->Initialize(directory.Append("quic-chain.pem"), + directory.Append("quic-leaf-cert.key"), + base::FilePath())); g_quic_server = std::make_unique<net::QuicSimpleServer>( std::move(proof_source), config, quic::QuicCryptoServerConfig::ConfigOptions(), diff --git a/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/MissingNativeLibraryTest.java b/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/MissingNativeLibraryTest.java index 9701ac50a..fcebecd0f 100644 --- a/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/MissingNativeLibraryTest.java +++ b/components/cronet/android/test/smoketests/src/org/chromium/net/smoke/MissingNativeLibraryTest.java @@ -19,6 +19,7 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.chromium.net.CronetEngine; +import org.chromium.net.CronetProvider; import org.chromium.net.ExperimentalCronetEngine; import java.util.List; diff --git a/components/cronet/android/test/src/org/chromium/net/CronetTestUtil.java b/components/cronet/android/test/src/org/chromium/net/CronetTestUtil.java index 20225d81a..c85e3a359 100644 --- a/components/cronet/android/test/src/org/chromium/net/CronetTestUtil.java +++ b/components/cronet/android/test/src/org/chromium/net/CronetTestUtil.java @@ -5,8 +5,6 @@ package org.chromium.net; import android.net.Network; -import org.chromium.net.CronetEngine; -import org.chromium.net.UrlRequest; import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; @@ -92,11 +90,11 @@ public class CronetTestUtil { } public static void setMockCertVerifierForTesting( - ExperimentalCronetEngine.Builder builder, long mockCertVerifier) { + ExperimentalCronetEngine.Builder builder, long mockCertVerifier) { getCronetEngineBuilderImpl(builder).setMockCertVerifierForTesting(mockCertVerifier); } - public static CronetEngineBuilderImpl getCronetEngineBuilderImpl( + static CronetEngineBuilderImpl getCronetEngineBuilderImpl( ExperimentalCronetEngine.Builder builder) { return (CronetEngineBuilderImpl) ((ExperimentalOptionsTranslatingCronetEngineBuilder) builder.getBuilderDelegate()) diff --git a/components/cronet/android/test/src/org/chromium/net/MockCertVerifier.java b/components/cronet/android/test/src/org/chromium/net/MockCertVerifier.java index 80ae37f12..307ec81a5 100644 --- a/components/cronet/android/test/src/org/chromium/net/MockCertVerifier.java +++ b/components/cronet/android/test/src/org/chromium/net/MockCertVerifier.java @@ -7,7 +7,6 @@ package org.chromium.net; import org.jni_zero.JNINamespace; import org.jni_zero.NativeMethods; -import org.chromium.base.ContextUtils; import org.chromium.base.test.util.UrlUtils; /** @@ -26,8 +25,8 @@ public class MockCertVerifier { * @return a pointer to the newly created net::MockCertVerifier. */ public static long createMockCertVerifier(String[] certs, boolean knownRoot) { - return MockCertVerifierJni.get().createMockCertVerifier(certs, knownRoot, - TestFilesInstaller.getInstalledPath(ContextUtils.getApplicationContext())); + return MockCertVerifierJni.get().createMockCertVerifier( + certs, knownRoot, UrlUtils.getIsolatedTestRoot()); } /** @@ -40,7 +39,7 @@ public class MockCertVerifier { } @NativeMethods("cronet_tests") - public interface Natives { + interface Natives { long createMockCertVerifier(String[] certs, boolean knownRoot, String testDataDir); long createFreeForAllMockCertVerifier(); } diff --git a/components/cronet/android/test/src/org/chromium/net/MockUrlRequestJobFactory.java b/components/cronet/android/test/src/org/chromium/net/MockUrlRequestJobFactory.java index 00d3feb4f..935ece42f 100644 --- a/components/cronet/android/test/src/org/chromium/net/MockUrlRequestJobFactory.java +++ b/components/cronet/android/test/src/org/chromium/net/MockUrlRequestJobFactory.java @@ -93,7 +93,7 @@ public final class MockUrlRequestJobFactory { } @NativeMethods("cronet_tests") - public interface Natives { + interface Natives { long addUrlInterceptors(long requestContextAdapter); void removeUrlInterceptorJobFactory(long interceptorHandle); String getMockUrlWithFailure(int phase, int netError); 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/android/test/src/org/chromium/net/QuicTestServer.java b/components/cronet/android/test/src/org/chromium/net/QuicTestServer.java index 3e60d8a17..fd6e6fe5e 100644 --- a/components/cronet/android/test/src/org/chromium/net/QuicTestServer.java +++ b/components/cronet/android/test/src/org/chromium/net/QuicTestServer.java @@ -33,10 +33,8 @@ public final class QuicTestServer { throw new IllegalStateException("Quic server is already running"); } TestFilesInstaller.installIfNeeded(context); - String test_dir = TestFilesInstaller.getInstalledPath(context); - // TestFilesInstaller implementation changed such that the test files and test data dir - // are now the same. See aosp/2475670 - QuicTestServerJni.get().startQuicTestServer(test_dir, test_dir); + QuicTestServerJni.get().startQuicTestServer( + TestFilesInstaller.getInstalledPath(context), UrlUtils.getIsolatedTestRoot()); sServerRunning = true; } diff --git a/components/cronet/android/test/src/org/chromium/net/TestFilesInstaller.java b/components/cronet/android/test/src/org/chromium/net/TestFilesInstaller.java index 1e65dd5b1..42270824b 100644 --- a/components/cronet/android/test/src/org/chromium/net/TestFilesInstaller.java +++ b/components/cronet/android/test/src/org/chromium/net/TestFilesInstaller.java @@ -5,71 +5,29 @@ package org.chromium.net; import android.content.Context; -import android.content.res.AssetManager; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.List; -import java.util.Queue; + +import org.chromium.base.test.util.UrlUtils; /** - * Helper class to install test files. This moves the files to an accessible storage directory. + * Helper class to install test files. */ public final class TestFilesInstaller { - private static final String INSTALLED_PATH_SUFFIX = "cronet_test_data"; + // Name of the asset directory in which test files are stored. + private static final String TEST_FILE_ASSET_PATH = "components/cronet/testing/test_server/data"; /** * Installs test files if files have not been installed. */ public static void installIfNeeded(Context context) { - File testDataDir = new File(context.getCacheDir(), INSTALLED_PATH_SUFFIX); - - if (testDataDir.exists()) { - return; - } - - AssetManager assets = context.getAssets(); - try { - for (String assetPath : listAllAssets(assets)) { - File copiedAssetFile = new File(testDataDir, assetPath); - copiedAssetFile.getParentFile().mkdirs(); - try (InputStream inputStream = assets.open(assetPath)) { - Files.copy(inputStream, copiedAssetFile.toPath(), StandardCopyOption.REPLACE_EXISTING); - } - } - } catch (IOException e) { - throw new AssertionError("Failed to copy test files", e); - } + // Do nothing. + // NOTE(pauljensen): This hook is used (overridden) when tests are run in other + // configurations, so it should not be removed. } /** * Returns the installed path of the test files. */ public static String getInstalledPath(Context context) { - return new File(context.getCacheDir(), INSTALLED_PATH_SUFFIX).getAbsolutePath(); - } - - private static List<String> listAllAssets(AssetManager assets) throws IOException { - Queue<String> toProcess = new ArrayDeque<>(); - toProcess.add(""); - List<String> result = new ArrayList<>(); - while (!toProcess.isEmpty()) { - String parent = toProcess.remove(); - String[] children = assets.list(parent); - if (children.length > 0) { - // It's a folder - for (String child : children) { - toProcess.add(new File(parent, child).toString()); - } - } else if (!parent.isEmpty()) { - // It's a file - result.add(parent); - } // Else it's the empty root folder, in which case do nothing - } - return result; + return UrlUtils.getIsolatedTestRoot() + "/" + TEST_FILE_ASSET_PATH; } } diff --git a/components/cronet/android/test/src/org/chromium/net/TestUploadDataStreamHandler.java b/components/cronet/android/test/src/org/chromium/net/TestUploadDataStreamHandler.java index 2c166f53d..5010d4c94 100644 --- a/components/cronet/android/test/src/org/chromium/net/TestUploadDataStreamHandler.java +++ b/components/cronet/android/test/src/org/chromium/net/TestUploadDataStreamHandler.java @@ -7,7 +7,6 @@ package org.chromium.net; import static com.google.common.truth.Truth.assertThat; import android.content.Context; -import org.chromium.net.CronetEngine; import android.os.ConditionVariable; import org.jni_zero.CalledByNative; 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(); |