Setting up Metrics CTS Tests
This begins testing the metrics via CTS Tests in detail. Further tests
are to follow.
Bug: 273339663
Test: Build Test
Change-Id: I40da0400b827555a2fd84910b9e361c17c1d2c1f
diff --git a/hostsidetests/statsdatom/Android.bp b/hostsidetests/statsdatom/Android.bp
index f9c1d7f..15006a9 100644
--- a/hostsidetests/statsdatom/Android.bp
+++ b/hostsidetests/statsdatom/Android.bp
@@ -31,6 +31,7 @@
"src/**/binderstats/*.java",
"src/**/bluetooth/*.java",
"src/**/cpu/*.java",
+ "src/**/credentials/*.java",
"src/**/devicepower/*.java",
"src/**/devicestate/*.java",
"src/**/display/*.java",
@@ -88,6 +89,7 @@
":CtsStatsdAlarmHelper",
":CtsStatsdAlarmHelper2",
":CtsVoiceInteractionTestCases",
+ ":CtsCredentialManagerTestCases",
],
per_testcase_directory: true,
}
diff --git a/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/AtomTests.java b/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/AtomTests.java
index 368fcc6..327ca10 100644
--- a/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/AtomTests.java
+++ b/hostsidetests/statsdatom/apps/statsdapp/src/com/android/server/cts/device/statsdatom/AtomTests.java
@@ -23,7 +23,6 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assume.assumeNotNull;
import static org.junit.Assume.assumeTrue;
-import static org.junit.Assert.assertEquals;
import android.accounts.Account;
import android.accounts.AccountManager;
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/credentials/CredentialsStatsTest.java b/hostsidetests/statsdatom/src/android/cts/statsdatom/credentials/CredentialsStatsTest.java
new file mode 100644
index 0000000..d4ef9bc
--- /dev/null
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/credentials/CredentialsStatsTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.cts.statsdatom.credentials;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.cts.statsdatom.lib.AtomTestUtils;
+import android.cts.statsdatom.lib.ConfigUtils;
+import android.cts.statsdatom.lib.DeviceUtils;
+import android.cts.statsdatom.lib.ReportUtils;
+
+import com.android.os.StatsLog;
+import com.android.os.credentials.ApiName;
+import com.android.os.credentials.CredentialManagerInitialPhaseReported;
+import com.android.os.credentials.CredentialsExtensionAtoms;
+import com.android.tradefed.build.IBuildInfo;
+import com.android.tradefed.testtype.DeviceTestCase;
+import com.android.tradefed.testtype.IBuildReceiver;
+import com.android.tradefed.util.RunUtil;
+
+import com.google.protobuf.ExtensionRegistry;
+
+import java.util.List;
+
+/**
+ * CTS Tests for Atoms in the Credential Manager flows.
+ *
+ * atest CtsStatsdAtomHostTestCases:CredentialsStatsTest
+ */
+public class CredentialsStatsTest extends DeviceTestCase implements IBuildReceiver {
+ private static final String TAG = "CredentialsStats";
+
+ public static final String TEST_PKG = "android.credentials.cts";
+ public static final String TEST_APK = "CtsCredentialManagerTestCases.apk";
+ public static final String TEST_CLASS =
+ "android.credentials.cts.CtsCredentialProviderServiceDeviceTest";
+
+ private IBuildInfo mCtsBuild;
+ private int mStatsdAtomTestUid;
+
+ private static final String TEST_GET_PASSWORD_NO_CREDENTIAL =
+ "testGetPasswordCredentialRequest_invalidAllowedProviders_onErrorForEmptyResponse";
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ assertThat(mCtsBuild).isNotNull();
+ ConfigUtils.removeConfig(getDevice());
+ ReportUtils.clearReports(getDevice());
+ DeviceUtils.installStatsdTestApp(getDevice(), mCtsBuild);
+ DeviceUtils.installTestApp(getDevice(), TEST_APK, TEST_PKG, mCtsBuild);
+ RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG);
+ mStatsdAtomTestUid = DeviceUtils.getAppUid(getDevice(), DeviceUtils.STATSD_ATOM_TEST_PKG);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ ConfigUtils.removeConfig(getDevice());
+ ReportUtils.clearReports(getDevice());
+ DeviceUtils.uninstallStatsdTestApp(getDevice());
+ DeviceUtils.uninstallTestApp(getDevice(), TEST_PKG);
+ super.tearDown();
+ }
+
+ @Override
+ public void setBuild(IBuildInfo buildInfo) {
+ mCtsBuild = buildInfo;
+ }
+
+ public void testInitialPhaseKnownCaller() throws Exception {
+ ConfigUtils.uploadConfigForPushedAtom(getDevice(), TEST_PKG,
+ CredentialsExtensionAtoms.CREDENTIAL_MANAGER_INIT_PHASE_REPORTED_FIELD_NUMBER);
+ ExtensionRegistry registry = ExtensionRegistry.newInstance();
+ CredentialsExtensionAtoms.registerAllExtensions(registry);
+
+ DeviceUtils.runDeviceTests(getDevice(), TEST_PKG, TEST_CLASS,
+ TEST_GET_PASSWORD_NO_CREDENTIAL);
+
+ RunUtil.getDefault().sleep(AtomTestUtils.WAIT_TIME_LONG);
+
+ List<StatsLog.EventMetricData> data = ReportUtils.getEventMetricDataList(
+ getDevice(), registry);
+
+ assertThat(data.size()).isAtLeast(1);
+
+ CredentialManagerInitialPhaseReported actualInitialMetric =
+ data.get(0).getAtom().getExtension(
+ CredentialsExtensionAtoms.credentialManagerInitPhaseReported);
+
+ assertThat(actualInitialMetric.getApiName().getNumber()).isEqualTo(
+ ApiName.API_NAME_GET_CREDENTIAL_VALUE);
+ assertThat(actualInitialMetric.getCallerUid()).isNotEqualTo(-1);
+ assertThat(actualInitialMetric.getSessionId()).isNotEqualTo(0);
+ assertThat(actualInitialMetric.getInitialTimestampReferenceNanoseconds()).isGreaterThan(0);
+ assertThat(actualInitialMetric.getRequestUniqueClasstypesList()).hasSize(1);
+ assertThat(actualInitialMetric.getPerClasstypeCountsList().get(0)).isEqualTo(1);
+ assertThat(actualInitialMetric.getOriginSpecified()).isEqualTo(false);
+ }
+}
diff --git a/hostsidetests/statsdatom/src/android/cts/statsdatom/credentials/OWNERS b/hostsidetests/statsdatom/src/android/cts/statsdatom/credentials/OWNERS
new file mode 100644
index 0000000..ffef4ee
--- /dev/null
+++ b/hostsidetests/statsdatom/src/android/cts/statsdatom/credentials/OWNERS
@@ -0,0 +1,2 @@
+# Bug component: 1218609
+include platform/frameworks/base:/core/java/android/credentials/OWNERS
\ No newline at end of file