Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e0864a03 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add test for anomaly detection in P" into pi-dev

parents 8838b3fa 9553855a
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -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);
    }
}
+6 −4
Original line number Diff line number Diff line
@@ -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);
@@ -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
@@ -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;
        }
+54 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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<>();
@@ -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);
    }
}