Update insert method for battery database

1. Add conflict code to ignore the confliction and return -1 when
insert fails.
2. Add boolean return value to show whether insert sucessfully
3. Add unit test. We don't write robo test because robolectirc use
"update" to shadow "insert" operation, which returns the wrong data.

Bug: 77968649
Test: SettingsUnitTest
Change-Id: Ibd3b53cdb1796d74ea4a2ca1f067e2b302b939e9
This commit is contained in:
Lei Yu
2018-04-20 10:51:33 -07:00
parent 0fcddc77c7
commit 4bfbaa6047
2 changed files with 37 additions and 5 deletions

View File

@@ -21,6 +21,8 @@ import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import static com.google.common.truth.Truth.assertThat;
import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
@@ -33,6 +35,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.List;
import java.util.concurrent.TimeUnit;
@RunWith(AndroidJUnit4.class)
@@ -41,6 +44,8 @@ public class RestrictAppTest {
private static final String BATTERY_INTENT = "android.intent.action.POWER_USAGE_SUMMARY";
private static final String PACKAGE_SETTINGS = "com.android.settings";
private static final String PACKAGE_SYSTEM_UI = "com.android.systemui";
private static final int ANOMALY_TYPE =
StatsManagerConfig.AnomalyType.EXCESSIVE_WAKELOCK_ALL_SCREEN_OFF;
private BatteryDatabaseManager mBatteryDatabaseManager;
private PackageManager mPackageManager;
@@ -58,7 +63,7 @@ public class RestrictAppTest {
public void batterySettings_hasOneAnomaly_showAnomaly() throws
PackageManager.NameNotFoundException {
mBatteryDatabaseManager.insertAnomaly(mPackageManager.getPackageUid(PACKAGE_SETTINGS, 0),
PACKAGE_SETTINGS, 1,
PACKAGE_SETTINGS, ANOMALY_TYPE,
AnomalyDatabaseHelper.State.NEW, System.currentTimeMillis());
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
@@ -70,10 +75,10 @@ public class RestrictAppTest {
public void batterySettings_hasTwoAnomalies_showAnomalies() throws
PackageManager.NameNotFoundException {
mBatteryDatabaseManager.insertAnomaly(mPackageManager.getPackageUid(PACKAGE_SETTINGS, 0),
PACKAGE_SETTINGS, 1,
PACKAGE_SETTINGS, ANOMALY_TYPE,
AnomalyDatabaseHelper.State.NEW, System.currentTimeMillis());
mBatteryDatabaseManager.insertAnomaly(mPackageManager.getPackageUid(PACKAGE_SYSTEM_UI, 0),
PACKAGE_SYSTEM_UI, 1,
PACKAGE_SYSTEM_UI, ANOMALY_TYPE,
AnomalyDatabaseHelper.State.NEW, System.currentTimeMillis());
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
@@ -95,4 +100,26 @@ public class RestrictAppTest {
instrumentation.startActivitySync(new Intent(BATTERY_INTENT));
onView(withText("2 apps recently restricted")).check(matches(isDisplayed()));
}
@Test
public void insertDuplicateAnomalies_onlyInsertOnce() throws
PackageManager.NameNotFoundException {
final int uid = mPackageManager.getPackageUid(PACKAGE_SETTINGS, 0);
final long now = System.currentTimeMillis();
// Insert same anomaly twice, it fails at the second time.
assertThat(mBatteryDatabaseManager.insertAnomaly(uid, PACKAGE_SETTINGS, ANOMALY_TYPE,
AnomalyDatabaseHelper.State.NEW, now)).isTrue();
assertThat(mBatteryDatabaseManager.insertAnomaly(uid, PACKAGE_SETTINGS, ANOMALY_TYPE,
AnomalyDatabaseHelper.State.NEW, now)).isFalse();
// In database, only contains one row
List<AppInfo> newAppInfos = mBatteryDatabaseManager.queryAllAnomalies(0,
AnomalyDatabaseHelper.State.NEW);
assertThat(newAppInfos).containsExactly(new AppInfo.Builder()
.setUid(uid)
.setPackageName(PACKAGE_SETTINGS)
.addAnomalyType(ANOMALY_TYPE)
.build());
}
}