Compute range-based usage in NetworkStatsHistory. am: 512b757b08

Original change: undetermined

Change-Id: Ic2fd06be8f80ec569942c4c29b5ade668aee3c83
This commit is contained in:
Jeff Sharkey
2021-05-31 04:23:29 +00:00
committed by Automerger Merge Worker

View File

@@ -133,9 +133,80 @@ public class NetworkStatsHistoryTest extends TestCase {
assertBucket(stats, 1, 512L, 512L);
}
public void testRecordEntireGapIdentical() throws Exception {
final long[] total = new long[2];
// first, create two separate histories far apart
final NetworkStatsHistory stats1 = new NetworkStatsHistory(HOUR_IN_MILLIS);
stats1.recordData(TEST_START, TEST_START + 2 * HOUR_IN_MILLIS, 2000L, 1000L);
final long TEST_START_2 = TEST_START + DAY_IN_MILLIS;
final NetworkStatsHistory stats2 = new NetworkStatsHistory(HOUR_IN_MILLIS);
stats2.recordData(TEST_START_2, TEST_START_2 + 2 * HOUR_IN_MILLIS, 1000L, 500L);
// combine together with identical bucket size
stats = new NetworkStatsHistory(HOUR_IN_MILLIS);
stats.recordEntireHistory(stats1);
stats.recordEntireHistory(stats2);
// first verify that totals match up
stats.getTotalData(TEST_START - WEEK_IN_MILLIS, TEST_START + WEEK_IN_MILLIS, total);
assertTotalEquals(total, 3000L, 1500L);
// now inspect internal buckets
assertBucket(stats, 0, 1000L, 500L);
assertBucket(stats, 1, 1000L, 500L);
assertBucket(stats, 2, 500L, 250L);
assertBucket(stats, 3, 500L, 250L);
}
public void testRecordEntireOverlapVaryingBuckets() throws Exception {
final long[] total = new long[2];
// create history just over hour bucket boundary
final NetworkStatsHistory stats1 = new NetworkStatsHistory(HOUR_IN_MILLIS);
stats1.recordData(TEST_START, TEST_START + MINUTE_IN_MILLIS * 60, 600L, 600L);
final long TEST_START_2 = TEST_START + MINUTE_IN_MILLIS;
final NetworkStatsHistory stats2 = new NetworkStatsHistory(MINUTE_IN_MILLIS);
stats2.recordData(TEST_START_2, TEST_START_2 + MINUTE_IN_MILLIS * 5, 50L, 50L);
// combine together with minute bucket size
stats = new NetworkStatsHistory(MINUTE_IN_MILLIS);
stats.recordEntireHistory(stats1);
stats.recordEntireHistory(stats2);
// first verify that totals match up
stats.getTotalData(TEST_START - WEEK_IN_MILLIS, TEST_START + WEEK_IN_MILLIS, total);
assertTotalEquals(total, 650L, 650L);
// now inspect internal buckets
assertBucket(stats, 0, 10L, 10L);
assertBucket(stats, 1, 20L, 20L);
assertBucket(stats, 2, 20L, 20L);
assertBucket(stats, 3, 20L, 20L);
assertBucket(stats, 4, 20L, 20L);
assertBucket(stats, 5, 20L, 20L);
assertBucket(stats, 6, 10L, 10L);
// now combine using 15min buckets
stats = new NetworkStatsHistory(HOUR_IN_MILLIS / 4);
stats.recordEntireHistory(stats1);
stats.recordEntireHistory(stats2);
// first verify that totals match up
stats.getTotalData(TEST_START - WEEK_IN_MILLIS, TEST_START + WEEK_IN_MILLIS, total);
assertTotalEquals(total, 650L, 650L);
// and inspect buckets
assertBucket(stats, 0, 200L, 200L);
assertBucket(stats, 1, 150L, 150L);
assertBucket(stats, 2, 150L, 150L);
assertBucket(stats, 3, 150L, 150L);
}
public void testRemove() throws Exception {
final long BUCKET_SIZE = HOUR_IN_MILLIS;
stats = new NetworkStatsHistory(BUCKET_SIZE);
stats = new NetworkStatsHistory(HOUR_IN_MILLIS);
// record some data across 24 buckets
stats.recordData(TEST_START, TEST_START + DAY_IN_MILLIS, 24L, 24L);
@@ -163,6 +234,37 @@ public class NetworkStatsHistoryTest extends TestCase {
assertEquals(0, stats.bucketCount);
}
public void testTotalData() throws Exception {
final long BUCKET_SIZE = HOUR_IN_MILLIS;
stats = new NetworkStatsHistory(BUCKET_SIZE);
// record uniform data across day
stats.recordData(TEST_START, TEST_START + DAY_IN_MILLIS, 2400L, 4800L);
final long[] total = new long[2];
// verify that total outside range is 0
stats.getTotalData(TEST_START - WEEK_IN_MILLIS, TEST_START - DAY_IN_MILLIS, total);
assertTotalEquals(total, 0, 0);
// verify total in first hour
stats.getTotalData(TEST_START, TEST_START + HOUR_IN_MILLIS, total);
assertTotalEquals(total, 100, 200);
// verify total across 1.5 hours
stats.getTotalData(TEST_START, TEST_START + (long) (1.5 * HOUR_IN_MILLIS), total);
assertTotalEquals(total, 150, 300);
// verify total beyond end
stats.getTotalData(TEST_START + (23 * HOUR_IN_MILLIS), TEST_START + WEEK_IN_MILLIS, total);
assertTotalEquals(total, 100, 200);
// verify everything total
stats.getTotalData(TEST_START - WEEK_IN_MILLIS, TEST_START + WEEK_IN_MILLIS, total);
assertTotalEquals(total, 2400, 4800);
}
@Suppress
public void testFuzzing() throws Exception {
try {
@@ -196,6 +298,11 @@ public class NetworkStatsHistoryTest extends TestCase {
}
}
private static void assertTotalEquals(long[] total, long rx, long tx) {
assertEquals("unexpected rx", rx, total[0]);
assertEquals("unexpected tx", tx, total[1]);
}
private static void assertBucket(NetworkStatsHistory stats, int index, long rx, long tx) {
assertEquals("unexpected rx", rx, stats.rx[index]);
assertEquals("unexpected tx", tx, stats.tx[index]);