Skip to content
Snippets Groups Projects
Commit 30fb9b1c authored by Chalard Jean's avatar Chalard Jean
Browse files

Make PRIORITIZE_* networks non-default

As a specialized network, a network with PRIORITIZE_* is not
generally a good default network, and might cause unexpected
charges if allowed to become one.

Test: CSDefaultNetworkTests
Change-Id: I8f7184f80bb987da720bd067862bd7a546a38e26
parent cc2e7273
No related branches found
No related tags found
No related merge requests found
......@@ -79,6 +79,8 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN;
import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PAID;
import static android.net.NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE;
import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY;
import static android.net.NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH;
import static android.net.NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY;
import static android.net.NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.NET_ENTERPRISE_ID_1;
......@@ -1923,6 +1925,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
final NetworkCapabilities netCap = new NetworkCapabilities();
netCap.addCapability(NET_CAPABILITY_INTERNET);
netCap.addCapability(NET_CAPABILITY_NOT_VCN_MANAGED);
netCap.addForbiddenCapability(NET_CAPABILITY_PRIORITIZE_LATENCY);
netCap.addForbiddenCapability(NET_CAPABILITY_PRIORITIZE_BANDWIDTH);
netCap.setRequestorUidAndPackageName(Process.myUid(), mContext.getPackageName());
if (transportType > TYPE_NONE) {
netCap.addTransportType(transportType);
......
package com.android.server.connectivityservice
import android.net.NetworkCapabilities
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED
import android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED
import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
import android.net.NetworkRequest
import android.os.Build
import com.android.server.CSTest
import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo
import com.android.testutils.DevSdkIgnoreRunner
import com.android.testutils.RecorderCallback.CallbackEntry.Lost
import com.android.testutils.TestableNetworkCallback
import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertNull
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET as NET_CAP_INTERNET
import android.net.NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH as NET_CAP_PRIO_BW
private fun netCaps(transport: Int, vararg cap: Int): NetworkCapabilities =
NetworkCapabilities.Builder().apply {
addTransportType(transport)
// Standard caps that everybody in this test file needs
addCapability(NET_CAPABILITY_NOT_SUSPENDED)
addCapability(NET_CAPABILITY_NOT_VCN_MANAGED)
addCapability(NET_CAPABILITY_NOT_RESTRICTED)
cap.forEach { addCapability(it) }
}.build()
@RunWith(DevSdkIgnoreRunner::class)
@IgnoreUpTo(Build.VERSION_CODES.R)
class CSDefaultNetworkTest : CSTest() {
@Test
fun testSlicesAreNotDefault() {
val keepSliceUpRequest = NetworkRequest.Builder().clearCapabilities()
.addCapability(NET_CAP_PRIO_BW)
.build()
val keepSliceUpCb = TestableNetworkCallback()
cm.requestNetwork(keepSliceUpRequest, keepSliceUpCb)
val nonSlice = Agent(nc = netCaps(TRANSPORT_CELLULAR, NET_CAP_INTERNET))
val slice = Agent(nc = netCaps(TRANSPORT_CELLULAR, NET_CAP_INTERNET, NET_CAP_PRIO_BW))
val allCb = TestableNetworkCallback()
val bestCb = TestableNetworkCallback()
val defaultCb = TestableNetworkCallback()
val allNetRequest = NetworkRequest.Builder().clearCapabilities().build()
cm.registerNetworkCallback(allNetRequest, allCb)
cm.registerBestMatchingNetworkCallback(allNetRequest, bestCb, csHandler)
cm.registerDefaultNetworkCallback(defaultCb)
nonSlice.connect()
allCb.expectAvailableCallbacks(nonSlice.network, validated = false)
keepSliceUpCb.assertNoCallback()
bestCb.expectAvailableCallbacks(nonSlice.network, validated = false)
defaultCb.expectAvailableCallbacks(nonSlice.network, validated = false)
slice.connect()
allCb.expectAvailableCallbacks(slice.network, validated = false)
keepSliceUpCb.expectAvailableCallbacks(slice.network, validated = false)
bestCb.assertNoCallback()
defaultCb.assertNoCallback()
nonSlice.disconnect()
allCb.expect<Lost>(nonSlice.network)
bestCb.expect<Lost>(nonSlice.network)
bestCb.expectAvailableCallbacks(slice.network, validated = false)
defaultCb.expect<Lost>(nonSlice.network)
allCb.assertNoCallback()
keepSliceUpCb.assertNoCallback()
bestCb.assertNoCallback()
defaultCb.assertNoCallback()
assertNull(cm.activeNetwork)
}
}
......@@ -116,7 +116,8 @@ open class CSTest {
init {
if (!SdkLevel.isAtLeastS()) {
throw UnsupportedApiLevelException("CSTest subclasses must be annotated to only " +
"run on S+, e.g. @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R)")
"run on S+, e.g. @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.R) and " +
"@RunWith(DevSdkIgnoreRunner::class)")
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment