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