Use the real DB instead of mocking in CacheManagerTest

Test: atest com.android.adservices.service.topics.CacheManagerTest
Bug: 229297182
Change-Id: Ic90aa15f9e3acede0413ea20245e9e4db305fe9e
diff --git a/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/CacheManagerTest.java b/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/CacheManagerTest.java
index 0623ab8..f871c7d 100644
--- a/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/CacheManagerTest.java
+++ b/adservices/tests/unittest/service-core/src/com/android/adservices/service/topics/CacheManagerTest.java
@@ -17,17 +17,18 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.content.Context;
 import android.util.Pair;
 
+import androidx.test.core.app.ApplicationProvider;
 import androidx.test.filters.SmallTest;
 
 import com.android.adservices.data.topics.Topic;
 import com.android.adservices.data.topics.TopicsDao;
 import com.android.adservices.service.Flags;
-import com.android.adservices.service.FlagsFactory;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -43,21 +44,24 @@
 @SmallTest
 public final class CacheManagerTest {
     private static final String TAG = "CacheManagerTest";
+    private final Context mContext = ApplicationProvider.getApplicationContext();
 
-    private final Flags mFlags = FlagsFactory.getFlagsForTest();
+    private TopicsDao mTopicsDao;
 
-    @Mock TopicsDao mMockTopicsDao;
+    @Mock Flags mMockFlags;
     @Mock EpochManager mMockEpochManager;
 
     @Before
     public void setup() {
         MockitoAnnotations.initMocks(this);
+
+        mTopicsDao = TopicsDao.getInstanceForTest(mContext);
     }
 
     @Test
     public void testGetTopics_emptyCache() {
         // The cache is empty when first created.
-        CacheManager cacheManager = new CacheManager(mMockEpochManager, mMockTopicsDao, mFlags);
+        CacheManager cacheManager = new CacheManager(mMockEpochManager, mTopicsDao, mMockFlags);
 
         List<Topic> topics = cacheManager.getTopics(
                 /* numberOfLookBackEpochs = */ 3,
@@ -69,15 +73,63 @@
     @Test
     public void testGetTopics() {
         // The cache is empty.
-        CacheManager cacheManager = new CacheManager(mMockEpochManager, mMockTopicsDao, mFlags);
+        CacheManager cacheManager = new CacheManager(mMockEpochManager, mTopicsDao, mMockFlags);
 
         // Assume the current epochId is 4L, we will load cache for returned topics in the last 3
         // epochs: epochId in {3, 2, 1}.
         long currentEpochId = 4L;
         when(mMockEpochManager.getCurrentEpochId()).thenReturn(currentEpochId);
+        // Mock Flags to make it independent of configuration
+        when(mMockFlags.getTopicsNumberOfLookBackEpochs()).thenReturn(3);
 
         // EpochId 1
-        Map<Pair<String, String>, Topic> returnedAppSdkTopicsForEpoch1 = new HashMap<>();
+        Map<Pair<String, String>, String> returnedAppSdkTopicsMap1 = new HashMap<>();
+        returnedAppSdkTopicsMap1.put(Pair.create("app1", ""), "topic1");
+        returnedAppSdkTopicsMap1.put(Pair.create("app1", "sdk1"), "topic1");
+        returnedAppSdkTopicsMap1.put(Pair.create("app1", "sdk2"), "topic1");
+
+        returnedAppSdkTopicsMap1.put(Pair.create("app2", "sdk1"), "topic2");
+        returnedAppSdkTopicsMap1.put(Pair.create("app2", "sdk3"), "topic2");
+        returnedAppSdkTopicsMap1.put(Pair.create("app2", "sdk4"), "topic2");
+
+        returnedAppSdkTopicsMap1.put(Pair.create("app3", "sdk1"), "topic3");
+
+        returnedAppSdkTopicsMap1.put(Pair.create("app5", "sdk1"), "topic5");
+        returnedAppSdkTopicsMap1.put(Pair.create("app5", "sdk5"), "topic5");
+
+        mTopicsDao.persistReturnedAppTopicsMap(/* epochId */ 1L,
+                /* taxonomyVersion */ 1L,
+                /* modelVersion */ 1L, returnedAppSdkTopicsMap1);
+
+        // EpochId 2
+        Map<Pair<String, String>, String> returnedAppSdkTopicsMap2 = new HashMap<>();
+
+        returnedAppSdkTopicsMap2.put(Pair.create("app1", ""), "topic2");
+        returnedAppSdkTopicsMap2.put(Pair.create("app1", "sdk1"), "topic2");
+        returnedAppSdkTopicsMap2.put(Pair.create("app1", "sdk2"), "topic2");
+
+        returnedAppSdkTopicsMap2.put(Pair.create("app2", "sdk1"), "topic3");
+        returnedAppSdkTopicsMap2.put(Pair.create("app2", "sdk3"), "topic3");
+        returnedAppSdkTopicsMap2.put(Pair.create("app2", "sdk4"), "topic3");
+
+        returnedAppSdkTopicsMap2.put(Pair.create("app3", "sdk1"), "topic4");
+
+        returnedAppSdkTopicsMap2.put(Pair.create("app5", "sdk1"), "topic1");
+        returnedAppSdkTopicsMap2.put(Pair.create("app5", "sdk5"), "topic1");
+
+        mTopicsDao.persistReturnedAppTopicsMap(/* epochId */ 2L,
+                /* taxonomyVersion */ 1L,
+                /* modelVersion */ 1L, returnedAppSdkTopicsMap2);
+
+        // EpochId 3
+        // epochId == 3 does not have any topics. This could happen if the epoch computation failed
+        // or the device was offline and no epoch computation was done.
+
+        cacheManager.loadCache();
+
+        verify(mMockEpochManager).getCurrentEpochId();
+        verify(mMockFlags).getTopicsNumberOfLookBackEpochs();
+
         Topic topic1 = new Topic("topic1", /* taxonomyVersion = */ 1L,
                 /* modelVersion = */ 1L);
         Topic topic2 = new Topic("topic2", /* taxonomyVersion = */ 1L,
@@ -89,50 +141,6 @@
         Topic topic5 = new Topic("topic5", /* taxonomyVersion = */ 1L,
                 /* modelVersion = */ 1L);
 
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app1", ""), topic1);
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app1", "sdk1"), topic1);
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app1", "sdk2"), topic1);
-
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app2", "sdk1"), topic2);
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app2", "sdk3"), topic2);
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app2", "sdk4"), topic2);
-
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app3", "sdk1"), topic3);
-
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app5", "sdk1"), topic5);
-        returnedAppSdkTopicsForEpoch1.put(Pair.create("app5", "sdk5"), topic5);
-
-        // EpochId 2
-        Map<Pair<String, String>, Topic> returnedAppSdkTopicsForEpoch2 = new HashMap<>();
-
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app1", ""), topic2);
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app1", "sdk1"), topic2);
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app1", "sdk2"), topic2);
-
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app2", "sdk1"), topic3);
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app2", "sdk3"), topic3);
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app2", "sdk4"), topic3);
-
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app3", "sdk1"), topic4);
-
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app5", "sdk1"), topic1);
-        returnedAppSdkTopicsForEpoch2.put(Pair.create("app5", "sdk5"), topic1);
-
-        // EpochId 3
-        // epochId == 3 does not have any topics. This could happen if the epoch computation failed
-        // or the device was offline and no epoch computation was done.
-        Map<Pair<String, String>, Topic> returnedAppSdkTopicsForEpoch3 = new HashMap<>();
-
-        Map<Long, Map<Pair<String, String>, Topic>> cache = new HashMap<>();
-        cache.put(/* epochId = */ 1L, returnedAppSdkTopicsForEpoch1);
-        cache.put(/* epochId = */ 2L, returnedAppSdkTopicsForEpoch2);
-        cache.put(/* epochId = */ 3L, returnedAppSdkTopicsForEpoch3);
-
-        when(mMockTopicsDao.retrieveReturnedTopics(eq(currentEpochId),
-                eq(mFlags.getTopicsNumberOfLookBackEpochs() + 1))).thenReturn(cache);
-
-        cacheManager.loadCache();
-
         // Now look at epochId == 3 only by setting numberOfLookBackEpochs == 1.
         // Since the epochId 3 has empty cache, the results are always empty.
         assertThat(cacheManager.getTopics(/* numberOfLookBackEpochs = */ 1,
@@ -195,16 +203,15 @@
                 "app5", "sdk1")).isEqualTo(Arrays.asList(topic1, topic5));
     }
 
+    // Currently SQLException is not thrown. This test needs to be uplifted after SQLException gets
+    // handled.
+    // TODO(b/230669931): Handle SQLException.
     @Test
     public void testGetTopics_failToLoadFromDb() {
         // The cache is empty when first created.
-        CacheManager cacheManager = new CacheManager(mMockEpochManager, mMockTopicsDao, mFlags);
+        CacheManager cacheManager = new CacheManager(mMockEpochManager, mTopicsDao, mMockFlags);
 
-        long currentEpochId = 4L;
         // Fail to load from DB will have empty cache.
-        Map<Long, Map<Pair<String, String>, Topic>> emptyCache = new HashMap<>();
-        when(mMockTopicsDao.retrieveReturnedTopics(eq(currentEpochId),
-                eq(mFlags.getTopicsNumberOfLookBackEpochs() + 1))).thenReturn(emptyCache);
 
         List<Topic> topics = cacheManager.getTopics(
                 /* numberOfLookBackEpochs = */ 3,