Merge "Fix the bug using wrong TimeUnit" into pi-dev

am: 10280a53b0

Change-Id: I8d90eec324ddfcb0123247e2e0e37aa6f6f94ab8
This commit is contained in:
Lei Yu
2018-04-23 10:08:33 -07:00
committed by android-build-merger
2 changed files with 54 additions and 5 deletions

View File

@@ -64,7 +64,7 @@ public class AnomalyCleanupJobService extends JobService {
final BatteryTipPolicy policy = new BatteryTipPolicy(this); final BatteryTipPolicy policy = new BatteryTipPolicy(this);
ThreadUtils.postOnBackgroundThread(() -> { ThreadUtils.postOnBackgroundThread(() -> {
batteryDatabaseManager.deleteAllAnomaliesBeforeTimeStamp( batteryDatabaseManager.deleteAllAnomaliesBeforeTimeStamp(
System.currentTimeMillis() - TimeUnit.HOURS.toMillis( System.currentTimeMillis() - TimeUnit.DAYS.toMillis(
policy.dataHistoryRetainDay)); policy.dataHistoryRetainDay));
jobFinished(params, false /* wantsReschedule */); jobFinished(params, false /* wantsReschedule */);
}); });

View File

@@ -17,36 +17,55 @@
package com.android.settings.fuelgauge.batterytip; package com.android.settings.fuelgauge.batterytip;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any; 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.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static org.robolectric.RuntimeEnvironment.application;
import android.app.job.JobInfo; import android.app.job.JobInfo;
import android.app.job.JobParameters;
import android.app.job.JobScheduler; import android.app.job.JobScheduler;
import android.content.Context; import android.content.Context;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowThreadUtils;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows; import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowJobScheduler; import org.robolectric.shadows.ShadowJobScheduler;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@Config(shadows = ShadowThreadUtils.class)
public class AnomalyCleanupJobServiceTest { 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 Context mContext;
private JobScheduler mJobScheduler; private JobScheduler mJobScheduler;
@Mock
private JobParameters mParams;
@Before @Before
public void setUp() { public void setUp() {
@@ -57,8 +76,13 @@ public class AnomalyCleanupJobServiceTest {
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler); when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
} }
@After
public void cleanUp() {
DatabaseTestUtils.clearDb(mContext);
}
@Test @Test
public void testScheduleCleanUp() { public void scheduleCleanUp() {
AnomalyCleanupJobService.scheduleCleanUp(mContext); AnomalyCleanupJobService.scheduleCleanUp(mContext);
ShadowJobScheduler shadowJobScheduler = ShadowJobScheduler shadowJobScheduler =
@@ -74,10 +98,35 @@ public class AnomalyCleanupJobServiceTest {
} }
@Test @Test
public void testScheduleCleanUp_invokeTwice_onlyScheduleOnce() { public void scheduleCleanUp_invokeTwice_onlyScheduleOnce() {
AnomalyCleanupJobService.scheduleCleanUp(mContext); AnomalyCleanupJobService.scheduleCleanUp(mContext);
AnomalyCleanupJobService.scheduleCleanUp(mContext); AnomalyCleanupJobService.scheduleCleanUp(mContext);
verify(mJobScheduler, times(1)).schedule(any()); 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());
}
} }