Merge "Mock the getRunningProcesses method in SystemStateInterface" into sc-dev
diff --git a/tests/carservice_test/src/com/android/car/CarStorageMonitoringTest.java b/tests/carservice_test/src/com/android/car/CarStorageMonitoringTest.java
index 7fb9066..237796b 100644
--- a/tests/carservice_test/src/com/android/car/CarStorageMonitoringTest.java
+++ b/tests/carservice_test/src/com/android/car/CarStorageMonitoringTest.java
@@ -44,6 +44,7 @@
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.filters.MediumTest;
 
+import com.android.car.procfsinspector.ProcessInfo;
 import com.android.car.storagemonitoring.LifetimeWriteInfoProvider;
 import com.android.car.storagemonitoring.UidIoStatsProvider;
 import com.android.car.storagemonitoring.WearEstimateRecord;
@@ -54,6 +55,7 @@
 import com.android.car.systeminterface.SystemInterface;
 import com.android.car.systeminterface.SystemStateInterface;
 import com.android.car.systeminterface.TimeInterface;
+import com.android.internal.annotations.GuardedBy;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -71,6 +73,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /** Test the public entry points for the CarStorageMonitoringManager */
 @RunWith(AndroidJUnit4.class)
@@ -483,6 +486,7 @@
             oldRecord1000.background_write_bytes,
             oldRecord1000.background_fsync);
 
+        mMockSystemStateInterface.addProcess(1, 1000);
         mMockStorageMonitoringInterface.addIoStatsRecord(newRecord1000);
 
         UidIoRecord record2000 = new UidIoRecord(2000,
@@ -497,6 +501,7 @@
             0,
             0);
 
+        mMockSystemStateInterface.addProcess(1, 2000);
         mMockStorageMonitoringInterface.addIoStatsRecord(record2000);
 
         mMockTimeInterface.tick();
@@ -618,6 +623,7 @@
         mCarStorageMonitoringManager.registerListener(listener2);
 
         mMockStorageMonitoringInterface.addIoStatsRecord(record);
+        mMockSystemStateInterface.addProcess(1, 0);
         mMockTimeInterface.setUptime(500).tick();
 
         assertTrue(listener1.waitForEvent(eventDeliveryDeadline));
@@ -893,6 +899,9 @@
 
     static final class MockSystemStateInterface implements SystemStateInterface {
         private final List<Pair<Runnable, Duration>> mActionsList = new ArrayList<>();
+        private final Object mLock = new Object();
+        @GuardedBy("mLock")
+        private final List<ProcessInfo> mProcesses = new ArrayList<>();
 
         @Override
         public void shutdown() {}
@@ -908,10 +917,30 @@
             mActionsList.sort(Comparator.comparing(d -> d.second));
         }
 
+        @Override
+        public List<ProcessInfo> getRunningProcesses() {
+            synchronized (mLock) {
+                return mProcesses;
+            }
+        }
+
         void executeBootCompletedActions() {
             for (Pair<Runnable, Duration> action : mActionsList) {
                 action.first.run();
             }
         }
+
+        void addProcess(int pid, int uid) {
+            synchronized (mLock) {
+                mProcesses.add(new ProcessInfo(pid, uid));
+            }
+        }
+
+        void removeUserProcesses(int uid) {
+            synchronized (mLock) {
+                mProcesses.removeAll(mProcesses.stream().filter(pi -> pi.uid == uid)
+                        .collect(Collectors.toList()));
+            }
+        }
     }
 }