Merge changes I1cf472bd,Ibdaf2b23,I6967ad6f,I65f522c2,I0f220d1f, ...

* changes:
  Make the temporary NC sanitized instead of inlining
  Remove the legacy int from FullScore.
  Remove accessors for legacy int score from NAI
  Log the creation time of network agents
  Show time taken by the rematch
  Address some IDE warnings in ConnectivityService
  Copy arguments from NetworkAgent registration early
This commit is contained in:
Paul Hu
2022-08-10 01:41:43 +00:00
committed by Gerrit Code Review
8 changed files with 204 additions and 258 deletions

View File

@@ -18,6 +18,8 @@ package com.android.server.connectivity
import android.net.NetworkAgentConfig
import android.net.NetworkCapabilities
import android.net.NetworkScore
import android.net.NetworkScore.KEEP_CONNECTED_FOR_HANDOVER
import android.net.NetworkScore.KEEP_CONNECTED_NONE
import android.os.Build
import android.text.TextUtils
@@ -25,6 +27,7 @@ import android.util.ArraySet
import android.util.Log
import androidx.test.filters.SmallTest
import com.android.server.connectivity.FullScore.MAX_CS_MANAGED_POLICY
import com.android.server.connectivity.FullScore.MIN_CS_MANAGED_POLICY
import com.android.server.connectivity.FullScore.POLICY_ACCEPT_UNVALIDATED
import com.android.server.connectivity.FullScore.POLICY_EVER_USER_SELECTED
import com.android.server.connectivity.FullScore.POLICY_IS_DESTROYED
@@ -40,6 +43,7 @@ import org.junit.runner.RunWith
import kotlin.reflect.full.staticProperties
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertNotEquals
import kotlin.test.assertTrue
@RunWith(DevSdkIgnoreRunner::class)
@@ -82,34 +86,11 @@ class FullScoreTest {
Log.setWtfHandler(wtfHandler)
}
@Test
fun testGetLegacyInt() {
val ns = FullScore(50, 0L /* policy */, KEEP_CONNECTED_NONE)
assertEquals(10, ns.legacyInt) // -40 penalty for not being validated
assertEquals(50, ns.legacyIntAsValidated)
val vpnNs = FullScore(101, 0L /* policy */, KEEP_CONNECTED_NONE).withPolicies(vpn = true)
assertEquals(101, vpnNs.legacyInt) // VPNs are not subject to unvalidation penalty
assertEquals(101, vpnNs.legacyIntAsValidated)
assertEquals(101, vpnNs.withPolicies(validated = true).legacyInt)
assertEquals(101, vpnNs.withPolicies(validated = true).legacyIntAsValidated)
val validatedNs = ns.withPolicies(validated = true)
assertEquals(50, validatedNs.legacyInt) // No penalty, this is validated
assertEquals(50, validatedNs.legacyIntAsValidated)
val chosenNs = ns.withPolicies(onceChosen = true)
assertEquals(10, chosenNs.legacyInt)
assertEquals(100, chosenNs.legacyIntAsValidated)
assertEquals(10, chosenNs.withPolicies(acceptUnvalidated = true).legacyInt)
assertEquals(50, chosenNs.withPolicies(acceptUnvalidated = true).legacyIntAsValidated)
}
@Test
fun testToString() {
val string = FullScore(10, 0L /* policy */, KEEP_CONNECTED_NONE)
val string = FullScore(0L /* policy */, KEEP_CONNECTED_NONE)
.withPolicies(vpn = true, acceptUnvalidated = true).toString()
assertTrue(string.contains("Score(10"), string)
assertTrue(string.contains("Score("), string)
assertTrue(string.contains("ACCEPT_UNVALIDATED"), string)
assertTrue(string.contains("IS_VPN"), string)
assertFalse(string.contains("IS_VALIDATED"), string)
@@ -131,7 +112,7 @@ class FullScoreTest {
@Test
fun testHasPolicy() {
val ns = FullScore(50, 0L /* policy */, KEEP_CONNECTED_NONE)
val ns = FullScore(0L /* policy */, KEEP_CONNECTED_NONE)
assertFalse(ns.hasPolicy(POLICY_IS_VALIDATED))
assertFalse(ns.hasPolicy(POLICY_IS_VPN))
assertFalse(ns.hasPolicy(POLICY_EVER_USER_SELECTED))
@@ -148,12 +129,23 @@ class FullScoreTest {
val policies = getAllPolicies()
policies.forEach { policy ->
assertTrue(policy.get() as Int >= FullScore.MIN_CS_MANAGED_POLICY)
assertTrue(policy.get() as Int <= FullScore.MAX_CS_MANAGED_POLICY)
assertTrue(policy.get() as Int >= MIN_CS_MANAGED_POLICY)
assertTrue(policy.get() as Int <= MAX_CS_MANAGED_POLICY)
}
assertEquals(FullScore.MIN_CS_MANAGED_POLICY,
policies.minOfOrNull { it.get() as Int })
assertEquals(FullScore.MAX_CS_MANAGED_POLICY,
policies.maxOfOrNull { it.get() as Int })
assertEquals(MIN_CS_MANAGED_POLICY, policies.minOfOrNull { it.get() as Int })
assertEquals(MAX_CS_MANAGED_POLICY, policies.maxOfOrNull { it.get() as Int })
}
@Test
fun testEquals() {
val ns1 = FullScore(0L /* policy */, KEEP_CONNECTED_NONE)
val ns2 = FullScore(0L /* policy */, KEEP_CONNECTED_NONE)
val ns3 = FullScore(0L /* policy */, KEEP_CONNECTED_FOR_HANDOVER)
val ns4 = NetworkScore.Builder().setLegacyInt(50).build()
assertEquals(ns1, ns1)
assertEquals(ns2, ns1)
assertNotEquals(ns1.withPolicies(validated = true), ns1)
assertNotEquals(ns3, ns1)
assertFalse(ns1.equals(ns4))
}
}

View File

@@ -138,18 +138,16 @@ public class IpConnectivityMetricsTest {
private void logDefaultNetworkEvent(long timeMs, NetworkAgentInfo nai,
NetworkAgentInfo oldNai) {
final Network network = (nai != null) ? nai.network() : null;
final int score = (nai != null) ? nai.getCurrentScore() : 0;
final boolean validated = (nai != null) ? nai.lastValidated : false;
final LinkProperties lp = (nai != null) ? nai.linkProperties : null;
final NetworkCapabilities nc = (nai != null) ? nai.networkCapabilities : null;
final Network prevNetwork = (oldNai != null) ? oldNai.network() : null;
final int prevScore = (oldNai != null) ? oldNai.getCurrentScore() : 0;
final LinkProperties prevLp = (oldNai != null) ? oldNai.linkProperties : null;
final NetworkCapabilities prevNc = (oldNai != null) ? oldNai.networkCapabilities : null;
mService.mDefaultNetworkMetrics.logDefaultNetworkEvent(timeMs, network, score, validated,
lp, nc, prevNetwork, prevScore, prevLp, prevNc);
mService.mDefaultNetworkMetrics.logDefaultNetworkEvent(timeMs, network, 0 /* legacyScore */,
validated, lp, nc, prevNetwork, 0 /* prevLegacyScore */, prevLp, prevNc);
}
@Test
public void testDefaultNetworkEvents() throws Exception {
@@ -158,15 +156,15 @@ public class IpConnectivityMetricsTest {
NetworkAgentInfo[][] defaultNetworks = {
// nothing -> cell
{null, makeNai(100, 10, false, true, cell)},
{null, makeNai(100, false, true, cell)},
// cell -> wifi
{makeNai(100, 50, true, true, cell), makeNai(101, 20, true, false, wifi)},
{makeNai(100, true, true, cell), makeNai(101, true, false, wifi)},
// wifi -> nothing
{makeNai(101, 60, true, false, wifi), null},
{makeNai(101, true, false, wifi), null},
// nothing -> cell
{null, makeNai(102, 10, true, true, cell)},
{null, makeNai(102, true, true, cell)},
// cell -> wifi
{makeNai(102, 50, true, true, cell), makeNai(103, 20, true, false, wifi)},
{makeNai(102, true, true, cell), makeNai(103, true, false, wifi)},
};
long timeMs = mService.mDefaultNetworkMetrics.creationTimeMs;
@@ -204,8 +202,8 @@ public class IpConnectivityMetricsTest {
" transports: 1",
" default_network_event <",
" default_network_duration_ms: 2002",
" final_score: 50",
" initial_score: 10",
" final_score: 0",
" initial_score: 0",
" ip_support: 3",
" no_default_network_duration_ms: 0",
" previous_default_network_link_layer: 0",
@@ -221,8 +219,8 @@ public class IpConnectivityMetricsTest {
" transports: 2",
" default_network_event <",
" default_network_duration_ms: 4004",
" final_score: 60",
" initial_score: 20",
" final_score: 0",
" initial_score: 0",
" ip_support: 1",
" no_default_network_duration_ms: 0",
" previous_default_network_link_layer: 2",
@@ -255,8 +253,8 @@ public class IpConnectivityMetricsTest {
" transports: 1",
" default_network_event <",
" default_network_duration_ms: 16016",
" final_score: 50",
" initial_score: 10",
" final_score: 0",
" initial_score: 0",
" ip_support: 3",
" no_default_network_duration_ms: 0",
" previous_default_network_link_layer: 4",
@@ -348,8 +346,8 @@ public class IpConnectivityMetricsTest {
long timeMs = mService.mDefaultNetworkMetrics.creationTimeMs;
final long cell = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
final long wifi = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_WIFI});
NetworkAgentInfo cellNai = makeNai(100, 50, false, true, cell);
NetworkAgentInfo wifiNai = makeNai(101, 60, true, false, wifi);
final NetworkAgentInfo cellNai = makeNai(100, false, true, cell);
final NetworkAgentInfo wifiNai = makeNai(101, true, false, wifi);
logDefaultNetworkEvent(timeMs + 200L, cellNai, null);
logDefaultNetworkEvent(timeMs + 300L, wifiNai, cellNai);
@@ -463,8 +461,8 @@ public class IpConnectivityMetricsTest {
" transports: 1",
" default_network_event <",
" default_network_duration_ms: 100",
" final_score: 50",
" initial_score: 50",
" final_score: 0",
" initial_score: 0",
" ip_support: 2",
" no_default_network_duration_ms: 0",
" previous_default_network_link_layer: 0",
@@ -611,10 +609,9 @@ public class IpConnectivityMetricsTest {
mNetdListener.onWakeupEvent(prefix, uid, ether, ip, mac, srcIp, dstIp, sport, dport, now);
}
NetworkAgentInfo makeNai(int netId, int score, boolean ipv4, boolean ipv6, long transports) {
NetworkAgentInfo makeNai(int netId, boolean ipv4, boolean ipv6, long transports) {
NetworkAgentInfo nai = mock(NetworkAgentInfo.class);
when(nai.network()).thenReturn(new Network(netId));
when(nai.getCurrentScore()).thenReturn(score);
nai.linkProperties = new LinkProperties();
nai.networkCapabilities = new NetworkCapabilities();
nai.lastValidated = true;

View File

@@ -42,7 +42,7 @@ class NetworkOfferTest {
@Test
fun testOfferNeededUnneeded() {
val score = FullScore(50, POLICY_NONE, KEEP_CONNECTED_NONE)
val score = FullScore(POLICY_NONE, KEEP_CONNECTED_NONE)
val offer = NetworkOffer(score, NetworkCapabilities.Builder().build(), mockCallback,
1 /* providerId */)
val request1 = mock(NetworkRequest::class.java)

View File

@@ -33,7 +33,7 @@ import org.junit.Test
import org.junit.runner.RunWith
import kotlin.test.assertEquals
private fun score(vararg policies: Int) = FullScore(0,
private fun score(vararg policies: Int) = FullScore(
policies.fold(0L) { acc, e -> acc or (1L shl e) }, KEEP_CONNECTED_NONE)
private fun caps(transport: Int) = NetworkCapabilities.Builder().addTransportType(transport).build()