DO NOT MERGE Add metric log for anomaly.
This cl creates metric log when anomaly surfaces in battery page or anomaly dialog. Each anomaly action contains two fields: 1. FIELD_CONTEXT(int): determine which fragment start this action. 2. FIELD_ANOMALY_ACTION_TYPE(int): determine action type for this anomaly. **Cherry-picked from ag/3120176. Fix merge conflict in import part in AdvancedPowerUsageDetail** Bug: 68215016 Test: RunSettingsRoboTests Change-Id: I83761e2a9c206ea7a04f7d031a6961fdab7ca9a0
This commit is contained in:
@@ -32,6 +32,7 @@ import android.os.Build;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.fuelgauge.anomaly.action.AnomalyAction;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.TestConfig;
|
||||
|
||||
@@ -68,7 +69,7 @@ public class AnomalyDialogFragmentTest {
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mWakeLockAnomaly = new Anomaly.Builder()
|
||||
.setType(Anomaly.AnomalyType.WAKE_LOCK)
|
||||
.setUid(UID)
|
||||
@@ -94,6 +95,7 @@ public class AnomalyDialogFragmentTest {
|
||||
.setPackageName(PACKAGE_NAME)
|
||||
.setDisplayName(DISPLAY_NAME)
|
||||
.build();
|
||||
FakeFeatureFactory.setupForTest(mContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -166,29 +168,4 @@ public class AnomalyDialogFragmentTest {
|
||||
assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo(
|
||||
mContext.getString(R.string.dlg_cancel));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnCreateDialog_bluetoothAnomaly_fireLocationCheckDialog() {
|
||||
mAnomalyDialogFragment = spy(AnomalyDialogFragment.newInstance(mBluetoothAnomaly,
|
||||
0 /* metricskey */));
|
||||
mAnomalyDialogFragment.mAnomalyUtils = mAnomalyUtils;
|
||||
doReturn(mAnomalyAction).when(mAnomalyUtils).getAnomalyAction(any());
|
||||
doNothing().when(mAnomalyDialogFragment).initAnomalyUtils();
|
||||
doReturn(Anomaly.AnomalyActionType.LOCATION_CHECK).when(mAnomalyAction).getActionType();
|
||||
|
||||
FragmentTestUtil.startFragment(mAnomalyDialogFragment);
|
||||
|
||||
final AlertDialog dialog = (AlertDialog) ShadowDialog.getLatestDialog();
|
||||
ShadowAlertDialog shadowDialog = shadowOf(dialog);
|
||||
|
||||
assertThat(shadowDialog.getMessage()).isEqualTo(
|
||||
mContext.getString(R.string.dialog_location_message,
|
||||
mWakeLockAnomaly.displayName));
|
||||
assertThat(shadowDialog.getTitle()).isEqualTo(
|
||||
mContext.getString(R.string.dialog_location_title));
|
||||
assertThat(dialog.getButton(DialogInterface.BUTTON_POSITIVE).getText()).isEqualTo(
|
||||
mContext.getString(R.string.dialog_location_ok));
|
||||
assertThat(dialog.getButton(DialogInterface.BUTTON_NEGATIVE).getText()).isEqualTo(
|
||||
mContext.getString(R.string.dlg_cancel));
|
||||
}
|
||||
}
|
||||
|
@@ -18,8 +18,13 @@ package com.android.settings.fuelgauge.anomaly;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.os.Build;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.os.Build;
|
||||
import android.util.Pair;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settings.fuelgauge.anomaly.action.StopAndBackgroundCheckAction;
|
||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||
import com.android.settings.TestConfig;
|
||||
@@ -31,18 +36,42 @@ import com.android.settings.fuelgauge.anomaly.checker.WakeupAlarmAnomalyDetector
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@RunWith(SettingsRobolectricTestRunner.class)
|
||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
|
||||
ShadowKeyValueListParserWrapperImpl.class})
|
||||
public class AnomalyUtilsTest {
|
||||
private static final String PACKAGE_NAME_WAKEUP = "com.android.app1";
|
||||
private static final String PACKAGE_NAME_WAKELOCK = "com.android.app2";
|
||||
private static final int CONTEXT_ID = 55;
|
||||
|
||||
@Mock
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
private AnomalyUtils mAnomalyUtils;
|
||||
private Anomaly mWakeupAnomaly;
|
||||
private Anomaly mWakeLockAnomaly;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mAnomalyUtils = new AnomalyUtils(RuntimeEnvironment.application);
|
||||
|
||||
mWakeLockAnomaly = new Anomaly.Builder()
|
||||
.setType(Anomaly.AnomalyType.WAKE_LOCK)
|
||||
.setPackageName(PACKAGE_NAME_WAKELOCK)
|
||||
.build();
|
||||
mWakeupAnomaly = new Anomaly.Builder()
|
||||
.setType(Anomaly.AnomalyType.WAKEUP_ALARM)
|
||||
.setPackageName(PACKAGE_NAME_WAKEUP)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -97,4 +126,47 @@ public class AnomalyUtilsTest {
|
||||
assertThat(mAnomalyUtils.getAnomalyDetector(Anomaly.AnomalyType.WAKEUP_ALARM)).isInstanceOf(
|
||||
WakeupAlarmAnomalyDetector.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLogAnomaly() {
|
||||
mAnomalyUtils.logAnomaly(mMetricsFeatureProvider, mWakeLockAnomaly, CONTEXT_ID);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(RuntimeEnvironment.application,
|
||||
MetricsProto.MetricsEvent.ANOMALY_TYPE_WAKELOCK,
|
||||
PACKAGE_NAME_WAKELOCK,
|
||||
Pair.create(
|
||||
MetricsProto.MetricsEvent.FIELD_CONTEXT,
|
||||
CONTEXT_ID),
|
||||
Pair.create(
|
||||
MetricsProto.MetricsEvent.FIELD_ANOMALY_ACTION_TYPE,
|
||||
Anomaly.AnomalyActionType.FORCE_STOP));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLogAnomalies() {
|
||||
final List<Anomaly> anomalies = new ArrayList<>();
|
||||
anomalies.add(mWakeLockAnomaly);
|
||||
anomalies.add(mWakeupAnomaly);
|
||||
|
||||
mAnomalyUtils.logAnomalies(mMetricsFeatureProvider, anomalies, CONTEXT_ID);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(RuntimeEnvironment.application,
|
||||
MetricsProto.MetricsEvent.ANOMALY_TYPE_WAKELOCK,
|
||||
PACKAGE_NAME_WAKELOCK,
|
||||
Pair.create(
|
||||
MetricsProto.MetricsEvent.FIELD_CONTEXT,
|
||||
CONTEXT_ID),
|
||||
Pair.create(
|
||||
MetricsProto.MetricsEvent.FIELD_ANOMALY_ACTION_TYPE,
|
||||
Anomaly.AnomalyActionType.FORCE_STOP));
|
||||
verify(mMetricsFeatureProvider).action(RuntimeEnvironment.application,
|
||||
MetricsProto.MetricsEvent.ANOMALY_TYPE_WAKEUP_ALARM,
|
||||
PACKAGE_NAME_WAKEUP,
|
||||
Pair.create(
|
||||
MetricsProto.MetricsEvent.FIELD_CONTEXT,
|
||||
CONTEXT_ID),
|
||||
Pair.create(
|
||||
MetricsProto.MetricsEvent.FIELD_ANOMALY_ACTION_TYPE,
|
||||
Anomaly.AnomalyActionType.STOP_AND_BACKGROUND_CHECK));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user