diff --git a/service-t/src/com/android/server/net/NetworkStatsService.java b/service-t/src/com/android/server/net/NetworkStatsService.java index dc09bc2b67..cf1a53ff20 100644 --- a/service-t/src/com/android/server/net/NetworkStatsService.java +++ b/service-t/src/com/android/server/net/NetworkStatsService.java @@ -1468,9 +1468,9 @@ public class NetworkStatsService extends INetworkStatsService.Stub { // We've been using pure XT stats long enough that we no longer need to // splice DEV and XT together. final NetworkStatsHistory history = internalGetHistoryForNetwork(template, flags, FIELD_ALL, - accessLevel, callingUid, start, end); + accessLevel, callingUid, Long.MIN_VALUE, Long.MAX_VALUE); - final long now = System.currentTimeMillis(); + final long now = mClock.millis(); final NetworkStatsHistory.Entry entry = history.getValues(start, end, now, null); final NetworkStats stats = new NetworkStats(end - start, 1); diff --git a/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java index d37ae23558..9293e5c7fe 100644 --- a/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java +++ b/tests/unit/java/com/android/server/net/NetworkStatsServiceTest.java @@ -148,7 +148,10 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.time.Clock; +import java.time.ZoneId; import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; import java.util.Map; import java.util.Objects; import java.util.concurrent.Executor; @@ -1112,6 +1115,40 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { DEFAULT_NETWORK_YES, 1024L, 8L, 512L, 4L, 0); } + @Test + public void testGetLatestSummary() throws Exception { + // Pretend that network comes online. + expectDefaultSettings(); + NetworkStateSnapshot[] states = new NetworkStateSnapshot[]{buildWifiState()}; + expectNetworkStatsSummary(buildEmptyStats()); + expectNetworkStatsUidDetail(buildEmptyStats()); + + mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states), + new UnderlyingNetworkInfo[0]); + + // Increase arbitrary time which does not align to the bucket edge, create some traffic. + incrementCurrentTime(1751000L); + NetworkStats.Entry entry = new NetworkStats.Entry( + TEST_IFACE, UID_ALL, SET_DEFAULT, TAG_NONE, 50L, 5L, 51L, 1L, 3L); + expectNetworkStatsSummary(new NetworkStats(getElapsedRealtime(), 1).insertEntry(entry)); + expectNetworkStatsUidDetail(buildEmptyStats()); + forcePollAndWaitForIdle(); + + // Verify the mocked stats is returned by querying with the range of the latest bucket. + final ZonedDateTime end = + ZonedDateTime.ofInstant(mClock.instant(), ZoneId.systemDefault()); + final ZonedDateTime start = end.truncatedTo(ChronoUnit.HOURS); + NetworkStats stats = mSession.getSummaryForNetwork(buildTemplateWifi(TEST_WIFI_NETWORK_KEY), + start.toInstant().toEpochMilli(), end.toInstant().toEpochMilli()); + assertEquals(1, stats.size()); + assertValues(stats, IFACE_ALL, UID_ALL, SET_ALL, TAG_NONE, METERED_ALL, ROAMING_ALL, + DEFAULT_NETWORK_ALL, 50L, 5L, 51L, 1L, 3L); + + // For getHistoryIntervalForNetwork, only includes buckets that atomically occur in + // the inclusive time range, instead of including the latest bucket. This behavior is + // already documented publicly, refer to {@link NetworkStatsManager#queryDetails}. + } + @Test public void testUidStatsForTransport() throws Exception { // pretend that network comes online