Use country and network based initial bitrate estimate.

This changes the default initial bitrate estimate to be country (group) and
network type specific. The existing overwrite still works as before and new
overwrites for the country or specific network types are provided for
customization.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=205972705
This commit is contained in:
tonihei 2018-07-25 04:05:54 -07:00 committed by Oliver Woodman
parent 0287fa21f3
commit 3d55bc78f7

View File

@ -0,0 +1,532 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.upstream;
import static android.Manifest.permission.ACCESS_NETWORK_STATE;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.NetworkInfo.DetailedState;
import android.telephony.TelephonyManager;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.util.ClosedSource;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowApplication;
import org.robolectric.shadows.ShadowConnectivityManager;
import org.robolectric.shadows.ShadowNetworkInfo;
import org.robolectric.shadows.ShadowTelephonyManager;
/** Unit test for {@link CountryAndNetworkTypeBandwidthMeter}. */
@ClosedSource(reason = "Not ready yet")
@RunWith(RobolectricTestRunner.class)
public final class CountryAndNetworkTypeBandwidthMeterTest {
private static final String FAST_COUNTRY_ISO = "EE";
private static final String SLOW_COUNTRY_ISO = "PG";
private ShadowTelephonyManager shadowTelephonyManager;
private ShadowConnectivityManager shadowConnectivityManager;
private NetworkInfo networkInfoOffline;
private NetworkInfo networkInfoWifi;
private NetworkInfo networkInfo2g;
private NetworkInfo networkInfo3g;
private NetworkInfo networkInfo4g;
private NetworkInfo networkInfoEthernet;
@Before
public void setUp() {
ConnectivityManager connectivityManager =
(ConnectivityManager)
RuntimeEnvironment.application.getSystemService(Context.CONNECTIVITY_SERVICE);
shadowConnectivityManager = Shadows.shadowOf(connectivityManager);
TelephonyManager telephonyManager =
(TelephonyManager)
RuntimeEnvironment.application.getSystemService(Context.TELEPHONY_SERVICE);
shadowTelephonyManager = Shadows.shadowOf(telephonyManager);
shadowTelephonyManager.setNetworkCountryIso(FAST_COUNTRY_ISO);
networkInfoOffline =
ShadowNetworkInfo.newInstance(
DetailedState.DISCONNECTED,
ConnectivityManager.TYPE_WIFI,
/* subType= */ 0,
/* isAvailable= */ false,
/* isConnected= */ false);
networkInfoWifi =
ShadowNetworkInfo.newInstance(
DetailedState.CONNECTED,
ConnectivityManager.TYPE_WIFI,
/* subType= */ 0,
/* isAvailable= */ true,
/* isConnected= */ true);
networkInfo2g =
ShadowNetworkInfo.newInstance(
DetailedState.CONNECTED,
ConnectivityManager.TYPE_MOBILE,
TelephonyManager.NETWORK_TYPE_GPRS,
/* isAvailable= */ true,
/* isConnected= */ true);
networkInfo3g =
ShadowNetworkInfo.newInstance(
DetailedState.CONNECTED,
ConnectivityManager.TYPE_MOBILE,
TelephonyManager.NETWORK_TYPE_HSDPA,
/* isAvailable= */ true,
/* isConnected= */ true);
networkInfo4g =
ShadowNetworkInfo.newInstance(
DetailedState.CONNECTED,
ConnectivityManager.TYPE_MOBILE,
TelephonyManager.NETWORK_TYPE_LTE,
/* isAvailable= */ true,
/* isConnected= */ true);
networkInfoEthernet =
ShadowNetworkInfo.newInstance(
DetailedState.CONNECTED,
ConnectivityManager.TYPE_ETHERNET,
/* subType= */ 0,
/* isAvailable= */ true,
/* isConnected= */ true);
}
@Test
public void defaultInitialBitrateEstimate_forWifi_isGreaterThanEstimateFor2G() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterWifi =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateWifi = bandwidthMeterWifi.getBitrateEstimate();
shadowConnectivityManager.setActiveNetworkInfo(networkInfo2g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter2g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate2g = bandwidthMeter2g.getBitrateEstimate();
assertThat(initialEstimateWifi).isGreaterThan(initialEstimate2g);
}
@Test
public void defaultInitialBitrateEstimate_forWifi_isGreaterThanEstimateFor3G() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterWifi =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateWifi = bandwidthMeterWifi.getBitrateEstimate();
shadowConnectivityManager.setActiveNetworkInfo(networkInfo3g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter3g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate3g = bandwidthMeter3g.getBitrateEstimate();
assertThat(initialEstimateWifi).isGreaterThan(initialEstimate3g);
}
@Test
public void defaultInitialBitrateEstimate_forEthernet_isGreaterThanEstimateFor2G() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoEthernet);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterEthernet =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateEthernet = bandwidthMeterEthernet.getBitrateEstimate();
shadowConnectivityManager.setActiveNetworkInfo(networkInfo2g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter2g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate2g = bandwidthMeter2g.getBitrateEstimate();
assertThat(initialEstimateEthernet).isGreaterThan(initialEstimate2g);
}
@Test
public void defaultInitialBitrateEstimate_forEthernet_isGreaterThanEstimateFor3G() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoEthernet);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterEthernet =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateEthernet = bandwidthMeterEthernet.getBitrateEstimate();
shadowConnectivityManager.setActiveNetworkInfo(networkInfo3g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter3g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate3g = bandwidthMeter3g.getBitrateEstimate();
assertThat(initialEstimateEthernet).isGreaterThan(initialEstimate3g);
}
@Test
public void defaultInitialBitrateEstimate_for4G_isGreaterThanEstimateFor2G() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo4g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter4g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate4g = bandwidthMeter4g.getBitrateEstimate();
shadowConnectivityManager.setActiveNetworkInfo(networkInfo2g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter2g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate2g = bandwidthMeter2g.getBitrateEstimate();
assertThat(initialEstimate4g).isGreaterThan(initialEstimate2g);
}
@Test
public void defaultInitialBitrateEstimate_for4G_isGreaterThanEstimateFor3G() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo4g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter4g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate4g = bandwidthMeter4g.getBitrateEstimate();
shadowConnectivityManager.setActiveNetworkInfo(networkInfo3g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter3g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate3g = bandwidthMeter3g.getBitrateEstimate();
assertThat(initialEstimate4g).isGreaterThan(initialEstimate3g);
}
@Test
public void defaultInitialBitrateEstimate_for3G_isGreaterThanEstimateFor2G() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo3g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter3g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate3g = bandwidthMeter3g.getBitrateEstimate();
shadowConnectivityManager.setActiveNetworkInfo(networkInfo2g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter2g =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate2g = bandwidthMeter2g.getBitrateEstimate();
assertThat(initialEstimate3g).isGreaterThan(initialEstimate2g);
}
@Test
public void defaultInitialBitrateEstimate_forOffline_isReasonable() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoOffline);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isGreaterThan(100_000L);
assertThat(initialEstimate).isLessThan(50_000_000L);
}
@Test
public void
defaultInitialBitrateEstimate_forWifi_forFastCountry_isGreaterThanEstimateForSlowCountry() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
shadowTelephonyManager.setNetworkCountryIso(FAST_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterFast =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateFast = bandwidthMeterFast.getBitrateEstimate();
shadowTelephonyManager.setNetworkCountryIso(SLOW_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterSlow =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateSlow = bandwidthMeterSlow.getBitrateEstimate();
assertThat(initialEstimateFast).isGreaterThan(initialEstimateSlow);
}
@Test
public void
defaultInitialBitrateEstimate_forEthernet_forFastCountry_isGreaterThanEstimateForSlowCountry() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoEthernet);
shadowTelephonyManager.setNetworkCountryIso(FAST_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterFast =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateFast = bandwidthMeterFast.getBitrateEstimate();
shadowTelephonyManager.setNetworkCountryIso(SLOW_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterSlow =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateSlow = bandwidthMeterSlow.getBitrateEstimate();
assertThat(initialEstimateFast).isGreaterThan(initialEstimateSlow);
}
@Test
public void
defaultInitialBitrateEstimate_for2G_forFastCountry_isGreaterThanEstimateForSlowCountry() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo2g);
shadowTelephonyManager.setNetworkCountryIso(FAST_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterFast =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateFast = bandwidthMeterFast.getBitrateEstimate();
shadowTelephonyManager.setNetworkCountryIso(SLOW_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterSlow =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateSlow = bandwidthMeterSlow.getBitrateEstimate();
assertThat(initialEstimateFast).isGreaterThan(initialEstimateSlow);
}
@Test
public void
defaultInitialBitrateEstimate_for3G_forFastCountry_isGreaterThanEstimateForSlowCountry() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo3g);
shadowTelephonyManager.setNetworkCountryIso(FAST_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterFast =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateFast = bandwidthMeterFast.getBitrateEstimate();
shadowTelephonyManager.setNetworkCountryIso(SLOW_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterSlow =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateSlow = bandwidthMeterSlow.getBitrateEstimate();
assertThat(initialEstimateFast).isGreaterThan(initialEstimateSlow);
}
@Test
public void
defaultInitialBitrateEstimate_for4g_forFastCountry_isGreaterThanEstimateForSlowCountry() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo4g);
shadowTelephonyManager.setNetworkCountryIso(FAST_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterFast =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateFast = bandwidthMeterFast.getBitrateEstimate();
shadowTelephonyManager.setNetworkCountryIso(SLOW_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterSlow =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateSlow = bandwidthMeterSlow.getBitrateEstimate();
assertThat(initialEstimateFast).isGreaterThan(initialEstimateSlow);
}
@Test
public void initialBitrateEstimateOverwrite_whileConnectedToNetwork_setsInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isEqualTo(123456789);
}
@Test
public void initialBitrateEstimateOverwrite_whileOffline_setsInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoOffline);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isEqualTo(123456789);
}
@Test
public void initialBitrateEstimateOverwrite_forWifi_whileConnectedToWifi_setsInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_WIFI, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isEqualTo(123456789);
}
@Test
public void
initialBitrateEstimateOverwrite_forWifi_whileConnectedToOtherNetwork_doesNotSetInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo2g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_WIFI, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isNotEqualTo(123456789);
}
@Test
public void
initialBitrateEstimateOverwrite_forEthernet_whileConnectedToEthernet_setsInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoEthernet);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_ETHERNET, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isEqualTo(123456789);
}
@Test
public void
initialBitrateEstimateOverwrite_forEthernet_whileConnectedToOtherNetwork_doesNotSetInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo2g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_WIFI, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isNotEqualTo(123456789);
}
@Test
public void initialBitrateEstimateOverwrite_for2G_whileConnectedTo2G_setsInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo2g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_2G, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isEqualTo(123456789);
}
@Test
public void
initialBitrateEstimateOverwrite_for2G_whileConnectedToOtherNetwork_doesNotSetInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_2G, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isNotEqualTo(123456789);
}
@Test
public void initialBitrateEstimateOverwrite_for3G_whileConnectedTo3G_setsInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo3g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_3G, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isEqualTo(123456789);
}
@Test
public void
initialBitrateEstimateOverwrite_for3G_whileConnectedToOtherNetwork_doesNotSetInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_3G, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isNotEqualTo(123456789);
}
@Test
public void initialBitrateEstimateOverwrite_for4G_whileConnectedTo4G_setsInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfo4g);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_4G, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isEqualTo(123456789);
}
@Test
public void
initialBitrateEstimateOverwrite_for4G_whileConnectedToOtherNetwork_doesNotSetInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_4G, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isNotEqualTo(123456789);
}
@Test
public void initialBitrateEstimateOverwrite_forOffline_whileOffline_setsInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoOffline);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_OFFLINE, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isEqualTo(123456789);
}
@Test
public void
initialBitrateEstimateOverwrite_forOffline_whileConnectedToNetwork_doesNotSetInitialEstimate() {
shadowConnectivityManager.setActiveNetworkInfo(networkInfoWifi);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(C.NETWORK_TYPE_OFFLINE, 123456789)
.build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isNotEqualTo(123456789);
}
@Test
public void initialBitrateEstimateOverwrite_forCountry_usesDefaultValuesForCountry() {
shadowTelephonyManager.setNetworkCountryIso(SLOW_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterSlow =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimateSlow = bandwidthMeterSlow.getBitrateEstimate();
shadowTelephonyManager.setNetworkCountryIso(FAST_COUNTRY_ISO);
CountryAndNetworkTypeBandwidthMeter bandwidthMeterFastWithSlowOverwrite =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application)
.setInitialBitrateEstimate(SLOW_COUNTRY_ISO)
.build();
long initialEstimateFastWithSlowOverwrite =
bandwidthMeterFastWithSlowOverwrite.getBitrateEstimate();
assertThat(initialEstimateFastWithSlowOverwrite).isEqualTo(initialEstimateSlow);
}
@Test
public void defaultInitialBitrateEstimate_withoutContext_isReasonable() {
CountryAndNetworkTypeBandwidthMeter bandwidthMeterWithBuilder =
new CountryAndNetworkTypeBandwidthMeter.Builder().build();
long initialEstimateWithBuilder = bandwidthMeterWithBuilder.getBitrateEstimate();
CountryAndNetworkTypeBandwidthMeter bandwidthMeterWithoutBuilder =
new CountryAndNetworkTypeBandwidthMeter();
long initialEstimateWithoutBuilder = bandwidthMeterWithoutBuilder.getBitrateEstimate();
assertThat(initialEstimateWithBuilder).isGreaterThan(100_000L);
assertThat(initialEstimateWithBuilder).isLessThan(50_000_000L);
assertThat(initialEstimateWithoutBuilder).isGreaterThan(100_000L);
assertThat(initialEstimateWithoutBuilder).isLessThan(50_000_000L);
}
@Test
public void defaultInitialBitrateEstimate_withoutAccessNetworkStatePermission_isReasonable() {
ShadowApplication shadowApplication = Shadows.shadowOf(RuntimeEnvironment.application);
shadowApplication.denyPermissions(ACCESS_NETWORK_STATE);
CountryAndNetworkTypeBandwidthMeter bandwidthMeter =
new CountryAndNetworkTypeBandwidthMeter.Builder(RuntimeEnvironment.application).build();
long initialEstimate = bandwidthMeter.getBitrateEstimate();
assertThat(initialEstimate).isGreaterThan(100_000L);
assertThat(initialEstimate).isLessThan(50_000_000L);
}
}