Snap for 10486386 from f53d7665904bf7cb393a2833506bb48a8f42b008 to mainline-ipsec-release

Change-Id: Ibe3809654db213aea4820b18194a5c35f1eb76b9
diff --git a/service/java/com/android/server/healthconnect/migration/MigrationStateManager.java b/service/java/com/android/server/healthconnect/migration/MigrationStateManager.java
index ad48098..56eef38 100644
--- a/service/java/com/android/server/healthconnect/migration/MigrationStateManager.java
+++ b/service/java/com/android/server/healthconnect/migration/MigrationStateManager.java
@@ -130,11 +130,14 @@
         }
     }
 
-    /** Clears all registered {@link StateChangedListener}. Used in testing. */
+    /**
+     * Clears the initialized instance such that {@link #initializeInstance} will create a new
+     * instance, for use in tests.
+     */
     @VisibleForTesting
-    void clearListeners() {
-        synchronized (mLock) {
-            mStateChangedListeners.clear();
+    public static void resetInitializedInstanceForTest() {
+        synchronized (sInstanceLock) {
+            sMigrationStateManager = null;
         }
     }
 
diff --git a/tests/unittests/Android.bp b/tests/unittests/Android.bp
index c733662..d963f10 100644
--- a/tests/unittests/Android.bp
+++ b/tests/unittests/Android.bp
@@ -29,7 +29,7 @@
         "mts-healthfitness",
         "general-tests"
     ],
-    defaults: ["mts-target-sdk-version-current"],
+    defaults: ["mts-target-sdk-version-current", "modules-utils-testable-device-config-defaults"],
     static_libs: [
         "service-healthfitness.impl",
         "framework-healthfitness.impl",
diff --git a/tests/unittests/src/com/android/server/healthconnect/HealthConnectManagerServiceTest.java b/tests/unittests/src/com/android/server/healthconnect/HealthConnectManagerServiceTest.java
index 987c1b3..0413b7d 100644
--- a/tests/unittests/src/com/android/server/healthconnect/HealthConnectManagerServiceTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/HealthConnectManagerServiceTest.java
@@ -39,6 +39,7 @@
 import androidx.test.platform.app.InstrumentationRegistry;
 
 import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.SystemService;
 import com.android.server.appop.AppOpsManagerLocal;
 import com.android.server.healthconnect.backuprestore.BackupRestore;
@@ -47,17 +48,25 @@
 
 import com.google.common.truth.Truth;
 
-import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 public class HealthConnectManagerServiceTest {
+
     private static final String HEALTH_CONNECT_DAILY_JOB_NAMESPACE = "HEALTH_CONNECT_DAILY_JOB";
     private static final String ANDROID_SERVER_PACKAGE_NAME = "com.android.server";
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(PreferenceHelper.class)
+                    .mockStatic(BackupRestore.BackupRestoreJobService.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock Context mContext;
     @Mock private SystemService.TargetUser mMockTargetUser;
     @Mock private JobScheduler mJobScheduler;
@@ -66,19 +75,10 @@
     @Mock private PermissionManager mPermissionManager;
     @Mock private AppOpsManagerLocal mAppOpsManagerLocal;
     @Mock private PreferenceHelper mPreferenceHelper;
-    private MockitoSession mStaticMockSession;
     private HealthConnectManagerService mHealthConnectManagerService;
 
     @Before
     public void setUp() throws PackageManager.NameNotFoundException {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(PreferenceHelper.class)
-                        .mockStatic(BackupRestore.BackupRestoreJobService.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
-
         InstrumentationRegistry.getInstrumentation()
                 .getUiAutomation()
                 .adoptShellPermissionIdentity(Manifest.permission.READ_DEVICE_CONFIG);
@@ -122,11 +122,6 @@
         mHealthConnectManagerService = new HealthConnectManagerService(mContext);
     }
 
-    @After
-    public void tearDown() {
-        mStaticMockSession.finishMocking();
-    }
-
     @Test
     public void testCreateService() {
         Truth.assertThat(mHealthConnectManagerService).isNotNull();
diff --git a/tests/unittests/src/com/android/server/healthconnect/HealthConnectServiceImplTest.java b/tests/unittests/src/com/android/server/healthconnect/HealthConnectServiceImplTest.java
index 29c1d22..5729453 100644
--- a/tests/unittests/src/com/android/server/healthconnect/HealthConnectServiceImplTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/HealthConnectServiceImplTest.java
@@ -58,7 +58,7 @@
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.LocalManagerRegistry;
 import com.android.server.appop.AppOpsManagerLocal;
 import com.android.server.healthconnect.migration.MigrationCleaner;
@@ -72,11 +72,10 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 import java.io.File;
@@ -143,6 +142,16 @@
                     "insertMinDataMigrationSdkExtensionVersion",
                     "asBinder");
 
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(Environment.class)
+                    .mockStatic(PreferenceHelper.class)
+                    .mockStatic(LocalManagerRegistry.class)
+                    .mockStatic(UserHandle.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock private TransactionManager mTransactionManager;
     @Mock private HealthConnectPermissionHelper mHealthConnectPermissionHelper;
     @Mock private MigrationCleaner mMigrationCleaner;
@@ -156,21 +165,11 @@
     @Mock IMigrationCallback mCallback;
     private Context mContext;
     private HealthConnectServiceImpl mHealthConnectService;
-    private MockitoSession mStaticMockSession;
     private UserHandle mUserHandle;
     private File mMockDataDirectory;
 
     @Before
     public void setUp() throws Exception {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(Environment.class)
-                        .mockStatic(PreferenceHelper.class)
-                        .mockStatic(LocalManagerRegistry.class)
-                        .mockStatic(UserHandle.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         mContext = InstrumentationRegistry.getInstrumentation().getContext();
         mMockDataDirectory = mContext.getDir("mock_data", Context.MODE_PRIVATE);
         when(Environment.getDataDirectory()).thenReturn(mMockDataDirectory);
@@ -197,7 +196,6 @@
     public void tearDown() {
         deleteDir(mMockDataDirectory);
         clearInvocations(mPreferenceHelper);
-        mStaticMockSession.finishMocking();
     }
 
     @Test
diff --git a/tests/unittests/src/com/android/server/healthconnect/HealthConnectThreadSchedulerTest.java b/tests/unittests/src/com/android/server/healthconnect/HealthConnectThreadSchedulerTest.java
index afcb889..97e115d 100644
--- a/tests/unittests/src/com/android/server/healthconnect/HealthConnectThreadSchedulerTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/HealthConnectThreadSchedulerTest.java
@@ -25,8 +25,6 @@
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.server.healthconnect.storage.TestUtils;
-
 import com.google.common.truth.Truth;
 
 import org.junit.Before;
diff --git a/tests/unittests/src/com/android/server/healthconnect/TestUtils.java b/tests/unittests/src/com/android/server/healthconnect/TestUtils.java
new file mode 100644
index 0000000..3f63cc1
--- /dev/null
+++ b/tests/unittests/src/com/android/server/healthconnect/TestUtils.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.healthconnect;
+
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.function.Predicate;
+
+public final class TestUtils {
+
+    public static void waitForTaskToFinishSuccessfully(Runnable task) throws TimeoutException {
+        Instant startTime = Instant.now();
+        while (true) {
+            try {
+                task.run();
+                return;
+            } catch (Exception e) {
+                // ignore
+            } finally {
+                if (ChronoUnit.SECONDS.between(startTime, Instant.now()) > 3) {
+                    throw new TimeoutException();
+                }
+            }
+        }
+    }
+
+    static void waitForCondition(Predicate<Void> predicate, int timeoutSeconds)
+            throws TimeoutException {
+        Instant startTime = Instant.now();
+        while (!predicate.test(null)) {
+            if (ChronoUnit.SECONDS.between(startTime, Instant.now()) > timeoutSeconds) {
+                throw new TimeoutException();
+            }
+        }
+    }
+
+    public static void waitForAllScheduledTasksToComplete() throws TimeoutException {
+        waitForCondition(
+                (unused) ->
+                        (HealthConnectThreadScheduler.sInternalBackgroundExecutor.getTaskCount()
+                                        == HealthConnectThreadScheduler.sInternalBackgroundExecutor
+                                                .getCompletedTaskCount())
+                                || (HealthConnectThreadScheduler.sControllerExecutor.getTaskCount()
+                                        == HealthConnectThreadScheduler.sControllerExecutor
+                                                .getCompletedTaskCount())
+                                || (HealthConnectThreadScheduler.sBackgroundThreadExecutor
+                                                .getTaskCount()
+                                        == HealthConnectThreadScheduler.sBackgroundThreadExecutor
+                                                .getCompletedTaskCount())
+                                || (HealthConnectThreadScheduler.sForegroundExecutor.getTaskCount()
+                                        == HealthConnectThreadScheduler.sForegroundExecutor
+                                                .getCompletedTaskCount()),
+                15);
+    }
+}
diff --git a/tests/unittests/src/com/android/server/healthconnect/backuprestore/BackupRestoreTest.java b/tests/unittests/src/com/android/server/healthconnect/backuprestore/BackupRestoreTest.java
index 391a687..bd0aca3 100644
--- a/tests/unittests/src/com/android/server/healthconnect/backuprestore/BackupRestoreTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/backuprestore/BackupRestoreTest.java
@@ -71,6 +71,7 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.migration.MigrationStateManager;
 import com.android.server.healthconnect.permission.FirstGrantTimeManager;
 import com.android.server.healthconnect.permission.GrantTimeXmlHelper;
@@ -81,13 +82,12 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 import java.io.File;
@@ -101,6 +101,18 @@
 public class BackupRestoreTest {
     private static final String DATABASE_NAME = "healthconnect.db";
     private static final String GRANT_TIME_FILE_NAME = "health-permissions-first-grant-times.xml";
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(Environment.class)
+                    .mockStatic(PreferenceHelper.class)
+                    .mockStatic(TransactionManager.class)
+                    .mockStatic(BackupRestore.BackupRestoreJobService.class)
+                    .mockStatic(GrantTimeXmlHelper.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock Context mServiceContext;
     @Mock private TransactionManager mTransactionManager;
     @Mock private PreferenceHelper mPreferenceHelper;
@@ -110,23 +122,12 @@
     @Mock private JobScheduler mJobScheduler;
     @Captor ArgumentCaptor<JobInfo> mJobInfoArgumentCaptor;
     private BackupRestore mBackupRestore;
-    private MockitoSession mStaticMockSession;
     private UserHandle mUserHandle = UserHandle.of(UserHandle.myUserId());
     private File mMockDataDirectory;
     private File mMockBackedDataDirectory;
 
     @Before
     public void setUp() throws Exception {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(Environment.class)
-                        .mockStatic(PreferenceHelper.class)
-                        .mockStatic(TransactionManager.class)
-                        .mockStatic(BackupRestore.BackupRestoreJobService.class)
-                        .mockStatic(GrantTimeXmlHelper.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         mContext = InstrumentationRegistry.getInstrumentation().getContext();
         mMockDataDirectory = mContext.getDir("mock_data", Context.MODE_PRIVATE);
         mMockBackedDataDirectory = mContext.getDir("mock_backed_data", Context.MODE_PRIVATE);
@@ -147,7 +148,6 @@
         FilesUtil.deleteDir(mMockBackedDataDirectory);
         clearInvocations(mPreferenceHelper);
         clearInvocations(mTransactionManager);
-        mStaticMockSession.finishMocking();
     }
 
     @Test
diff --git a/tests/unittests/src/com/android/server/healthconnect/logging/DailyLoggingServiceTest.java b/tests/unittests/src/com/android/server/healthconnect/logging/DailyLoggingServiceTest.java
index 56f9f62..df60f6f 100644
--- a/tests/unittests/src/com/android/server/healthconnect/logging/DailyLoggingServiceTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/logging/DailyLoggingServiceTest.java
@@ -35,6 +35,7 @@
 import android.os.UserHandle;
 
 import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.logging.DailyLoggingService;
 import com.android.server.healthconnect.storage.TransactionManager;
 import com.android.server.healthconnect.storage.datatypehelpers.BloodPressureRecordHelper;
@@ -46,19 +47,27 @@
 import com.android.server.healthconnect.storage.datatypehelpers.TotalCaloriesBurnedRecordHelper;
 import com.android.server.healthconnect.storage.datatypehelpers.Vo2MaxRecordHelper;
 
-import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.mockito.Answers;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 import java.util.List;
 
 public class DailyLoggingServiceTest {
 
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(HealthFitnessStatsLog.class)
+                    .mockStatic(DatabaseUtils.class)
+                    .mockStatic(TransactionManager.class)
+                    .mockStatic(HealthConnectManager.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private Context mContext;
 
@@ -66,21 +75,11 @@
     @Mock private PackageInfo mPackageInfoNotHoldingPermission;
     @Mock private PackageInfo mPackageInfoNotConnectedApp;
     private final UserHandle mCurrentUser = Process.myUserHandle();
-    private MockitoSession mStaticMockSession;
     private static final String HEALTH_PERMISSION = "HEALTH_PERMISSION";
     private static final String NOT_HEALTH_PERMISSION = "NOT_HEALTH_PERMISSION";
 
     @Before
     public void mockStatsLog() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(HealthFitnessStatsLog.class)
-                        .mockStatic(DatabaseUtils.class)
-                        .mockStatic(TransactionManager.class)
-                        .mockStatic(HealthConnectManager.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         ExtendedMockito.doReturn(true)
                 .when(() -> HealthConnectManager.isHealthPermission(mContext, HEALTH_PERMISSION));
         ExtendedMockito.doReturn(false)
@@ -102,11 +101,6 @@
                 new int[] {PackageInfo.REQUESTED_PERMISSION_NEVER_FOR_LOCATION};
     }
 
-    @After
-    public void tearDown() {
-        mStaticMockSession.finishMocking();
-    }
-
     @Test
     public void testDatabaseLogsStats() {
 
diff --git a/tests/unittests/src/com/android/server/healthconnect/logging/HealthConnectServiceLoggerTest.java b/tests/unittests/src/com/android/server/healthconnect/logging/HealthConnectServiceLoggerTest.java
index 70b609c..ed2ccbf 100644
--- a/tests/unittests/src/com/android/server/healthconnect/logging/HealthConnectServiceLoggerTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/logging/HealthConnectServiceLoggerTest.java
@@ -44,30 +44,18 @@
 import android.health.HealthFitnessStatsLog;
 
 import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.logging.HealthConnectServiceLogger;
 import com.android.server.healthconnect.logging.HealthConnectServiceLogger.ApiMethods;
 
-import org.junit.After;
-import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
-import org.mockito.MockitoSession;
 
 public class HealthConnectServiceLoggerTest {
 
-    private MockitoSession mStaticMockSession;
-
-    @Before
-    public void mockStatsLog() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(HealthFitnessStatsLog.class)
-                        .startMocking();
-    }
-
-    @After
-    public void tearDown() {
-        mStaticMockSession.finishMocking();
-    }
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this).mockStatic(HealthFitnessStatsLog.class).build();
 
     @Test
     public void testDoNotLog_HoldsDataManagementPermission() {
diff --git a/tests/unittests/src/com/android/server/healthconnect/migration/MigrationBroadcastSchedulingTest.java b/tests/unittests/src/com/android/server/healthconnect/migration/MigrationBroadcastSchedulingTest.java
index dcdb2e7..991690a 100644
--- a/tests/unittests/src/com/android/server/healthconnect/migration/MigrationBroadcastSchedulingTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/migration/MigrationBroadcastSchedulingTest.java
@@ -40,18 +40,17 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.HealthConnectDeviceConfigManager;
 import com.android.server.healthconnect.HealthConnectThreadScheduler;
 import com.android.server.healthconnect.storage.datatypehelpers.PreferenceHelper;
 
-import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 import org.mockito.stubbing.Answer;
 import org.mockito.verification.VerificationMode;
@@ -63,6 +62,16 @@
 @RunWith(AndroidJUnit4.class)
 public class MigrationBroadcastSchedulingTest {
 
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(MigrationStateManager.class)
+                    .mockStatic(PreferenceHelper.class)
+                    .mockStatic(HealthConnectThreadScheduler.class)
+                    .mockStatic(HealthConnectDeviceConfigManager.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock private Context mContext;
     @Mock private JobScheduler mJobScheduler;
     @Mock private MigrationStateManager mMigrationStateManager;
@@ -71,8 +80,6 @@
 
     private MigrationBroadcastScheduler mMigrationBroadcastScheduler;
 
-    private MockitoSession mStaticMockSession;
-
     private static final int MIGRATION_STATE_ALLOWED_COUNT_MOCK_VALUE =
             MIGRATION_STATE_ALLOWED_COUNT_DEFAULT_FLAG_VALUE;
     private static final int MIGRATION_STATE_IN_PROGRESS_COUNT_MOCK_VALUE =
@@ -89,17 +96,6 @@
 
     @Before
     public void setUp() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(MigrationStateManager.class)
-                        .mockStatic(PreferenceHelper.class)
-                        .mockStatic(HealthConnectThreadScheduler.class)
-                        .mockStatic(HealthConnectDeviceConfigManager.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-
-        MockitoAnnotations.initMocks(this);
-
         when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
         when(mJobScheduler.forNamespace(MIGRATION_BROADCAST_NAMESPACE)).thenReturn(mJobScheduler);
         when(HealthConnectDeviceConfigManager.getInitialisedInstance())
@@ -114,11 +110,6 @@
         mMigrationBroadcastScheduler = Mockito.spy(new MigrationBroadcastScheduler(0));
     }
 
-    @After
-    public void tearDown() {
-        mStaticMockSession.finishMocking();
-    }
-
     @Test
     public void testPrescheduleNewJobs_updateMigrationState_newJobsScheduled() {
         when(MigrationStateManager.initializeInstance(anyInt())).thenCallRealMethod();
diff --git a/tests/unittests/src/com/android/server/healthconnect/migration/MigrationStateChangeJobTest.java b/tests/unittests/src/com/android/server/healthconnect/migration/MigrationStateChangeJobTest.java
index 65b182c..ef58930 100644
--- a/tests/unittests/src/com/android/server/healthconnect/migration/MigrationStateChangeJobTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/migration/MigrationStateChangeJobTest.java
@@ -55,19 +55,17 @@
 
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.HealthConnectDailyService;
 import com.android.server.healthconnect.HealthConnectDeviceConfigManager;
 import com.android.server.healthconnect.storage.datatypehelpers.PreferenceHelper;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
-import org.mockito.quality.Strictness;
 
 import java.time.Duration;
 import java.time.Instant;
@@ -77,6 +75,16 @@
 
 @RunWith(AndroidJUnit4.class)
 public class MigrationStateChangeJobTest {
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(PreferenceHelper.class)
+                    .mockStatic(MigrationStateManager.class)
+                    .mockStatic(HealthConnectDailyService.class)
+                    .mockStatic(HealthConnectDeviceConfigManager.class)
+                    .build();
+
     @Mock MigrationStateManager mMigrationStateManager;
     @Mock PreferenceHelper mPreferenceHelper;
     @Mock private Context mContext;
@@ -112,19 +120,8 @@
                     HealthConnectDeviceConfigManager
                             .MIGRATION_PAUSE_JOB_RUN_INTERVAL_HOURS_DEFAULT_FLAG_VALUE);
 
-    private MockitoSession mStaticMockSession;
-
     @Before
     public void setUp() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(PreferenceHelper.class)
-                        .mockStatic(MigrationStateManager.class)
-                        .mockStatic(HealthConnectDailyService.class)
-                        .mockStatic(HealthConnectDeviceConfigManager.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         when(MigrationStateManager.getInitialisedInstance()).thenReturn(mMigrationStateManager);
         when(PreferenceHelper.getInstance()).thenReturn(mPreferenceHelper);
         when(mJobScheduler.forNamespace(MIGRATION_STATE_CHANGE_NAMESPACE))
@@ -156,7 +153,6 @@
         clearInvocations(mPreferenceHelper);
         clearInvocations(mMigrationStateManager);
         clearInvocations(mHealthConnectDeviceConfigManager);
-        mStaticMockSession.finishMocking();
     }
 
     /** Expected behavior: No changes to the state */
diff --git a/tests/unittests/src/com/android/server/healthconnect/migration/MigrationStateManagerTest.java b/tests/unittests/src/com/android/server/healthconnect/migration/MigrationStateManagerTest.java
index 926ebce..80f1eeb 100644
--- a/tests/unittests/src/com/android/server/healthconnect/migration/MigrationStateManagerTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/migration/MigrationStateManagerTest.java
@@ -71,7 +71,9 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.HealthConnectDeviceConfigManager;
+import com.android.server.healthconnect.TestUtils;
 import com.android.server.healthconnect.migration.MigrationStateManager.IllegalMigrationStateException;
 import com.android.server.healthconnect.storage.datatypehelpers.PreferenceHelper;
 
@@ -79,11 +81,10 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 import java.time.Duration;
@@ -92,10 +93,22 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
 
 /** Test class for the MigrationStateManager class. */
 @RunWith(AndroidJUnit4.class)
 public class MigrationStateManagerTest {
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(PreferenceHelper.class)
+                    .mockStatic(MigrationStateChangeJob.class)
+                    .mockStatic(HexEncoding.class)
+                    .mockStatic(HealthConnectDeviceConfigManager.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock private Context mContext;
     @Mock private PackageManager mPackageManager;
     @Mock private PreferenceHelper mPreferenceHelper;
@@ -105,7 +118,7 @@
     @Mock private MockListener mMockListener;
     @Mock private HealthConnectDeviceConfigManager mHealthConnectDeviceConfigManager;
     private MigrationStateManager mMigrationStateManager;
-    private MockitoSession mStaticMockSession;
+
     private static final UserHandle DEFAULT_USER_HANDLE = UserHandle.of(UserHandle.myUserId());
     private static final long EXECUTION_TIME_BUFFER_MOCK_VALUE =
             TimeUnit.MINUTES.toMillis(
@@ -120,15 +133,6 @@
 
     @Before
     public void setUp() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(PreferenceHelper.class)
-                        .mockStatic(MigrationStateChangeJob.class)
-                        .mockStatic(HexEncoding.class)
-                        .mockStatic(HealthConnectDeviceConfigManager.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         when(mContext.getResources()).thenReturn(mResources);
         when(mResources.getIdentifier(anyString(), anyString(), anyString())).thenReturn(1);
         when(mResources.getString(anyInt())).thenReturn(MOCK_CONFIGURED_PACKAGE);
@@ -142,17 +146,17 @@
                 .thenReturn(NON_IDLE_STATE_TIMEOUT_MOCK_VALUE);
         when(mHealthConnectDeviceConfigManager.getMaxStartMigrationCalls())
                 .thenReturn(MAX_START_MIGRATION_CALLS_MOCK_VALUE);
-        MigrationStateManager.initializeInstance(DEFAULT_USER_HANDLE.getIdentifier());
-        mMigrationStateManager = MigrationStateManager.getInitialisedInstance();
-        mMigrationStateManager.clearListeners();
+        MigrationStateManager.resetInitializedInstanceForTest();
+        mMigrationStateManager =
+                MigrationStateManager.initializeInstance(DEFAULT_USER_HANDLE.getIdentifier());
         mMigrationStateManager.addStateChangedListener(mMockListener::onMigrationStateChanged);
     }
 
     @After
-    public void tearDown() {
-        mMigrationStateManager.clearListeners();
+    public void tearDown() throws TimeoutException {
+        TestUtils.waitForAllScheduledTasksToComplete();
+        MigrationStateManager.resetInitializedInstanceForTest();
         clearInvocations(mPreferenceHelper);
-        mStaticMockSession.finishMocking();
     }
 
     /**
diff --git a/tests/unittests/src/com/android/server/healthconnect/migration/MigrationUiStateManagerTest.java b/tests/unittests/src/com/android/server/healthconnect/migration/MigrationUiStateManagerTest.java
index ec85fde..7892077 100644
--- a/tests/unittests/src/com/android/server/healthconnect/migration/MigrationUiStateManagerTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/migration/MigrationUiStateManagerTest.java
@@ -33,28 +33,34 @@
 import androidx.test.platform.app.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.migration.notification.MigrationNotificationSender;
 import com.android.server.healthconnect.storage.datatypehelpers.PreferenceHelper;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 /** Test class for the MigrationUiStateManager class. */
 @RunWith(AndroidJUnit4.class)
 public class MigrationUiStateManagerTest {
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(PreferenceHelper.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock private Context mContext;
     @Mock private MigrationStateManager mMigrationStateManager;
     @Mock private MigrationNotificationSender mMigrationNotificationSender;
     @Mock private PreferenceHelper mPreferenceHelper;
-    private MockitoSession mStaticMockSession;
 
     private MigrationUiStateManager mMigrationUiStateManager;
     private static final UserHandle DEFAULT_USER_HANDLE = UserHandle.of(UserHandle.myUserId());
@@ -63,12 +69,6 @@
 
     @Before
     public void setUp() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(PreferenceHelper.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         mContext = InstrumentationRegistry.getInstrumentation().getContext();
         when(PreferenceHelper.getInstance()).thenReturn(mPreferenceHelper);
 
@@ -84,7 +84,6 @@
     @After
     public void tearDown() {
         clearInvocations(mPreferenceHelper);
-        mStaticMockSession.finishMocking();
     }
 
     @Test
diff --git a/tests/unittests/src/com/android/server/healthconnect/migration/MigratorPackageChangesReceiverTest.java b/tests/unittests/src/com/android/server/healthconnect/migration/MigratorPackageChangesReceiverTest.java
index cf9eec7..18fcfb1 100644
--- a/tests/unittests/src/com/android/server/healthconnect/migration/MigratorPackageChangesReceiverTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/migration/MigratorPackageChangesReceiverTest.java
@@ -38,21 +38,29 @@
 
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.storage.datatypehelpers.PreferenceHelper;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 @RunWith(AndroidJUnit4.class)
 public class MigratorPackageChangesReceiverTest {
     public static final String INTENT_URI_SCHEME = "package";
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(PreferenceHelper.class)
+                    .mockStatic(MigrationStateManager.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock MigrationStateManager mMigrationStateManager;
     @Mock PreferenceHelper mPreferenceHelper;
     @Mock private Context mContext;
@@ -60,19 +68,11 @@
     @Mock private UserManager mUserManager;
     @Mock private Intent mIntent;
     @Mock private Uri mUri;
-    private MockitoSession mStaticMockSession;
     private MigratorPackageChangesReceiver mMigratorPackageChangesReceiver;
     private static final UserHandle DEFAULT_USER_HANDLE = UserHandle.of(UserHandle.myUserId());
 
     @Before
     public void setUp() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(PreferenceHelper.class)
-                        .mockStatic(MigrationStateManager.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         when(MigrationStateManager.getInitialisedInstance()).thenReturn(mMigrationStateManager);
         when(PreferenceHelper.getInstance()).thenReturn(mPreferenceHelper);
         mMigratorPackageChangesReceiver =
@@ -86,7 +86,6 @@
     public void tearDown() {
         clearInvocations(mPreferenceHelper);
         clearInvocations(mMigrationStateManager);
-        mStaticMockSession.finishMocking();
     }
 
     @Test
diff --git a/tests/unittests/src/com/android/server/healthconnect/migration/PriorityMigrationHelperTest.java b/tests/unittests/src/com/android/server/healthconnect/migration/PriorityMigrationHelperTest.java
index 061888b..a1e8372 100644
--- a/tests/unittests/src/com/android/server/healthconnect/migration/PriorityMigrationHelperTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/migration/PriorityMigrationHelperTest.java
@@ -35,18 +35,17 @@
 
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.storage.TransactionManager;
 import com.android.server.healthconnect.storage.datatypehelpers.HealthDataCategoryPriorityHelper;
 import com.android.server.healthconnect.storage.utils.StorageUtils;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 import org.mockito.verification.VerificationMode;
 
@@ -58,6 +57,14 @@
 @RunWith(AndroidJUnit4.class)
 public class PriorityMigrationHelperTest {
 
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(TransactionManager.class)
+                    .mockStatic(HealthDataCategoryPriorityHelper.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     private static final long APP_PACKAGE_ID = 1;
     private static final long APP_PACKAGE_ID_2 = 2;
     private static final long APP_PACKAGE_ID_3 = 3;
@@ -68,18 +75,10 @@
     @Mock private Cursor mCursor;
     @Mock private TransactionManager mTransactionManager;
     @Mock private HealthDataCategoryPriorityHelper mHealthDataCategoryPriorityHelper;
-    private MockitoSession mStaticMockSession;
     private PriorityMigrationHelper mPriorityMigrationHelper;
 
     @Before
     public void setUp() throws Exception {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(TransactionManager.class)
-                        .mockStatic(HealthDataCategoryPriorityHelper.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         when(HealthDataCategoryPriorityHelper.getInstance())
                 .thenReturn(mHealthDataCategoryPriorityHelper);
         when(TransactionManager.getInitialisedInstance()).thenReturn(mTransactionManager);
@@ -89,7 +88,6 @@
 
     @After
     public void tearDown() throws Exception {
-        mStaticMockSession.finishMocking();
         mPriorityMigrationHelper.clearData(mTransactionManager);
     }
 
diff --git a/tests/unittests/src/com/android/server/healthconnect/permission/GrantTimePersistenceUnitTest.java b/tests/unittests/src/com/android/server/healthconnect/permission/GrantTimePersistenceUnitTest.java
index cab3d0d..e1855be 100644
--- a/tests/unittests/src/com/android/server/healthconnect/permission/GrantTimePersistenceUnitTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/permission/GrantTimePersistenceUnitTest.java
@@ -31,17 +31,17 @@
 import androidx.test.InstrumentationRegistry;
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.LocalManagerRegistry;
 import com.android.server.appop.AppOpsManagerLocal;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 import java.io.File;
@@ -79,20 +79,20 @@
     private static final UserGrantTimeState EMPTY_STATE =
             new UserGrantTimeState(new ArrayMap<>(), new ArrayMap<>(), 3);
 
-    private MockitoSession mStaticMockSession;
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(Environment.class)
+                    .mockStatic(LocalManagerRegistry.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     private final UserHandle mUser = UserHandle.of(UserHandle.myUserId());
     private File mMockDataDirectory;
     @Mock private AppOpsManagerLocal mAppOpsManagerLocal;
 
     @Before
     public void mockApexEnvironment() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(Environment.class)
-                        .mockStatic(LocalManagerRegistry.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-
         Context context = InstrumentationRegistry.getContext();
         mMockDataDirectory = context.getDir("mock_data", Context.MODE_PRIVATE);
         Mockito.when(Environment.getDataDirectory()).thenReturn(mMockDataDirectory);
@@ -102,7 +102,6 @@
 
     @After
     public void tearDown() {
-        mStaticMockSession.finishMocking();
         deleteFile(mMockDataDirectory);
     }
 
diff --git a/tests/unittests/src/com/android/server/healthconnect/permission/PermissionPackageChangesOrchestratorTest.java b/tests/unittests/src/com/android/server/healthconnect/permission/PermissionPackageChangesOrchestratorTest.java
index 03fa03e..3821a70 100644
--- a/tests/unittests/src/com/android/server/healthconnect/permission/PermissionPackageChangesOrchestratorTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/permission/PermissionPackageChangesOrchestratorTest.java
@@ -34,21 +34,28 @@
 
 import androidx.test.core.app.ApplicationProvider;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.storage.TransactionManager;
 import com.android.server.healthconnect.storage.datatypehelpers.HealthDataCategoryPriorityHelper;
 
-import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 public class PermissionPackageChangesOrchestratorTest {
     private static final String SELF_PACKAGE_NAME = "com.android.healthconnect.unittests";
     private static final UserHandle CURRENT_USER = Process.myUserHandle();
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(TransactionManager.class)
+                    .mockStatic(HealthDataCategoryPriorityHelper.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     private int mCurrentUid;
     private PermissionPackageChangesOrchestrator mOrchestrator;
     private Context mContext;
@@ -61,17 +68,8 @@
 
     @Mock private HealthDataCategoryPriorityHelper mHealthDataCategoryPriorityHelper;
 
-    private MockitoSession mStaticMockSession;
-
     @Before
     public void setUp() throws PackageManager.NameNotFoundException {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(TransactionManager.class)
-                        .mockStatic(HealthDataCategoryPriorityHelper.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
         when(HealthDataCategoryPriorityHelper.getInstance())
                 .thenReturn(mHealthDataCategoryPriorityHelper);
         when(TransactionManager.getInitialisedInstance()).thenReturn(mTransactionManager);
@@ -84,11 +82,6 @@
         setIntentWasRemoved(/* isIntentRemoved= */ false);
     }
 
-    @After
-    public void tearDown() throws Exception {
-        mStaticMockSession.finishMocking();
-    }
-
     @Test
     public void testPackageAdded_callsTrackerToUpdateState_noGrantTimeOrPermsCalls() {
         mOrchestrator.onReceive(mContext, buildPackageIntent(Intent.ACTION_PACKAGE_ADDED));
diff --git a/tests/unittests/src/com/android/server/healthconnect/storage/AutoDeleteServiceTest.java b/tests/unittests/src/com/android/server/healthconnect/storage/AutoDeleteServiceTest.java
index 7881fa5..1b1d9e9 100644
--- a/tests/unittests/src/com/android/server/healthconnect/storage/AutoDeleteServiceTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/storage/AutoDeleteServiceTest.java
@@ -26,7 +26,7 @@
 
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.storage.AutoDeleteService;
 import com.android.server.healthconnect.storage.TransactionManager;
 import com.android.server.healthconnect.storage.datatypehelpers.AccessLogsHelper;
@@ -78,14 +78,11 @@
 import com.android.server.healthconnect.storage.request.DeleteTableRequest;
 import com.android.server.healthconnect.storage.utils.RecordHelperProvider;
 
-import org.junit.After;
-import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -98,6 +95,18 @@
 public class AutoDeleteServiceTest {
     private static final String AUTO_DELETE_DURATION_RECORDS_KEY =
             "auto_delete_duration_records_key";
+
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(PreferenceHelper.class)
+                    .mockStatic(TransactionManager.class)
+                    .mockStatic(RecordHelperProvider.class)
+                    .mockStatic(AppInfoHelper.class)
+                    .mockStatic(ActivityDateHelper.class)
+                    .mockStatic(HealthDataCategoryPriorityHelper.class)
+                    .build();
+
     @Mock private PreferenceHelper mPreferenceHelper;
     @Mock private TransactionManager mTransactionManager;
     @Mock private RecordHelperProvider mRecordHelperProvider;
@@ -106,27 +115,6 @@
     @Mock private ActivityDateHelper mActivityDateHelper;
     @Mock private HealthDataCategoryPriorityHelper mHealthDataCategoryPriorityHelper;
     @Mock Context mContext;
-    private MockitoSession mStaticMockSession;
-
-    @Before
-    public void setUp() {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(PreferenceHelper.class)
-                        .mockStatic(TransactionManager.class)
-                        .mockStatic(RecordHelperProvider.class)
-                        .mockStatic(AppInfoHelper.class)
-                        .mockStatic(ActivityDateHelper.class)
-                        .mockStatic(HealthDataCategoryPriorityHelper.class)
-                        .startMocking();
-
-        MockitoAnnotations.initMocks(this);
-    }
-
-    @After
-    public void tearDown() {
-        mStaticMockSession.finishMocking();
-    }
 
     @Test
     public void testSetRecordRetentionPeriodInDays() {
diff --git a/tests/unittests/src/com/android/server/healthconnect/storage/TestUtils.java b/tests/unittests/src/com/android/server/healthconnect/storage/TestUtils.java
deleted file mode 100644
index 21e86f2..0000000
--- a/tests/unittests/src/com/android/server/healthconnect/storage/TestUtils.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.server.healthconnect.storage;
-
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.util.concurrent.TimeoutException;
-
-public final class TestUtils {
-    public static void waitForTaskToFinishSuccessfully(Runnable task) throws TimeoutException {
-        Instant startTime = Instant.now();
-        while (true) {
-            try {
-                task.run();
-                return;
-            } catch (Exception e) {
-                // ignore
-            } finally {
-                if (ChronoUnit.SECONDS.between(startTime, Instant.now()) > 3) {
-                    throw new TimeoutException();
-                }
-            }
-        }
-    }
-}
diff --git a/tests/unittests/src/com/android/server/healthconnect/storage/datatypehelpers/HealthDataCategoryPriorityHelperTest.java b/tests/unittests/src/com/android/server/healthconnect/storage/datatypehelpers/HealthDataCategoryPriorityHelperTest.java
index 54cd620..310a44a 100644
--- a/tests/unittests/src/com/android/server/healthconnect/storage/datatypehelpers/HealthDataCategoryPriorityHelperTest.java
+++ b/tests/unittests/src/com/android/server/healthconnect/storage/datatypehelpers/HealthDataCategoryPriorityHelperTest.java
@@ -30,17 +30,16 @@
 
 import androidx.test.runner.AndroidJUnit4;
 
-import com.android.dx.mockito.inline.extended.ExtendedMockito;
+import com.android.modules.utils.testing.ExtendedMockitoRule;
 import com.android.server.healthconnect.storage.TransactionManager;
 import com.android.server.healthconnect.storage.utils.StorageUtils;
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.MockitoSession;
 import org.mockito.quality.Strictness;
 
 import java.util.ArrayList;
@@ -63,22 +62,21 @@
     private static final int APP_ID_PRIORITY_ORDER_COLUMN_INDEX = 2;
     private static final int HEALTH_DATA_CATEGORY_COLUMN_INDEX = 1;
 
+    @Rule
+    public final ExtendedMockitoRule mExtendedMockitoRule =
+            new ExtendedMockitoRule.Builder(this)
+                    .mockStatic(TransactionManager.class)
+                    .mockStatic(AppInfoHelper.class)
+                    .setStrictness(Strictness.LENIENT)
+                    .build();
+
     @Mock private Cursor mCursor;
     @Mock private TransactionManager mTransactionManager;
     @Mock private AppInfoHelper mAppInfoHelper;
     private HealthDataCategoryPriorityHelper mHealthDataCategoryPriorityHelper;
-    private MockitoSession mStaticMockSession;
 
     @Before
     public void setUp() throws Exception {
-        mStaticMockSession =
-                ExtendedMockito.mockitoSession()
-                        .mockStatic(TransactionManager.class)
-                        .mockStatic(AppInfoHelper.class)
-                        .strictness(Strictness.LENIENT)
-                        .startMocking();
-        MockitoAnnotations.initMocks(this);
-
         when(TransactionManager.getInitialisedInstance()).thenReturn(mTransactionManager);
         when(mTransactionManager.read(any())).thenReturn(mCursor);
         when(AppInfoHelper.getInstance()).thenReturn(mAppInfoHelper);
@@ -93,7 +91,6 @@
 
     @After
     public void tearDown() throws Exception {
-        mStaticMockSession.finishMocking();
         mHealthDataCategoryPriorityHelper.clearData(mTransactionManager);
     }