• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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