1 // Copyright 2015 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.net; 6 7 import static com.google.common.truth.Truth.assertThat; 8 import static com.google.common.truth.TruthJUnit.assume; 9 10 import static org.chromium.net.truth.UrlResponseInfoSubject.assertThat; 11 12 import android.os.Build; 13 14 import androidx.test.ext.junit.runners.AndroidJUnit4; 15 import androidx.test.filters.SmallTest; 16 17 import org.junit.After; 18 import org.junit.Before; 19 import org.junit.Rule; 20 import org.junit.Test; 21 import org.junit.runner.RunWith; 22 23 import org.chromium.base.test.util.DoNotBatch; 24 import org.chromium.net.CronetTestRule.CronetImplementation; 25 import org.chromium.net.CronetTestRule.IgnoreFor; 26 27 /** Unit tests for {@code MockCertVerifier}. */ 28 @RunWith(AndroidJUnit4.class) 29 @DoNotBatch(reason = "crbug/1459563") 30 @IgnoreFor( 31 implementations = {CronetImplementation.FALLBACK, CronetImplementation.AOSP_PLATFORM}, 32 reason = "MockCertVerifier is supported only by the native implementation") 33 public class MockCertVerifierTest { 34 @Rule public final CronetTestRule mTestRule = CronetTestRule.withManualEngineStartup(); 35 36 @Before setUp()37 public void setUp() throws Exception { 38 // Load library first to create MockCertVerifier. 39 System.loadLibrary("cronet_tests"); 40 41 assertThat(Http2TestServer.startHttp2TestServer(mTestRule.getTestFramework().getContext())) 42 .isTrue(); 43 } 44 45 @After tearDown()46 public void tearDown() throws Exception { 47 assertThat(Http2TestServer.shutdownHttp2TestServer()).isTrue(); 48 } 49 50 @Test 51 @SmallTest testRequest_failsWithoutMockVerifierBeforeNougat()52 public void testRequest_failsWithoutMockVerifierBeforeNougat() { 53 assume().that(Build.VERSION.SDK_INT).isLessThan(Build.VERSION_CODES.N); 54 String url = Http2TestServer.getEchoAllHeadersUrl(); 55 TestUrlRequestCallback callback = startAndWaitForComplete(url); 56 assertThat(callback.mError).isNotNull(); 57 assertThat(callback.mError).hasMessageThat().contains("ERR_CERT_AUTHORITY_INVALID"); 58 } 59 60 @Test 61 @SmallTest testRequest_passesWithMockVerifierBeforeNougat()62 public void testRequest_passesWithMockVerifierBeforeNougat() { 63 assume().that(Build.VERSION.SDK_INT).isLessThan(Build.VERSION_CODES.N); 64 mTestRule 65 .getTestFramework() 66 .applyEngineBuilderPatch( 67 (builder) -> 68 CronetTestUtil.setMockCertVerifierForTesting( 69 builder, 70 MockCertVerifier.createFreeForAllMockCertVerifier())); 71 72 String url = Http2TestServer.getEchoAllHeadersUrl(); 73 TestUrlRequestCallback callback = startAndWaitForComplete(url); 74 assertThat(callback.getResponseInfoWithChecks()).hasHttpStatusCodeThat().isEqualTo(200); 75 } 76 77 @Test 78 @SmallTest testRequest_passesWithoutMockVerifierAfterMarshmallow()79 public void testRequest_passesWithoutMockVerifierAfterMarshmallow() { 80 assume().that(Build.VERSION.SDK_INT).isGreaterThan(Build.VERSION_CODES.M); 81 String url = Http2TestServer.getEchoAllHeadersUrl(); 82 TestUrlRequestCallback callback = startAndWaitForComplete(url); 83 assertThat(callback.getResponseInfoWithChecks()).hasHttpStatusCodeThat().isEqualTo(200); 84 } 85 startAndWaitForComplete(String url)86 private TestUrlRequestCallback startAndWaitForComplete(String url) { 87 TestUrlRequestCallback callback = new TestUrlRequestCallback(); 88 UrlRequest.Builder builder = 89 mTestRule 90 .getTestFramework() 91 .startEngine() 92 .newUrlRequestBuilder(url, callback, callback.getExecutor()); 93 builder.build().start(); 94 callback.blockForDone(); 95 return callback; 96 } 97 } 98