Merge "Add test for anomaly detection in P" into pi-dev
am: e0864a030f
Change-Id: Idff8e7772130d5d3de9485838f0b18b575517fac
This commit is contained in:
@@ -48,13 +48,4 @@ public class AnomalyConfigReceiver extends BroadcastReceiver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
void uploadPendingIntent(StatsManager statsManager, PendingIntent pendingIntent) {
|
|
||||||
Log.i(TAG, "Upload PendingIntent to StatsManager. configKey: "
|
|
||||||
+ StatsManagerConfig.ANOMALY_CONFIG_KEY + " subId: "
|
|
||||||
+ StatsManagerConfig.SUBSCRIBER_ID);
|
|
||||||
statsManager.setBroadcastSubscriber(StatsManagerConfig.ANOMALY_CONFIG_KEY,
|
|
||||||
StatsManagerConfig.SUBSCRIBER_ID, pendingIntent);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -59,9 +59,11 @@ import java.util.concurrent.TimeUnit;
|
|||||||
/** A JobService to store anomaly data to anomaly database */
|
/** A JobService to store anomaly data to anomaly database */
|
||||||
public class AnomalyDetectionJobService extends JobService {
|
public class AnomalyDetectionJobService extends JobService {
|
||||||
private static final String TAG = "AnomalyDetectionService";
|
private static final String TAG = "AnomalyDetectionService";
|
||||||
private static final int UID_NULL = 0;
|
|
||||||
private static final int STATSD_UID_FILED = 1;
|
|
||||||
private static final int ON = 1;
|
private static final int ON = 1;
|
||||||
|
@VisibleForTesting
|
||||||
|
static final int UID_NULL = -1;
|
||||||
|
@VisibleForTesting
|
||||||
|
static final int STATSD_UID_FILED = 1;
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final long MAX_DELAY_MS = TimeUnit.MINUTES.toMillis(30);
|
static final long MAX_DELAY_MS = TimeUnit.MINUTES.toMillis(30);
|
||||||
@@ -143,7 +145,8 @@ public class AnomalyDetectionJobService extends JobService {
|
|||||||
: Settings.Global.getInt(contentResolver,
|
: Settings.Global.getInt(contentResolver,
|
||||||
Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON) == ON;
|
Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON) == ON;
|
||||||
final String packageName = batteryUtils.getPackageName(uid);
|
final String packageName = batteryUtils.getPackageName(uid);
|
||||||
if (!isSystemUid(uid) && !powerWhitelistBackend.isSysWhitelistedExceptIdle(
|
if (uid != UID_NULL && !isSystemUid(uid)
|
||||||
|
&& !powerWhitelistBackend.isSysWhitelistedExceptIdle(
|
||||||
packageManager.getPackagesForUid(uid))) {
|
packageManager.getPackagesForUid(uid))) {
|
||||||
boolean anomalyDetected = true;
|
boolean anomalyDetected = true;
|
||||||
if (anomalyInfo.anomalyType
|
if (anomalyInfo.anomalyType
|
||||||
@@ -191,7 +194,6 @@ public class AnomalyDetectionJobService extends JobService {
|
|||||||
*/
|
*/
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
int extractUidFromStatsDimensionsValue(StatsDimensionsValue statsDimensionsValue) {
|
int extractUidFromStatsDimensionsValue(StatsDimensionsValue statsDimensionsValue) {
|
||||||
//TODO(b/73172999): Add robo test for this method
|
|
||||||
if (statsDimensionsValue == null) {
|
if (statsDimensionsValue == null) {
|
||||||
return UID_NULL;
|
return UID_NULL;
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
package com.android.settings.fuelgauge.batterytip;
|
package com.android.settings.fuelgauge.batterytip;
|
||||||
|
|
||||||
|
import static android.os.StatsDimensionsValue.FLOAT_VALUE_TYPE;
|
||||||
|
import static android.os.StatsDimensionsValue.INT_VALUE_TYPE;
|
||||||
|
import static android.os.StatsDimensionsValue.TUPLE_VALUE_TYPE;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
@@ -24,9 +28,11 @@ import static org.mockito.Matchers.anyLong;
|
|||||||
import static org.mockito.Matchers.anyString;
|
import static org.mockito.Matchers.anyString;
|
||||||
import static org.mockito.Matchers.eq;
|
import static org.mockito.Matchers.eq;
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
import static org.robolectric.RuntimeEnvironment.application;
|
import static org.robolectric.RuntimeEnvironment.application;
|
||||||
|
|
||||||
import android.app.StatsManager;
|
import android.app.StatsManager;
|
||||||
@@ -35,6 +41,8 @@ import android.app.job.JobScheduler;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.StatsDimensionsValue;
|
import android.os.StatsDimensionsValue;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
@@ -148,6 +156,21 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
anyInt(), anyLong());
|
anyInt(), anyLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSaveAnomalyToDatabase_uidNull_doNotSave() {
|
||||||
|
doReturn(AnomalyDetectionJobService.UID_NULL).when(
|
||||||
|
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||||
|
|
||||||
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mBatteryStatsHelper,
|
||||||
|
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||||
|
mPowerWhitelistBackend, mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
||||||
|
mBundle);
|
||||||
|
|
||||||
|
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
||||||
|
anyInt(), anyLong());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSaveAnomalyToDatabase_normalAppWithAutoRestriction_save() {
|
public void testSaveAnomalyToDatabase_normalAppWithAutoRestriction_save() {
|
||||||
final ArrayList<String> cookies = new ArrayList<>();
|
final ArrayList<String> cookies = new ArrayList<>();
|
||||||
@@ -196,4 +219,35 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
SYSTEM_PACKAGE,
|
SYSTEM_PACKAGE,
|
||||||
Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_TYPE));
|
Pair.create(MetricsProto.MetricsEvent.FIELD_CONTEXT, ANOMALY_TYPE));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testExtractUidFromStatsDimensionsValue_extractCorrectUid() {
|
||||||
|
// Build an integer dimensions value.
|
||||||
|
final StatsDimensionsValue intValue = mock(StatsDimensionsValue.class);
|
||||||
|
when(intValue.isValueType(INT_VALUE_TYPE)).thenReturn(true);
|
||||||
|
when(intValue.getField()).thenReturn(AnomalyDetectionJobService.STATSD_UID_FILED);
|
||||||
|
when(intValue.getIntValue()).thenReturn(UID);
|
||||||
|
|
||||||
|
// Build a tuple dimensions value and put the previous integer dimensions value inside.
|
||||||
|
final StatsDimensionsValue tupleValue = mock(StatsDimensionsValue.class);
|
||||||
|
when(tupleValue.isValueType(TUPLE_VALUE_TYPE)).thenReturn(true);
|
||||||
|
final List<StatsDimensionsValue> statsDimensionsValues = new ArrayList<>();
|
||||||
|
statsDimensionsValues.add(intValue);
|
||||||
|
when(tupleValue.getTupleValueList()).thenReturn(statsDimensionsValues);
|
||||||
|
|
||||||
|
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(
|
||||||
|
tupleValue)).isEqualTo(UID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testExtractUidFromStatsDimensionsValue_wrongFormat_returnNull() {
|
||||||
|
// Build a float dimensions value
|
||||||
|
final StatsDimensionsValue floatValue = mock(StatsDimensionsValue.class);
|
||||||
|
when(floatValue.isValueType(FLOAT_VALUE_TYPE)).thenReturn(true);
|
||||||
|
when(floatValue.getField()).thenReturn(AnomalyDetectionJobService.STATSD_UID_FILED);
|
||||||
|
when(floatValue.getFloatValue()).thenReturn(0f);
|
||||||
|
|
||||||
|
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(
|
||||||
|
floatValue)).isEqualTo(AnomalyDetectionJobService.UID_NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user