Loading src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java +0 −9 Original line number Diff line number Diff line Loading @@ -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); } } src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java +6 −4 Original line number Diff line number Diff line Loading @@ -59,9 +59,11 @@ import java.util.concurrent.TimeUnit; /** A JobService to store anomaly data to anomaly database */ public class AnomalyDetectionJobService extends JobService { 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; @VisibleForTesting static final int UID_NULL = -1; @VisibleForTesting static final int STATSD_UID_FILED = 1; @VisibleForTesting static final long MAX_DELAY_MS = TimeUnit.MINUTES.toMillis(30); Loading Loading @@ -143,7 +145,8 @@ public class AnomalyDetectionJobService extends JobService { : Settings.Global.getInt(contentResolver, Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON) == ON; final String packageName = batteryUtils.getPackageName(uid); if (!isSystemUid(uid) && !powerWhitelistBackend.isSysWhitelistedExceptIdle( if (uid != UID_NULL && !isSystemUid(uid) && !powerWhitelistBackend.isSysWhitelistedExceptIdle( packageManager.getPackagesForUid(uid))) { boolean anomalyDetected = true; if (anomalyInfo.anomalyType Loading Loading @@ -191,7 +194,6 @@ public class AnomalyDetectionJobService extends JobService { */ @VisibleForTesting int extractUidFromStatsDimensionsValue(StatsDimensionsValue statsDimensionsValue) { //TODO(b/73172999): Add robo test for this method if (statsDimensionsValue == null) { return UID_NULL; } Loading tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java +54 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ 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 org.mockito.Matchers.any; Loading @@ -24,9 +28,11 @@ import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.RuntimeEnvironment.application; import android.app.StatsManager; Loading @@ -35,6 +41,8 @@ import android.app.job.JobScheduler; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.StatsDimensionsValue; import android.os.UserManager; Loading Loading @@ -148,6 +156,21 @@ public class AnomalyDetectionJobServiceTest { 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 public void testSaveAnomalyToDatabase_normalAppWithAutoRestriction_save() { final ArrayList<String> cookies = new ArrayList<>(); Loading Loading @@ -196,4 +219,35 @@ public class AnomalyDetectionJobServiceTest { SYSTEM_PACKAGE, 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); } } Loading
src/com/android/settings/fuelgauge/batterytip/AnomalyConfigReceiver.java +0 −9 Original line number Diff line number Diff line Loading @@ -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); } }
src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobService.java +6 −4 Original line number Diff line number Diff line Loading @@ -59,9 +59,11 @@ import java.util.concurrent.TimeUnit; /** A JobService to store anomaly data to anomaly database */ public class AnomalyDetectionJobService extends JobService { 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; @VisibleForTesting static final int UID_NULL = -1; @VisibleForTesting static final int STATSD_UID_FILED = 1; @VisibleForTesting static final long MAX_DELAY_MS = TimeUnit.MINUTES.toMillis(30); Loading Loading @@ -143,7 +145,8 @@ public class AnomalyDetectionJobService extends JobService { : Settings.Global.getInt(contentResolver, Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON) == ON; final String packageName = batteryUtils.getPackageName(uid); if (!isSystemUid(uid) && !powerWhitelistBackend.isSysWhitelistedExceptIdle( if (uid != UID_NULL && !isSystemUid(uid) && !powerWhitelistBackend.isSysWhitelistedExceptIdle( packageManager.getPackagesForUid(uid))) { boolean anomalyDetected = true; if (anomalyInfo.anomalyType Loading Loading @@ -191,7 +194,6 @@ public class AnomalyDetectionJobService extends JobService { */ @VisibleForTesting int extractUidFromStatsDimensionsValue(StatsDimensionsValue statsDimensionsValue) { //TODO(b/73172999): Add robo test for this method if (statsDimensionsValue == null) { return UID_NULL; } Loading
tests/robotests/src/com/android/settings/fuelgauge/batterytip/AnomalyDetectionJobServiceTest.java +54 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ 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 org.mockito.Matchers.any; Loading @@ -24,9 +28,11 @@ import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.RuntimeEnvironment.application; import android.app.StatsManager; Loading @@ -35,6 +41,8 @@ import android.app.job.JobScheduler; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.StatsDimensionsValue; import android.os.UserManager; Loading Loading @@ -148,6 +156,21 @@ public class AnomalyDetectionJobServiceTest { 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 public void testSaveAnomalyToDatabase_normalAppWithAutoRestriction_save() { final ArrayList<String> cookies = new ArrayList<>(); Loading Loading @@ -196,4 +219,35 @@ public class AnomalyDetectionJobServiceTest { SYSTEM_PACKAGE, 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); } }