Refactor buildKeepaliveMetrics to return DailyKeepaliveInfoReported

This also updates the tests and prepares them to assert the other fields
of DailyKeepaliveInfoReported. Currently, only DurationPerNumOfKeepalive
is asserted.

Bug: 273451360
Test: atest FrameworksNetTests
Change-Id: I727849fa8a08d66fe276909b353a75861c23d775
This commit is contained in:
Hansen Kurli
2023-03-31 10:13:29 +00:00
parent a27bc2c913
commit c25133a38b
2 changed files with 87 additions and 27 deletions

View File

@@ -20,6 +20,7 @@ import android.os.SystemClock;
import android.util.Log; import android.util.Log;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.metrics.DailykeepaliveInfoReported;
import com.android.metrics.DurationForNumOfKeepalive; import com.android.metrics.DurationForNumOfKeepalive;
import com.android.metrics.DurationPerNumOfKeepalive; import com.android.metrics.DurationPerNumOfKeepalive;
@@ -159,11 +160,9 @@ public class KeepaliveStatsTracker {
} }
/** /**
* Builds and returns DurationPerNumOfKeepalive proto * Builds and returns DailykeepaliveInfoReported proto.
*
* <p>TODO(b/273451360): Write DailykeepaliveInfoReported metrics to statsd
*/ */
public DurationPerNumOfKeepalive buildKeepaliveMetrics() { public DailykeepaliveInfoReported buildKeepaliveMetrics() {
final long timeNow = mDependencies.getUptimeMillis(); final long timeNow = mDependencies.getUptimeMillis();
updateDurationsPerNumOfKeepalive(timeNow); updateDurationsPerNumOfKeepalive(timeNow);
@@ -175,7 +174,13 @@ public class KeepaliveStatsTracker {
durationPerNumOfKeepalive.addDurationForNumOfKeepalive( durationPerNumOfKeepalive.addDurationForNumOfKeepalive(
durationForNumOfKeepalive)); durationForNumOfKeepalive));
return durationPerNumOfKeepalive.build(); final DailykeepaliveInfoReported.Builder dailyKeepaliveInfoReported =
DailykeepaliveInfoReported.newBuilder();
// TODO(b/273451360): fill all the other values and write to ConnectivityStatsLog.
dailyKeepaliveInfoReported.setDurationPerNumOfKeepalive(durationPerNumOfKeepalive);
return dailyKeepaliveInfoReported.build();
} }
/** Resets the stored metrics but maintains the state of keepalives */ /** Resets the stored metrics but maintains the state of keepalives */

View File

@@ -17,12 +17,15 @@
package com.android.server.connectivity; package com.android.server.connectivity;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import android.os.Build; import android.os.Build;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import com.android.metrics.DailykeepaliveInfoReported;
import com.android.metrics.DurationForNumOfKeepalive; import com.android.metrics.DurationForNumOfKeepalive;
import com.android.metrics.DurationPerNumOfKeepalive; import com.android.metrics.DurationPerNumOfKeepalive;
import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRule;
@@ -38,6 +41,7 @@ import org.mockito.MockitoAnnotations;
@SmallTest @SmallTest
@DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.TIRAMISU) @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.TIRAMISU)
public class KeepaliveStatsTrackerTest { public class KeepaliveStatsTrackerTest {
private static final int TEST_UID = 1234;
private KeepaliveStatsTracker mKeepaliveStatsTracker; private KeepaliveStatsTracker mKeepaliveStatsTracker;
@Mock KeepaliveStatsTracker.Dependencies mDependencies; @Mock KeepaliveStatsTracker.Dependencies mDependencies;
@@ -87,18 +91,38 @@ public class KeepaliveStatsTrackerTest {
} }
} }
private void assertDailyKeepaliveInfoReported(
DailykeepaliveInfoReported dailyKeepaliveInfoReported,
int[] expectRegisteredDurations,
int[] expectActiveDurations) {
// TODO(b/273451360) Assert these values when they are filled.
assertFalse(dailyKeepaliveInfoReported.hasKeepaliveLifetimePerCarrier());
assertFalse(dailyKeepaliveInfoReported.hasKeepaliveRequests());
assertFalse(dailyKeepaliveInfoReported.hasAutomaticKeepaliveRequests());
assertFalse(dailyKeepaliveInfoReported.hasDistinctUserCount());
assertTrue(dailyKeepaliveInfoReported.getUidList().isEmpty());
final DurationPerNumOfKeepalive resultDurations =
dailyKeepaliveInfoReported.getDurationPerNumOfKeepalive();
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
}
@Test @Test
public void testNoKeepalive() { public void testNoKeepalive() {
final int writeTime = 5000; final int writeTime = 5000;
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// Expect that the durations are all in numOfKeepalive = 0. // Expect that the durations are all in numOfKeepalive = 0.
final int[] expectRegisteredDurations = new int[] {writeTime}; final int[] expectRegisteredDurations = new int[] {writeTime};
final int[] expectActiveDurations = new int[] {writeTime}; final int[] expectActiveDurations = new int[] {writeTime};
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
} }
/* /*
@@ -117,14 +141,17 @@ public class KeepaliveStatsTrackerTest {
mKeepaliveStatsTracker.onStartKeepalive(); mKeepaliveStatsTracker.onStartKeepalive();
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// The keepalive is never stopped, expect the duration for numberOfKeepalive of 1 to range // The keepalive is never stopped, expect the duration for numberOfKeepalive of 1 to range
// from startTime to writeTime. // from startTime to writeTime.
final int[] expectRegisteredDurations = new int[] {startTime, writeTime - startTime}; final int[] expectRegisteredDurations = new int[] {startTime, writeTime - startTime};
final int[] expectActiveDurations = new int[] {startTime, writeTime - startTime}; final int[] expectActiveDurations = new int[] {startTime, writeTime - startTime};
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
} }
/* /*
@@ -147,7 +174,7 @@ public class KeepaliveStatsTrackerTest {
mKeepaliveStatsTracker.onPauseKeepalive(); mKeepaliveStatsTracker.onPauseKeepalive();
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// The keepalive is paused but not stopped, expect the registered duration for // The keepalive is paused but not stopped, expect the registered duration for
@@ -156,7 +183,10 @@ public class KeepaliveStatsTrackerTest {
final int[] expectRegisteredDurations = new int[] {startTime, writeTime - startTime}; final int[] expectRegisteredDurations = new int[] {startTime, writeTime - startTime};
final int[] expectActiveDurations = final int[] expectActiveDurations =
new int[] {startTime + (writeTime - pauseTime), pauseTime - startTime}; new int[] {startTime + (writeTime - pauseTime), pauseTime - startTime};
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
} }
/* /*
@@ -183,7 +213,7 @@ public class KeepaliveStatsTrackerTest {
mKeepaliveStatsTracker.onResumeKeepalive(); mKeepaliveStatsTracker.onResumeKeepalive();
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// The keepalive is paused and resumed but not stopped, expect the registered duration for // The keepalive is paused and resumed but not stopped, expect the registered duration for
@@ -195,7 +225,10 @@ public class KeepaliveStatsTrackerTest {
startTime + (resumeTime - pauseTime), startTime + (resumeTime - pauseTime),
(pauseTime - startTime) + (writeTime - resumeTime) (pauseTime - startTime) + (writeTime - resumeTime)
}; };
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
} }
/* /*
@@ -226,7 +259,7 @@ public class KeepaliveStatsTrackerTest {
mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true); mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true);
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// The keepalive is now stopped, expect the registered duration for numberOfKeepalive of 1 // The keepalive is now stopped, expect the registered duration for numberOfKeepalive of 1
@@ -239,7 +272,10 @@ public class KeepaliveStatsTrackerTest {
startTime + (resumeTime - pauseTime) + (writeTime - stopTime), startTime + (resumeTime - pauseTime) + (writeTime - stopTime),
(pauseTime - startTime) + (stopTime - resumeTime) (pauseTime - startTime) + (stopTime - resumeTime)
}; };
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
} }
/* /*
@@ -266,7 +302,7 @@ public class KeepaliveStatsTrackerTest {
mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ false); mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ false);
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// The keepalive is stopped while paused, expect the registered duration for // The keepalive is stopped while paused, expect the registered duration for
@@ -276,7 +312,10 @@ public class KeepaliveStatsTrackerTest {
new int[] {startTime + (writeTime - stopTime), stopTime - startTime}; new int[] {startTime + (writeTime - stopTime), stopTime - startTime};
final int[] expectActiveDurations = final int[] expectActiveDurations =
new int[] {startTime + (writeTime - pauseTime), (pauseTime - startTime)}; new int[] {startTime + (writeTime - pauseTime), (pauseTime - startTime)};
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
} }
/* /*
@@ -310,7 +349,7 @@ public class KeepaliveStatsTrackerTest {
mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true); mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true);
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
final int[] expectRegisteredDurations = final int[] expectRegisteredDurations =
@@ -322,7 +361,10 @@ public class KeepaliveStatsTrackerTest {
+ /* sum of (Pause - Resume) */ (700) + /* sum of (Pause - Resume) */ (700)
+ (stopTime - pauseResumeTimes[5]) + (stopTime - pauseResumeTimes[5])
}; };
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
} }
/* /*
@@ -367,7 +409,7 @@ public class KeepaliveStatsTrackerTest {
mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true); mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true);
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// With two keepalives, the number of concurrent keepalives can vary from 0-2 depending on // With two keepalives, the number of concurrent keepalives can vary from 0-2 depending on
@@ -380,6 +422,7 @@ public class KeepaliveStatsTrackerTest {
// 2 registered keepalives between keepalive2 start and keepalive1 stop. // 2 registered keepalives between keepalive2 start and keepalive1 stop.
stopTime1 - startTime2 stopTime1 - startTime2
}; };
final int[] expectActiveDurations = final int[] expectActiveDurations =
new int[] { new int[] {
// 0 active keepalives when keepalive1 is paused before keepalive2 starts. // 0 active keepalives when keepalive1 is paused before keepalive2 starts.
@@ -395,7 +438,10 @@ public class KeepaliveStatsTrackerTest {
// 2 active keepalives before keepalive2 is paused and before keepalive1 stops. // 2 active keepalives before keepalive2 is paused and before keepalive1 stops.
(pauseTime2 - resumeTime1) + (stopTime1 - resumeTime2) (pauseTime2 - resumeTime1) + (stopTime1 - resumeTime2)
}; };
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
} }
/* /*
@@ -416,34 +462,43 @@ public class KeepaliveStatsTrackerTest {
mKeepaliveStatsTracker.onStartKeepalive(); mKeepaliveStatsTracker.onStartKeepalive();
setUptimeMillis(writeTime); setUptimeMillis(writeTime);
final DurationPerNumOfKeepalive resultDurations = final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// Same expect as testOneKeepalive_startOnly // Same expect as testOneKeepalive_startOnly
final int[] expectRegisteredDurations = new int[] {startTime, writeTime - startTime}; final int[] expectRegisteredDurations = new int[] {startTime, writeTime - startTime};
final int[] expectActiveDurations = new int[] {startTime, writeTime - startTime}; final int[] expectActiveDurations = new int[] {startTime, writeTime - startTime};
assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
expectRegisteredDurations,
expectActiveDurations);
// Reset metrics // Reset metrics
mKeepaliveStatsTracker.resetMetrics(); mKeepaliveStatsTracker.resetMetrics();
final DurationPerNumOfKeepalive resultDurations2 = final DailykeepaliveInfoReported dailyKeepaliveInfoReported2 =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
// Expect the stored durations to be 0 but still contain the number of keepalive = 1. // Expect the stored durations to be 0 but still contain the number of keepalive = 1.
assertDurationMetrics(new int[] {0, 0}, new int[] {0, 0}, resultDurations2); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported2,
/* expectRegisteredDurations= */ new int[] {0, 0},
/* expectActiveDurations= */ new int[] {0, 0});
// Expect that the keepalive is still registered after resetting so it can be stopped. // Expect that the keepalive is still registered after resetting so it can be stopped.
setUptimeMillis(stopTime); setUptimeMillis(stopTime);
mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true); mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true);
setUptimeMillis(writeTime2); setUptimeMillis(writeTime2);
final DurationPerNumOfKeepalive resultDurations3 = final DailykeepaliveInfoReported dailyKeepaliveInfoReported3 =
mKeepaliveStatsTracker.buildKeepaliveMetrics(); mKeepaliveStatsTracker.buildKeepaliveMetrics();
final int[] expectRegisteredDurations2 = final int[] expectRegisteredDurations2 =
new int[] {writeTime2 - stopTime, stopTime - writeTime}; new int[] {writeTime2 - stopTime, stopTime - writeTime};
final int[] expectActiveDurations2 = final int[] expectActiveDurations2 =
new int[] {writeTime2 - stopTime, stopTime - writeTime}; new int[] {writeTime2 - stopTime, stopTime - writeTime};
assertDurationMetrics(expectRegisteredDurations2, expectActiveDurations2, resultDurations3); assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported3,
expectRegisteredDurations2,
expectActiveDurations2);
} }
} }