blob: a3d16bf5706a21e9fec987b03a6d36cc3103449e [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.net.impl;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import android.os.Bundle;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.util.Batch;
import org.chromium.net.CronetTestRule;
import org.chromium.net.CronetTestRule.CronetTestFramework;
import org.chromium.net.impl.CronetLogger.CronetSource;
/** Tests {@link CronetManifest} */
@Batch(Batch.UNIT_TESTS)
@RunWith(AndroidJUnit4.class)
public class CronetManifestTest {
@Rule public final CronetTestRule mTestRule = CronetTestRule.withManualEngineStartup();
public CronetTestFramework mCronetTestFramework;
@Before
public void setUp() {
mCronetTestFramework = mTestRule.getTestFramework();
}
private void setTelemetryOptIn(boolean value) {
Bundle metaData = new Bundle();
metaData.putBoolean(CronetManifest.ENABLE_TELEMETRY_META_DATA_KEY, value);
mCronetTestFramework.interceptContext(new CronetManifestInterceptor(metaData));
}
@Test
@SmallTest
public void testTelemetryOptIn_whenNoMetadata() throws Exception {
// simulates an empty metadata file to avoid clashes with other manifest files added
// to test binary.
mCronetTestFramework.interceptContext(new CronetManifestInterceptor(new Bundle()));
for (CronetSource source : CronetSource.values()) {
switch (source) {
case CRONET_SOURCE_STATICALLY_LINKED:
assertWithMessage("Check failed for " + source)
.that(
CronetManifest.isAppOptedInForTelemetry(
mCronetTestFramework.getContext(), source))
.isFalse();
break;
case CRONET_SOURCE_PLATFORM:
assertWithMessage("Check failed for " + source)
.that(
CronetManifest.isAppOptedInForTelemetry(
mCronetTestFramework.getContext(), source))
.isTrue();
break;
case CRONET_SOURCE_PLAY_SERVICES:
assertWithMessage("Check failed for " + source)
.that(
CronetManifest.isAppOptedInForTelemetry(
mCronetTestFramework.getContext(), source))
.isTrue();
break;
case CRONET_SOURCE_FALLBACK:
assertWithMessage("Check failed for " + source)
.that(
CronetManifest.isAppOptedInForTelemetry(
mCronetTestFramework.getContext(), source))
.isFalse();
break;
case CRONET_SOURCE_UNSPECIFIED:
// This shouldn't happen, but for safety check that it will be disabled.
assertWithMessage("Check failed for " + source)
.that(
CronetManifest.isAppOptedInForTelemetry(
mCronetTestFramework.getContext(), source))
.isFalse();
break;
}
}
}
@Test
@SmallTest
public void testTelemetryOptIn_whenMetadataIsTrue() throws Exception {
setTelemetryOptIn(true);
for (CronetSource source : CronetSource.values()) {
assertWithMessage("Check failed for " + source)
.that(
CronetManifest.isAppOptedInForTelemetry(
mCronetTestFramework.getContext(), source))
.isTrue();
}
}
@Test
@SmallTest
public void testTelemetryOptIn_whenMetadataIsFalse() throws Exception {
setTelemetryOptIn(false);
for (CronetSource source : CronetSource.values()) {
assertWithMessage("Check failed for " + source)
.that(
CronetManifest.isAppOptedInForTelemetry(
mCronetTestFramework.getContext(), source))
.isFalse();
}
}
private void setReadHttpFlags(boolean value) {
Bundle metaData = new Bundle();
metaData.putBoolean(CronetManifest.READ_HTTP_FLAGS_META_DATA_KEY, value);
mCronetTestFramework.interceptContext(new CronetManifestInterceptor(metaData));
}
@Test
@SmallTest
public void testShouldReadHttpFlags_whenNoMetadata() throws Exception {
assertThat(CronetManifest.shouldReadHttpFlags(mCronetTestFramework.getContext())).isFalse();
}
@Test
@SmallTest
public void testShouldReadHttpFlags_whenMetadataIsTrue() throws Exception {
setReadHttpFlags(true);
assertThat(CronetManifest.shouldReadHttpFlags(mCronetTestFramework.getContext())).isTrue();
}
@Test
@SmallTest
public void testShouldReadHttpFlags_whenMetadataIsFalse() throws Exception {
setReadHttpFlags(false);
assertThat(CronetManifest.shouldReadHttpFlags(mCronetTestFramework.getContext())).isFalse();
}
}