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
diff --git a/service/src/com/android/server/connectivity/KeepaliveStatsTracker.java b/service/src/com/android/server/connectivity/KeepaliveStatsTracker.java
index c461809..290d201 100644
--- a/service/src/com/android/server/connectivity/KeepaliveStatsTracker.java
+++ b/service/src/com/android/server/connectivity/KeepaliveStatsTracker.java
@@ -20,6 +20,7 @@
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.metrics.DailykeepaliveInfoReported;
 import com.android.metrics.DurationForNumOfKeepalive;
 import com.android.metrics.DurationPerNumOfKeepalive;
 
@@ -159,11 +160,9 @@
     }
 
     /**
-     * Builds and returns DurationPerNumOfKeepalive proto
-     *
-     * <p>TODO(b/273451360): Write DailykeepaliveInfoReported metrics to statsd
+     * Builds and returns DailykeepaliveInfoReported proto.
      */
-    public DurationPerNumOfKeepalive buildKeepaliveMetrics() {
+    public DailykeepaliveInfoReported buildKeepaliveMetrics() {
         final long timeNow = mDependencies.getUptimeMillis();
         updateDurationsPerNumOfKeepalive(timeNow);
 
@@ -175,7 +174,13 @@
                         durationPerNumOfKeepalive.addDurationForNumOfKeepalive(
                                 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 */
diff --git a/tests/unit/java/com/android/server/connectivity/KeepaliveStatsTrackerTest.java b/tests/unit/java/com/android/server/connectivity/KeepaliveStatsTrackerTest.java
index 8837ba1..d262255 100644
--- a/tests/unit/java/com/android/server/connectivity/KeepaliveStatsTrackerTest.java
+++ b/tests/unit/java/com/android/server/connectivity/KeepaliveStatsTrackerTest.java
@@ -17,12 +17,15 @@
 package com.android.server.connectivity;
 
 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 android.os.Build;
 
 import androidx.test.filters.SmallTest;
 
+import com.android.metrics.DailykeepaliveInfoReported;
 import com.android.metrics.DurationForNumOfKeepalive;
 import com.android.metrics.DurationPerNumOfKeepalive;
 import com.android.testutils.DevSdkIgnoreRule;
@@ -38,6 +41,7 @@
 @SmallTest
 @DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.TIRAMISU)
 public class KeepaliveStatsTrackerTest {
+    private static final int TEST_UID = 1234;
 
     private KeepaliveStatsTracker mKeepaliveStatsTracker;
     @Mock KeepaliveStatsTracker.Dependencies mDependencies;
@@ -87,18 +91,38 @@
         }
     }
 
+    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
     public void testNoKeepalive() {
         final int writeTime = 5000;
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         // Expect that the durations are all in numOfKeepalive = 0.
         final int[] expectRegisteredDurations = new int[] {writeTime};
         final int[] expectActiveDurations = new int[] {writeTime};
-        assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
+
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported,
+                expectRegisteredDurations,
+                expectActiveDurations);
     }
 
     /*
@@ -117,14 +141,17 @@
         mKeepaliveStatsTracker.onStartKeepalive();
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         // The keepalive is never stopped, expect the duration for numberOfKeepalive of 1 to range
         // from startTime to writeTime.
         final int[] expectRegisteredDurations = 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 @@
         mKeepaliveStatsTracker.onPauseKeepalive();
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         // The keepalive is paused but not stopped, expect the registered duration for
@@ -156,7 +183,10 @@
         final int[] expectRegisteredDurations = new int[] {startTime, writeTime - startTime};
         final int[] expectActiveDurations =
                 new int[] {startTime + (writeTime - pauseTime), pauseTime - startTime};
-        assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported,
+                expectRegisteredDurations,
+                expectActiveDurations);
     }
 
     /*
@@ -183,7 +213,7 @@
         mKeepaliveStatsTracker.onResumeKeepalive();
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         // The keepalive is paused and resumed but not stopped, expect the registered duration for
@@ -195,7 +225,10 @@
                     startTime + (resumeTime - pauseTime),
                     (pauseTime - startTime) + (writeTime - resumeTime)
                 };
-        assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported,
+                expectRegisteredDurations,
+                expectActiveDurations);
     }
 
     /*
@@ -226,7 +259,7 @@
         mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true);
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         // The keepalive is now stopped, expect the registered duration for numberOfKeepalive of 1
@@ -239,7 +272,10 @@
                     startTime + (resumeTime - pauseTime) + (writeTime - stopTime),
                     (pauseTime - startTime) + (stopTime - resumeTime)
                 };
-        assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported,
+                expectRegisteredDurations,
+                expectActiveDurations);
     }
 
     /*
@@ -266,7 +302,7 @@
         mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ false);
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         // The keepalive is stopped while paused, expect the registered duration for
@@ -276,7 +312,10 @@
                 new int[] {startTime + (writeTime - stopTime), stopTime - startTime};
         final int[] expectActiveDurations =
                 new int[] {startTime + (writeTime - pauseTime), (pauseTime - startTime)};
-        assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported,
+                expectRegisteredDurations,
+                expectActiveDurations);
     }
 
     /*
@@ -310,7 +349,7 @@
         mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true);
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         final int[] expectRegisteredDurations =
@@ -322,7 +361,10 @@
                             + /* sum of (Pause - Resume) */ (700)
                             + (stopTime - pauseResumeTimes[5])
                 };
-        assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported,
+                expectRegisteredDurations,
+                expectActiveDurations);
     }
 
     /*
@@ -367,7 +409,7 @@
         mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true);
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         // With two keepalives, the number of concurrent keepalives can vary from 0-2 depending on
@@ -380,6 +422,7 @@
                     // 2 registered keepalives between keepalive2 start and keepalive1 stop.
                     stopTime1 - startTime2
                 };
+
         final int[] expectActiveDurations =
                 new int[] {
                     // 0 active keepalives when keepalive1 is paused before keepalive2 starts.
@@ -395,7 +438,10 @@
                     // 2 active keepalives before keepalive2 is paused and before keepalive1 stops.
                     (pauseTime2 - resumeTime1) + (stopTime1 - resumeTime2)
                 };
-        assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported,
+                expectRegisteredDurations,
+                expectActiveDurations);
     }
 
     /*
@@ -416,34 +462,43 @@
         mKeepaliveStatsTracker.onStartKeepalive();
 
         setUptimeMillis(writeTime);
-        final DurationPerNumOfKeepalive resultDurations =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         // Same expect as testOneKeepalive_startOnly
         final int[] expectRegisteredDurations = new int[] {startTime, writeTime - startTime};
         final int[] expectActiveDurations = new int[] {startTime, writeTime - startTime};
-        assertDurationMetrics(expectRegisteredDurations, expectActiveDurations, resultDurations);
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported,
+                expectRegisteredDurations,
+                expectActiveDurations);
 
         // Reset metrics
         mKeepaliveStatsTracker.resetMetrics();
 
-        final DurationPerNumOfKeepalive resultDurations2 =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported2 =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
         // 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.
         setUptimeMillis(stopTime);
         mKeepaliveStatsTracker.onStopKeepalive(/* wasActive= */ true);
 
         setUptimeMillis(writeTime2);
-        final DurationPerNumOfKeepalive resultDurations3 =
+        final DailykeepaliveInfoReported dailyKeepaliveInfoReported3 =
                 mKeepaliveStatsTracker.buildKeepaliveMetrics();
 
         final int[] expectRegisteredDurations2 =
                 new int[] {writeTime2 - stopTime, stopTime - writeTime};
         final int[] expectActiveDurations2 =
                 new int[] {writeTime2 - stopTime, stopTime - writeTime};
-        assertDurationMetrics(expectRegisteredDurations2, expectActiveDurations2, resultDurations3);
+        assertDailyKeepaliveInfoReported(
+                dailyKeepaliveInfoReported3,
+                expectRegisteredDurations2,
+                expectActiveDurations2);
     }
 }