• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 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.impl;
6 
7 import static com.google.common.truth.Truth.assertThat;
8 import static com.google.common.truth.Truth.assertWithMessage;
9 
10 import android.os.Bundle;
11 
12 import androidx.test.ext.junit.runners.AndroidJUnit4;
13 import androidx.test.filters.SmallTest;
14 
15 import org.junit.Before;
16 import org.junit.Rule;
17 import org.junit.Test;
18 import org.junit.runner.RunWith;
19 
20 import org.chromium.base.test.util.Batch;
21 import org.chromium.net.CronetTestRule;
22 import org.chromium.net.CronetTestRule.CronetTestFramework;
23 import org.chromium.net.impl.CronetLogger.CronetSource;
24 
25 /** Tests {@link CronetManifest} */
26 @Batch(Batch.UNIT_TESTS)
27 @RunWith(AndroidJUnit4.class)
28 public class CronetManifestTest {
29     @Rule public final CronetTestRule mTestRule = CronetTestRule.withManualEngineStartup();
30 
31     public CronetTestFramework mCronetTestFramework;
32 
33     @Before
setUp()34     public void setUp() {
35         mCronetTestFramework = mTestRule.getTestFramework();
36     }
37 
setTelemetryOptIn(boolean value)38     private void setTelemetryOptIn(boolean value) {
39         Bundle metaData = new Bundle();
40         metaData.putBoolean(CronetManifest.ENABLE_TELEMETRY_META_DATA_KEY, value);
41         mCronetTestFramework.interceptContext(new CronetManifestInterceptor(metaData));
42     }
43 
44     @Test
45     @SmallTest
testTelemetryOptIn_whenNoMetadata()46     public void testTelemetryOptIn_whenNoMetadata() throws Exception {
47         // simulates an empty metadata file to avoid clashes with other manifest files added
48         // to test binary.
49         mCronetTestFramework.interceptContext(new CronetManifestInterceptor(new Bundle()));
50         for (CronetSource source : CronetSource.values()) {
51             switch (source) {
52                 case CRONET_SOURCE_STATICALLY_LINKED:
53                     assertWithMessage("Check failed for " + source)
54                             .that(
55                                     CronetManifest.isAppOptedInForTelemetry(
56                                             mCronetTestFramework.getContext(), source))
57                             .isFalse();
58                     break;
59                 case CRONET_SOURCE_PLATFORM:
60                     assertWithMessage("Check failed for " + source)
61                             .that(
62                                     CronetManifest.isAppOptedInForTelemetry(
63                                             mCronetTestFramework.getContext(), source))
64                             .isTrue();
65                     break;
66                 case CRONET_SOURCE_PLAY_SERVICES:
67                     assertWithMessage("Check failed for " + source)
68                             .that(
69                                     CronetManifest.isAppOptedInForTelemetry(
70                                             mCronetTestFramework.getContext(), source))
71                             .isTrue();
72                     break;
73                 case CRONET_SOURCE_FALLBACK:
74                     assertWithMessage("Check failed for " + source)
75                             .that(
76                                     CronetManifest.isAppOptedInForTelemetry(
77                                             mCronetTestFramework.getContext(), source))
78                             .isFalse();
79                     break;
80                 case CRONET_SOURCE_UNSPECIFIED:
81                     // This shouldn't happen, but for safety check that it will be disabled.
82                     assertWithMessage("Check failed for " + source)
83                             .that(
84                                     CronetManifest.isAppOptedInForTelemetry(
85                                             mCronetTestFramework.getContext(), source))
86                             .isFalse();
87                     break;
88             }
89         }
90     }
91 
92     @Test
93     @SmallTest
testTelemetryOptIn_whenMetadataIsTrue()94     public void testTelemetryOptIn_whenMetadataIsTrue() throws Exception {
95         setTelemetryOptIn(true);
96         for (CronetSource source : CronetSource.values()) {
97             assertWithMessage("Check failed for " + source)
98                     .that(
99                             CronetManifest.isAppOptedInForTelemetry(
100                                     mCronetTestFramework.getContext(), source))
101                     .isTrue();
102         }
103     }
104 
105     @Test
106     @SmallTest
testTelemetryOptIn_whenMetadataIsFalse()107     public void testTelemetryOptIn_whenMetadataIsFalse() throws Exception {
108         setTelemetryOptIn(false);
109         for (CronetSource source : CronetSource.values()) {
110             assertWithMessage("Check failed for " + source)
111                     .that(
112                             CronetManifest.isAppOptedInForTelemetry(
113                                     mCronetTestFramework.getContext(), source))
114                     .isFalse();
115         }
116     }
117 
setReadHttpFlags(boolean value)118     private void setReadHttpFlags(boolean value) {
119         Bundle metaData = new Bundle();
120         metaData.putBoolean(CronetManifest.READ_HTTP_FLAGS_META_DATA_KEY, value);
121         mCronetTestFramework.interceptContext(new CronetManifestInterceptor(metaData));
122     }
123 
124     @Test
125     @SmallTest
testShouldReadHttpFlags_whenNoMetadata()126     public void testShouldReadHttpFlags_whenNoMetadata() throws Exception {
127         assertThat(CronetManifest.shouldReadHttpFlags(mCronetTestFramework.getContext())).isFalse();
128     }
129 
130     @Test
131     @SmallTest
testShouldReadHttpFlags_whenMetadataIsTrue()132     public void testShouldReadHttpFlags_whenMetadataIsTrue() throws Exception {
133         setReadHttpFlags(true);
134         assertThat(CronetManifest.shouldReadHttpFlags(mCronetTestFramework.getContext())).isTrue();
135     }
136 
137     @Test
138     @SmallTest
testShouldReadHttpFlags_whenMetadataIsFalse()139     public void testShouldReadHttpFlags_whenMetadataIsFalse() throws Exception {
140         setReadHttpFlags(false);
141         assertThat(CronetManifest.shouldReadHttpFlags(mCronetTestFramework.getContext())).isFalse();
142     }
143 }
144