• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 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 
9 import static org.junit.Assert.fail;
10 
11 import android.os.Build;
12 
13 import androidx.test.ext.junit.runners.AndroidJUnit4;
14 import androidx.test.filters.SmallTest;
15 
16 import org.junit.After;
17 import org.junit.Before;
18 import org.junit.Rule;
19 import org.junit.Test;
20 import org.junit.rules.TestName;
21 import org.junit.runner.RunWith;
22 
23 import org.chromium.base.test.util.Batch;
24 import org.chromium.net.CronetTestRule.CronetImplementation;
25 import org.chromium.net.CronetTestRule.IgnoreFor;
26 import org.chromium.net.CronetTestRule.RequiresMinAndroidApi;
27 import org.chromium.net.CronetTestRule.RequiresMinApi;
28 import org.chromium.net.impl.CronetUrlRequestContext;
29 import org.chromium.net.impl.JavaCronetEngine;
30 
31 /** Tests features of CronetTestRule. */
32 @RunWith(AndroidJUnit4.class)
33 @Batch(Batch.UNIT_TESTS)
34 public class CronetTestRuleTest {
35     @Rule public final CronetTestRule mTestRule = CronetTestRule.withAutomaticEngineStartup();
36     @Rule public final TestName mTestName = new TestName();
37 
38     /**
39      * For any test whose name contains "MustRun", it's enforced that the test must run and set
40      * {@code mTestWasRun} to {@code true}.
41      */
42     private boolean mTestWasRun;
43 
44     /**
45      * This is used by testAllImplsMustRun. That test relies on the fact that reruns for multiple
46      * implementations do not re-instantiate the test class (instead, only setUp is run again). This
47      * means that "modifications" applied to a class variable will be visible to reruns of the same
48      * test that target a different Cronet implementation.
49      */
50     private int mNumberOfReruns;
51 
52     private boolean mFallbackImplWasRun;
53     private boolean mNativeImplWasRun;
54     private boolean mPlatformImplWasRun;
55 
56     @Before
setUp()57     public void setUp() throws Exception {
58         mTestWasRun = false;
59     }
60 
61     @After
tearDown()62     public void tearDown() throws Exception {
63         if (mTestName.getMethodName().contains("MustRun") && !mTestWasRun) {
64             fail(mTestName.getMethodName() + " should have run but didn't.");
65         }
66     }
67 
68     @Test
69     @SmallTest
70     @RequiresMinApi(999999999)
testRequiresMinApiDisable()71     public void testRequiresMinApiDisable() {
72         fail("RequiresMinApi failed to disable.");
73     }
74 
75     @Test
76     @SmallTest
77     @RequiresMinApi(-999999999)
testRequiresMinApiMustRun()78     public void testRequiresMinApiMustRun() {
79         mTestWasRun = true;
80     }
81 
82     /**
83      * This test relies on seeing reruns side-effects through {@code mNumberOfReruns}. More info in
84      * {@code mNumberOfReruns}'s Javadoc.
85      */
86     @Test
87     @SmallTest
testAllImplsMustRun()88     public void testAllImplsMustRun() {
89         assertThat(mTestWasRun).isFalse();
90         mTestWasRun = true;
91         mNumberOfReruns++;
92         assertThat(mNumberOfReruns).isLessThan(4);
93         switch (mTestRule.implementationUnderTest()) {
94             case STATICALLY_LINKED:
95                 assertThat(mNativeImplWasRun).isFalse();
96                 mNativeImplWasRun = true;
97                 break;
98             case FALLBACK:
99                 assertThat(mFallbackImplWasRun).isFalse();
100                 mFallbackImplWasRun = true;
101                 break;
102             case AOSP_PLATFORM:
103                 assertThat(mPlatformImplWasRun).isFalse();
104                 mPlatformImplWasRun = true;
105                 break;
106         }
107         if (mNumberOfReruns == 3) {
108             assertThat(mFallbackImplWasRun).isTrue();
109             assertThat(mPlatformImplWasRun).isTrue();
110             assertThat(mNativeImplWasRun).isTrue();
111         }
112     }
113 
114     @Test
115     @SmallTest
116     @IgnoreFor(
117             implementations = {CronetImplementation.FALLBACK, CronetImplementation.AOSP_PLATFORM},
118             reason = "Testing the rule")
testRunOnlyNativeMustRun()119     public void testRunOnlyNativeMustRun() {
120         assertThat(mTestRule.testingJavaImpl()).isFalse();
121         assertThat(mTestRule.implementationUnderTest())
122                 .isEqualTo(CronetImplementation.STATICALLY_LINKED);
123         assertThat(mTestWasRun).isFalse();
124         mTestWasRun = true;
125         assertThat(mTestRule.getTestFramework().getEngine())
126                 .isInstanceOf(CronetUrlRequestContext.class);
127     }
128 
129     @Test
130     @SmallTest
131     @IgnoreFor(
132             implementations = {
133                 CronetImplementation.STATICALLY_LINKED,
134                 CronetImplementation.AOSP_PLATFORM
135             },
136             reason = "Testing the rule")
testRunOnlyJavaMustRun()137     public void testRunOnlyJavaMustRun() {
138         assertThat(mTestRule.testingJavaImpl()).isTrue();
139         assertThat(mTestRule.implementationUnderTest()).isEqualTo(CronetImplementation.FALLBACK);
140         assertThat(mTestWasRun).isFalse();
141         mTestWasRun = true;
142         assertThat(mTestRule.getTestFramework().getEngine()).isInstanceOf(JavaCronetEngine.class);
143     }
144 
145     @Test
146     @SmallTest
147     @IgnoreFor(
148             implementations = {
149                 CronetImplementation.STATICALLY_LINKED,
150                 CronetImplementation.FALLBACK
151             },
152             reason = "Testing the rule")
153     @RequiresMinAndroidApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
testRunOnlyAospPlatformMustRun()154     public void testRunOnlyAospPlatformMustRun() {
155         assertThat(mTestRule.testingJavaImpl()).isFalse();
156         assertThat(mTestRule.implementationUnderTest())
157                 .isEqualTo(CronetImplementation.AOSP_PLATFORM);
158         assertThat(mTestWasRun).isFalse();
159         mTestWasRun = true;
160         assertThat(mTestRule.getTestFramework().getEngine())
161                 .isNotInstanceOf(JavaCronetEngine.class);
162         assertThat(mTestRule.getTestFramework().getEngine())
163                 .isNotInstanceOf(CronetUrlRequestContext.class);
164     }
165 }
166