1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.server.credentials;
17 
18 import android.content.Context;
19 
20 import androidx.test.core.app.ApplicationProvider;
21 import androidx.test.filters.SmallTest;
22 import androidx.test.runner.AndroidJUnit4;
23 
24 import com.android.server.credentials.metrics.BrowsedAuthenticationMetric;
25 import com.android.server.credentials.metrics.CandidateAggregateMetric;
26 import com.android.server.credentials.metrics.CandidateBrowsingPhaseMetric;
27 import com.android.server.credentials.metrics.ChosenProviderFinalPhaseMetric;
28 import com.android.server.credentials.metrics.InitialPhaseMetric;
29 
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 
34 import java.security.cert.CertificateException;
35 import java.util.HashMap;
36 import java.util.List;
37 import java.util.Map;
38 
39 /**
40  * Given the secondary-system nature of the MetricUtilities, we expect absolutely nothing to
41  * throw an error. If one presents itself, that is problematic.
42  *
43  * atest FrameworksServicesTests:com.android.server.credentials.MetricUtilitiesTest
44  */
45 @RunWith(AndroidJUnit4.class)
46 @SmallTest
47 public final class MetricUtilitiesTest {
48 
49     @Before
setUp()50     public void setUp() throws CertificateException {
51         final Context context = ApplicationProvider.getApplicationContext();
52     }
53 
54     @Test
logApiCalledInitialPhase_nullInitPhaseMetricAndNegativeSequence_success()55     public void logApiCalledInitialPhase_nullInitPhaseMetricAndNegativeSequence_success() {
56         MetricUtilities.logApiCalledInitialPhase(null, -1);
57     }
58 
59     @Test
logApiCalledInitialPhase_invalidInitPhaseMetricAndPositiveSequence_success()60     public void logApiCalledInitialPhase_invalidInitPhaseMetricAndPositiveSequence_success() {
61         MetricUtilities.logApiCalledInitialPhase(new InitialPhaseMetric(-1), 1);
62     }
63 
64     @Test
logApiCalledInitialPhase_validInitPhaseMetric_success()65     public void logApiCalledInitialPhase_validInitPhaseMetric_success() {
66         InitialPhaseMetric validInitPhaseMetric = new InitialPhaseMetric(
67                 MetricUtilities.getHighlyUniqueInteger());
68         MetricUtilities.logApiCalledInitialPhase(validInitPhaseMetric, 1);
69     }
70 
71     @Test
logApiCalledTotalCandidate_nullCandidateNegativeSequence_success()72     public void logApiCalledTotalCandidate_nullCandidateNegativeSequence_success() {
73         MetricUtilities.logApiCalledAggregateCandidate(null, -1);
74     }
75 
76     @Test
logApiCalledTotalCandidate_invalidCandidatePhasePositiveSequence_success()77     public void logApiCalledTotalCandidate_invalidCandidatePhasePositiveSequence_success() {
78         MetricUtilities.logApiCalledAggregateCandidate(new CandidateAggregateMetric(-1), 1);
79     }
80 
81     @Test
logApiCalledTotalCandidate_validPhaseMetric_success()82     public void logApiCalledTotalCandidate_validPhaseMetric_success() {
83         MetricUtilities.logApiCalledAggregateCandidate(
84                 new CandidateAggregateMetric(MetricUtilities.getHighlyUniqueInteger()), 1);
85     }
86 
87     @Test
logApiCalledNoUidFinal_nullNoUidFinalNegativeSequenceAndStatus_success()88     public void logApiCalledNoUidFinal_nullNoUidFinalNegativeSequenceAndStatus_success() {
89         MetricUtilities.logApiCalledNoUidFinal(null, null,
90                 -1, -1);
91     }
92 
93     @Test
logApiCalledNoUidFinal_invalidNoUidFinalPhasePositiveSequenceAndStatus_success()94     public void logApiCalledNoUidFinal_invalidNoUidFinalPhasePositiveSequenceAndStatus_success() {
95         MetricUtilities.logApiCalledNoUidFinal(new ChosenProviderFinalPhaseMetric(-1, -1),
96                 List.of(new CandidateBrowsingPhaseMetric()), 1, 1);
97     }
98 
99     @Test
logApiCalledNoUidFinal_validNoUidFinalMetric_success()100     public void logApiCalledNoUidFinal_validNoUidFinalMetric_success() {
101         MetricUtilities.logApiCalledNoUidFinal(
102                 new ChosenProviderFinalPhaseMetric(MetricUtilities.getHighlyUniqueInteger(),
103                         MetricUtilities.getHighlyUniqueInteger()),
104                 List.of(new CandidateBrowsingPhaseMetric()), 1, 1);
105     }
106 
107     @Test
logApiCalledCandidate_nullMapNullInitFinalNegativeSequence_success()108     public void logApiCalledCandidate_nullMapNullInitFinalNegativeSequence_success() {
109         MetricUtilities.logApiCalledCandidatePhase(null, -1,
110                 null);
111     }
112 
113     @Test
logApiCalledCandidate_invalidProvidersCandidatePositiveSequence_success()114     public void logApiCalledCandidate_invalidProvidersCandidatePositiveSequence_success() {
115         Map<String, ProviderSession> testMap = new HashMap<>();
116         testMap.put("s", null);
117         MetricUtilities.logApiCalledCandidatePhase(testMap, 1,
118                 null);
119     }
120 
121     @Test
logApiCalledCandidateGet_nullMapFinalNegativeSequence_success()122     public void logApiCalledCandidateGet_nullMapFinalNegativeSequence_success() {
123         MetricUtilities.logApiCalledCandidateGetMetric(null, -1);
124     }
125 
126     @Test
logApiCalledCandidateGet_invalidProvidersCandidatePositiveSequence_success()127     public void logApiCalledCandidateGet_invalidProvidersCandidatePositiveSequence_success() {
128         Map<String, ProviderSession> testMap = new HashMap<>();
129         testMap.put("s", null);
130         MetricUtilities.logApiCalledCandidateGetMetric(testMap, 1);
131     }
132 
133     @Test
logApiCalledAuthMetric_nullAuthMetricNegativeSequence_success()134     public void logApiCalledAuthMetric_nullAuthMetricNegativeSequence_success() {
135         MetricUtilities.logApiCalledAuthenticationMetric(null, -1);
136     }
137 
138     @Test
logApiCalledAuthMetric_invalidAuthMetricPositiveSequence_success()139     public void logApiCalledAuthMetric_invalidAuthMetricPositiveSequence_success() {
140         MetricUtilities.logApiCalledAuthenticationMetric(new BrowsedAuthenticationMetric(-1), 1);
141     }
142 
143     @Test
logApiCalledAuthMetric_nullAuthMetricPositiveSequence_success()144     public void logApiCalledAuthMetric_nullAuthMetricPositiveSequence_success() {
145         MetricUtilities.logApiCalledAuthenticationMetric(
146                 new BrowsedAuthenticationMetric(MetricUtilities.getHighlyUniqueInteger()), -1);
147     }
148 
149     @Test
logApiCalledFinal_nullFinalNegativeSequenceAndStatus_success()150     public void logApiCalledFinal_nullFinalNegativeSequenceAndStatus_success() {
151         MetricUtilities.logApiCalledFinalPhase(null, null,
152                 -1, -1);
153     }
154 
155     @Test
logApiCalledFinal_invalidFinalPhasePositiveSequenceAndStatus_success()156     public void logApiCalledFinal_invalidFinalPhasePositiveSequenceAndStatus_success() {
157         MetricUtilities.logApiCalledFinalPhase(new ChosenProviderFinalPhaseMetric(-1, -1),
158                 List.of(new CandidateBrowsingPhaseMetric()), 1, 1);
159     }
160 
161     @Test
logApiCalledFinal_validFinalMetric_success()162     public void logApiCalledFinal_validFinalMetric_success() {
163         MetricUtilities.logApiCalledFinalPhase(
164                 new ChosenProviderFinalPhaseMetric(MetricUtilities.getHighlyUniqueInteger(),
165                         MetricUtilities.getHighlyUniqueInteger()),
166                 List.of(new CandidateBrowsingPhaseMetric()), 1, 1);
167     }
168 }
169