Merge "Skip tests in CtsNetTestCases module if feature not supported" into main
This commit is contained in:
@@ -18,6 +18,7 @@ package android.net.cts;
|
|||||||
|
|
||||||
import static android.Manifest.permission.UPDATE_DEVICE_STATS;
|
import static android.Manifest.permission.UPDATE_DEVICE_STATS;
|
||||||
import static android.content.pm.PackageManager.FEATURE_TELEPHONY;
|
import static android.content.pm.PackageManager.FEATURE_TELEPHONY;
|
||||||
|
import static android.content.pm.PackageManager.FEATURE_WIFI;
|
||||||
|
|
||||||
import static androidx.test.InstrumentationRegistry.getContext;
|
import static androidx.test.InstrumentationRegistry.getContext;
|
||||||
|
|
||||||
@@ -118,8 +119,10 @@ public class BatteryStatsManagerTest{
|
|||||||
// side effect is the point of using --write here.
|
// side effect is the point of using --write here.
|
||||||
executeShellCommand("dumpsys batterystats --write");
|
executeShellCommand("dumpsys batterystats --write");
|
||||||
|
|
||||||
// Make sure wifi is disabled.
|
if (mPm.hasSystemFeature(FEATURE_WIFI)) {
|
||||||
mCtsNetUtils.ensureWifiDisconnected(null /* wifiNetworkToCheck */);
|
// Make sure wifi is disabled.
|
||||||
|
mCtsNetUtils.ensureWifiDisconnected(null /* wifiNetworkToCheck */);
|
||||||
|
}
|
||||||
|
|
||||||
verifyGetCellBatteryStats();
|
verifyGetCellBatteryStats();
|
||||||
verifyGetWifiBatteryStats();
|
verifyGetWifiBatteryStats();
|
||||||
@@ -128,6 +131,9 @@ public class BatteryStatsManagerTest{
|
|||||||
// Reset battery settings.
|
// Reset battery settings.
|
||||||
executeShellCommand("dumpsys batterystats disable no-auto-reset");
|
executeShellCommand("dumpsys batterystats disable no-auto-reset");
|
||||||
executeShellCommand("cmd battery reset");
|
executeShellCommand("cmd battery reset");
|
||||||
|
if (mPm.hasSystemFeature(FEATURE_WIFI)) {
|
||||||
|
mCtsNetUtils.ensureWifiConnected();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,23 +159,31 @@ public class BatteryStatsManagerTest{
|
|||||||
// The mobile battery stats are updated when a network stops being the default network.
|
// The mobile battery stats are updated when a network stops being the default network.
|
||||||
// ConnectivityService will call BatteryStatsManager.reportMobileRadioPowerState when
|
// ConnectivityService will call BatteryStatsManager.reportMobileRadioPowerState when
|
||||||
// removing data activity tracking.
|
// removing data activity tracking.
|
||||||
mCtsNetUtils.ensureWifiConnected();
|
try {
|
||||||
|
mCtsNetUtils.setMobileDataEnabled(false);
|
||||||
|
|
||||||
// There's rate limit to update mobile battery so if ConnectivityService calls
|
// There's rate limit to update mobile battery so if ConnectivityService calls
|
||||||
// BatteryStatsManager.reportMobileRadioPowerState when default network changed,
|
// BatteryStatsManager.reportMobileRadioPowerState when default network changed,
|
||||||
// the mobile stats might not be updated. But if the mobile update due to other
|
// the mobile stats might not be updated. But if the mobile update due to other
|
||||||
// reasons (plug/unplug, battery level change, etc) will be unaffected. Thus here
|
// reasons (plug/unplug, battery level change, etc) will be unaffected. Thus here
|
||||||
// dumps the battery stats to trigger a full sync of data.
|
// dumps the battery stats to trigger a full sync of data.
|
||||||
executeShellCommand("dumpsys batterystats");
|
executeShellCommand("dumpsys batterystats");
|
||||||
|
|
||||||
// Check cellular battery stats are updated.
|
// Check cellular battery stats are updated.
|
||||||
runAsShell(UPDATE_DEVICE_STATS,
|
runAsShell(UPDATE_DEVICE_STATS,
|
||||||
() -> assertStatsEventually(mBsm::getCellularBatteryStats,
|
() -> assertStatsEventually(mBsm::getCellularBatteryStats,
|
||||||
cellularStatsAfter -> cellularBatteryStatsIncreased(
|
cellularStatsAfter -> cellularBatteryStatsIncreased(
|
||||||
cellularStatsBefore, cellularStatsAfter)));
|
cellularStatsBefore, cellularStatsAfter)));
|
||||||
|
} finally {
|
||||||
|
mCtsNetUtils.setMobileDataEnabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifyGetWifiBatteryStats() throws Exception {
|
private void verifyGetWifiBatteryStats() throws Exception {
|
||||||
|
if (!mPm.hasSystemFeature(FEATURE_WIFI)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final Network wifiNetwork = mCtsNetUtils.ensureWifiConnected();
|
final Network wifiNetwork = mCtsNetUtils.ensureWifiConnected();
|
||||||
final URL url = new URL(TEST_URL);
|
final URL url = new URL(TEST_URL);
|
||||||
|
|
||||||
@@ -199,9 +213,9 @@ public class BatteryStatsManagerTest{
|
|||||||
@Test
|
@Test
|
||||||
public void testReportNetworkInterfaceForTransports_throwsSecurityException()
|
public void testReportNetworkInterfaceForTransports_throwsSecurityException()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Network wifiNetwork = mCtsNetUtils.ensureWifiConnected();
|
final Network network = mCm.getActiveNetwork();
|
||||||
final String iface = mCm.getLinkProperties(wifiNetwork).getInterfaceName();
|
final String iface = mCm.getLinkProperties(network).getInterfaceName();
|
||||||
final int[] transportType = mCm.getNetworkCapabilities(wifiNetwork).getTransportTypes();
|
final int[] transportType = mCm.getNetworkCapabilities(network).getTransportTypes();
|
||||||
assertThrows(SecurityException.class,
|
assertThrows(SecurityException.class,
|
||||||
() -> mBsm.reportNetworkInterfaceForTransports(iface, transportType));
|
() -> mBsm.reportNetworkInterfaceForTransports(iface, transportType));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1025,11 +1025,13 @@ public class ConnectivityManagerTest {
|
|||||||
final String goodPrivateDnsServer = "dns.google";
|
final String goodPrivateDnsServer = "dns.google";
|
||||||
mCtsNetUtils.storePrivateDnsSetting();
|
mCtsNetUtils.storePrivateDnsSetting();
|
||||||
final TestableNetworkCallback cb = new TestableNetworkCallback();
|
final TestableNetworkCallback cb = new TestableNetworkCallback();
|
||||||
registerNetworkCallback(makeWifiNetworkRequest(), cb);
|
final NetworkRequest networkRequest = new NetworkRequest.Builder()
|
||||||
|
.addCapability(NET_CAPABILITY_INTERNET).build();
|
||||||
|
registerNetworkCallback(networkRequest, cb);
|
||||||
|
final Network networkForPrivateDns = mCm.getActiveNetwork();
|
||||||
try {
|
try {
|
||||||
// Verifying the good private DNS sever
|
// Verifying the good private DNS sever
|
||||||
mCtsNetUtils.setPrivateDnsStrictMode(goodPrivateDnsServer);
|
mCtsNetUtils.setPrivateDnsStrictMode(goodPrivateDnsServer);
|
||||||
final Network networkForPrivateDns = mCtsNetUtils.ensureWifiConnected();
|
|
||||||
cb.eventuallyExpect(CallbackEntry.NETWORK_CAPS_UPDATED, NETWORK_CALLBACK_TIMEOUT_MS,
|
cb.eventuallyExpect(CallbackEntry.NETWORK_CAPS_UPDATED, NETWORK_CALLBACK_TIMEOUT_MS,
|
||||||
entry -> hasPrivateDnsValidated(entry, networkForPrivateDns));
|
entry -> hasPrivateDnsValidated(entry, networkForPrivateDns));
|
||||||
|
|
||||||
@@ -1040,8 +1042,11 @@ public class ConnectivityManagerTest {
|
|||||||
.isPrivateDnsBroken()) && networkForPrivateDns.equals(entry.getNetwork()));
|
.isPrivateDnsBroken()) && networkForPrivateDns.equals(entry.getNetwork()));
|
||||||
} finally {
|
} finally {
|
||||||
mCtsNetUtils.restorePrivateDnsSetting();
|
mCtsNetUtils.restorePrivateDnsSetting();
|
||||||
// Toggle wifi to make sure it is re-validated
|
// Toggle network to make sure it is re-validated
|
||||||
reconnectWifi();
|
mCm.reportNetworkConnectivity(networkForPrivateDns, true);
|
||||||
|
cb.eventuallyExpect(CallbackEntry.NETWORK_CAPS_UPDATED, NETWORK_CALLBACK_TIMEOUT_MS,
|
||||||
|
entry -> !(((CallbackEntry.CapabilitiesChanged) entry).getCaps()
|
||||||
|
.isPrivateDnsBroken()) && networkForPrivateDns.equals(entry.getNetwork()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1306,9 +1311,12 @@ public class ConnectivityManagerTest {
|
|||||||
@AppModeFull(reason = "Cannot get WifiManager in instant app mode")
|
@AppModeFull(reason = "Cannot get WifiManager in instant app mode")
|
||||||
@Test
|
@Test
|
||||||
public void testRequestNetworkCallback_onUnavailable() {
|
public void testRequestNetworkCallback_onUnavailable() {
|
||||||
final boolean previousWifiEnabledState = mWifiManager.isWifiEnabled();
|
boolean previousWifiEnabledState = false;
|
||||||
if (previousWifiEnabledState) {
|
if (mPackageManager.hasSystemFeature(FEATURE_WIFI)) {
|
||||||
mCtsNetUtils.ensureWifiDisconnected(null);
|
previousWifiEnabledState = mWifiManager.isWifiEnabled();
|
||||||
|
if (previousWifiEnabledState) {
|
||||||
|
mCtsNetUtils.ensureWifiDisconnected(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final TestNetworkCallback callback = new TestNetworkCallback();
|
final TestNetworkCallback callback = new TestNetworkCallback();
|
||||||
@@ -1344,6 +1352,8 @@ public class ConnectivityManagerTest {
|
|||||||
@AppModeFull(reason = "Cannot get WifiManager in instant app mode")
|
@AppModeFull(reason = "Cannot get WifiManager in instant app mode")
|
||||||
@Test
|
@Test
|
||||||
public void testToggleWifiConnectivityAction() throws Exception {
|
public void testToggleWifiConnectivityAction() throws Exception {
|
||||||
|
assumeTrue(mPackageManager.hasSystemFeature(FEATURE_WIFI));
|
||||||
|
|
||||||
// toggleWifi calls connectToWifi and disconnectFromWifi, which both wait for
|
// toggleWifi calls connectToWifi and disconnectFromWifi, which both wait for
|
||||||
// CONNECTIVITY_ACTION broadcasts.
|
// CONNECTIVITY_ACTION broadcasts.
|
||||||
mCtsNetUtils.toggleWifi();
|
mCtsNetUtils.toggleWifi();
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package android.net.cts.util;
|
package android.net.cts.util;
|
||||||
|
|
||||||
|
import static android.Manifest.permission.MODIFY_PHONE_STATE;
|
||||||
import static android.Manifest.permission.NETWORK_SETTINGS;
|
import static android.Manifest.permission.NETWORK_SETTINGS;
|
||||||
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
|
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
|
||||||
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
||||||
@@ -54,6 +55,8 @@ import android.os.ConditionVariable;
|
|||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.system.Os;
|
import android.system.Os;
|
||||||
import android.system.OsConstants;
|
import android.system.OsConstants;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@@ -566,6 +569,42 @@ public final class CtsNetUtils {
|
|||||||
return testableNetworks.toArray(new Network[0]);
|
return testableNetworks.toArray(new Network[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enables or disables the mobile data and waits for the state to change.
|
||||||
|
*
|
||||||
|
* @param enabled - true to enable, false to disable the mobile data.
|
||||||
|
*/
|
||||||
|
public void setMobileDataEnabled(boolean enabled) throws InterruptedException {
|
||||||
|
final TelephonyManager tm = mContext.getSystemService(TelephonyManager.class)
|
||||||
|
.createForSubscriptionId(SubscriptionManager.getDefaultDataSubscriptionId());
|
||||||
|
final NetworkRequest request = new NetworkRequest.Builder()
|
||||||
|
.addTransportType(TRANSPORT_CELLULAR)
|
||||||
|
.addCapability(NET_CAPABILITY_INTERNET)
|
||||||
|
.build();
|
||||||
|
final TestNetworkCallback callback = new TestNetworkCallback();
|
||||||
|
mCm.requestNetwork(request, callback);
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!enabled) {
|
||||||
|
assertNotNull("Cannot disable mobile data unless mobile data is connected",
|
||||||
|
callback.waitForAvailable());
|
||||||
|
}
|
||||||
|
|
||||||
|
runAsShell(MODIFY_PHONE_STATE, () -> tm.setDataEnabledForReason(
|
||||||
|
TelephonyManager.DATA_ENABLED_REASON_USER, enabled));
|
||||||
|
if (enabled) {
|
||||||
|
assertNotNull("Enabling mobile data did not connect mobile data",
|
||||||
|
callback.waitForAvailable());
|
||||||
|
} else {
|
||||||
|
assertNotNull("Disabling mobile data did not disconnect mobile data",
|
||||||
|
callback.waitForLost());
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
mCm.unregisterNetworkCallback(callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receiver that captures the last connectivity change's network type and state. Recognizes
|
* Receiver that captures the last connectivity change's network type and state. Recognizes
|
||||||
* both {@code CONNECTIVITY_ACTION} and {@code NETWORK_CALLBACK_ACTION} intents.
|
* both {@code CONNECTIVITY_ACTION} and {@code NETWORK_CALLBACK_ACTION} intents.
|
||||||
|
|||||||
Reference in New Issue
Block a user