From bb16b75b6722dcc859feb18fb22c69c3ca67efa4 Mon Sep 17 00:00:00 2001 From: Hugo Benichi Date: Thu, 14 Dec 2017 09:56:04 +0900 Subject: [PATCH] Fix default network validation overcounting When switching from a validated default network to a new validated default network (typically because of a better score), DefaultNetworkMetrics would not reset the last validation timestamp. This would cause the new default network to have a total recorded validation time overcounted by the validation time of the previous default network. The following fix should be applied downstream for consumers of previously recorded data: validation_time = min validation_time, duration_time); Test: runtest -x frameworks/base/tests/net/../IpConnectivityMetricsTest Change-Id: I303d11023527c19435f5f5e796a0295ae3f76d9f --- .../android/server/connectivity/DefaultNetworkMetrics.java | 3 ++- .../server/connectivity/IpConnectivityMetricsTest.java | 4 +--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java b/services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java index bd2e96ed4ef2f..e43d1526f760d 100644 --- a/services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java +++ b/services/core/java/com/android/server/connectivity/DefaultNetworkMetrics.java @@ -150,7 +150,8 @@ public class DefaultNetworkMetrics { fillLinkInfo(ev, newNai); ev.initialScore = newNai.getCurrentScore(); if (newNai.lastValidated) { - logDefaultNetworkValidity(timeMs, true); + mIsCurrentlyValid = true; + mLastValidationTimeMs = timeMs; } } else { mIsCurrentlyValid = false; diff --git a/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java b/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java index 9f2cb921ea8e1..8359fe2a8fb4b 100644 --- a/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java +++ b/tests/net/java/com/android/server/connectivity/IpConnectivityMetricsTest.java @@ -66,7 +66,6 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -175,7 +174,6 @@ public class IpConnectivityMetricsTest { } @Test - @Ignore public void testDefaultNetworkEvents() throws Exception { final long cell = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_CELLULAR}); final long wifi = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_WIFI}); @@ -294,7 +292,6 @@ public class IpConnectivityMetricsTest { } @Test - @Ignore public void testEndToEndLogging() throws Exception { // TODO: instead of comparing textpb to textpb, parse textpb and compare proto to proto. IpConnectivityLog logger = new IpConnectivityLog(mService.impl); @@ -635,6 +632,7 @@ public class IpConnectivityMetricsTest { when(nai.getCurrentScore()).thenReturn(score); nai.linkProperties = new LinkProperties(); nai.networkCapabilities = new NetworkCapabilities(); + nai.lastValidated = true; for (int t : BitUtils.unpackBits(transports)) { nai.networkCapabilities.addTransportType(t); }