Merge "Fix the bug using wrong TimeUnit" into pi-dev
diff --git a/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobService.java b/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobService.java
index 9e57433..d602194 100644
--- a/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobService.java
+++ b/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobService.java
@@ -64,7 +64,7 @@
final BatteryTipPolicy policy = new BatteryTipPolicy(this);
ThreadUtils.postOnBackgroundThread(() -> {
batteryDatabaseManager.deleteAllAnomaliesBeforeTimeStamp(
- System.currentTimeMillis() - TimeUnit.HOURS.toMillis(
+ System.currentTimeMillis() - TimeUnit.DAYS.toMillis(
policy.dataHistoryRetainDay));
jobFinished(params, false /* wantsReschedule */);
});
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobServiceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobServiceTest.java
index a39276d..f600d41 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobServiceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyCleanupJobServiceTest.java
@@ -17,36 +17,55 @@
package com.android.settings.fuelgauge.batterytip;
import static com.google.common.truth.Truth.assertThat;
+
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyBoolean;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static org.robolectric.RuntimeEnvironment.application;
import android.app.job.JobInfo;
+import android.app.job.JobParameters;
import android.app.job.JobScheduler;
import android.content.Context;
import com.android.settings.R;
+import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowThreadUtils;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
+import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowJobScheduler;
import java.util.List;
import java.util.concurrent.TimeUnit;
@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = ShadowThreadUtils.class)
public class AnomalyCleanupJobServiceTest {
+ private static final int UID = 1234;
+ private static final String PACKAGE_NAME = "com.android.package";
+ private static final String PACKAGE_NAME_OLD = "com.android.package.old";
+ private static final int ANOMALY_TYPE = 1;
+ private static final long TIMESTAMP_NOW = System.currentTimeMillis();
+ private static final long TIMESTAMP_31_DAYS_BEFORE = TIMESTAMP_NOW - TimeUnit.DAYS.toMillis(31);
+
private Context mContext;
private JobScheduler mJobScheduler;
+ @Mock
+ private JobParameters mParams;
@Before
public void setUp() {
@@ -57,12 +76,17 @@
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
}
+ @After
+ public void cleanUp() {
+ DatabaseTestUtils.clearDb(mContext);
+ }
+
@Test
- public void testScheduleCleanUp() {
+ public void scheduleCleanUp() {
AnomalyCleanupJobService.scheduleCleanUp(mContext);
ShadowJobScheduler shadowJobScheduler =
- Shadows.shadowOf(mContext.getSystemService(JobScheduler.class));
+ Shadows.shadowOf(mContext.getSystemService(JobScheduler.class));
List<JobInfo> pendingJobs = shadowJobScheduler.getAllPendingJobs();
assertEquals(1, pendingJobs.size());
JobInfo pendingJob = pendingJobs.get(0);
@@ -74,10 +98,35 @@
}
@Test
- public void testScheduleCleanUp_invokeTwice_onlyScheduleOnce() {
+ public void scheduleCleanUp_invokeTwice_onlyScheduleOnce() {
AnomalyCleanupJobService.scheduleCleanUp(mContext);
AnomalyCleanupJobService.scheduleCleanUp(mContext);
verify(mJobScheduler, times(1)).schedule(any());
}
+
+ @Test
+ public void onStartJob_cleanUpDataBefore30days() {
+ final BatteryDatabaseManager databaseManager = BatteryDatabaseManager.getInstance(mContext);
+ final AnomalyCleanupJobService service = spy(Robolectric.setupService(
+ AnomalyCleanupJobService.class));
+ doNothing().when(service).jobFinished(any(), anyBoolean());
+
+ // Insert two records, one is current and the other one is 31 days before
+ databaseManager.insertAnomaly(UID, PACKAGE_NAME, ANOMALY_TYPE,
+ AnomalyDatabaseHelper.State.NEW, TIMESTAMP_NOW);
+ databaseManager.insertAnomaly(UID, PACKAGE_NAME_OLD, ANOMALY_TYPE,
+ AnomalyDatabaseHelper.State.NEW, TIMESTAMP_31_DAYS_BEFORE);
+
+ service.onStartJob(mParams);
+
+ // In database, it only contains the current record
+ final List<AppInfo> appInfos = databaseManager.queryAllAnomalies(0,
+ AnomalyDatabaseHelper.State.NEW);
+ assertThat(appInfos).containsExactly(new AppInfo.Builder()
+ .setUid(UID)
+ .setPackageName(PACKAGE_NAME)
+ .addAnomalyType(ANOMALY_TYPE)
+ .build());
+ }
}