• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 
17 package com.android.adservices.service.stats;
18 
19 import static android.adservices.common.AdServicesStatusUtils.STATUS_SUCCESS;
20 
21 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED;
22 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_CLASS__TARGETING;
23 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__GET_TOPICS;
24 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS;
25 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_MEASUREMENT_ATTRIBUTION;
26 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_MEASUREMENT_DEBUG_KEYS__ATTRIBUTION_TYPE__APP_WEB;
27 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_MEASUREMENT_DELAYED_SOURCE_REGISTRATION;
28 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_MEASUREMENT_REPORTS_UPLOADED__TYPE__EVENT;
29 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_MEASUREMENT_WIPEOUT;
30 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_MESUREMENT_REPORTS_UPLOADED;
31 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED;
32 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_SELECTED;
33 import static com.android.adservices.service.stats.AdServicesStatsLog.AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__ROW;
34 import static com.android.adservices.service.stats.BackgroundFetchProcessReportedStatsTest.LATENCY_IN_MILLIS;
35 import static com.android.adservices.service.stats.BackgroundFetchProcessReportedStatsTest.NUM_OF_ELIGIBLE_TO_UPDATE_CAS;
36 import static com.android.adservices.service.stats.BackgroundFetchProcessReportedStatsTest.RESULT_CODE;
37 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.BUYER_DECISION_LOGIC_SCRIPT_TYPE;
38 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.FETCHED_BUYER_DECISION_LOGIC_SCRIPT_SIZE_IN_BYTES;
39 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.FETCHED_TRUSTED_BIDDING_SIGNALS_DATA_SIZE_IN_BYTES;
40 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.GENERATE_BIDS_LATENCY_IN_MILLIS;
41 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.GET_BUYER_DECISION_LOGIC_LATENCY_IN_MILLIS;
42 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.GET_BUYER_DECISION_LOGIC_RESULT_CODE;
43 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.GET_TRUSTED_BIDDING_SIGNALS_LATENCY_IN_MILLIS;
44 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.GET_TRUSTED_BIDDING_SIGNALS_RESULT_CODE;
45 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.NUM_OF_ADS_FOR_BIDDING;
46 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.NUM_OF_KEYS_OF_TRUSTED_BIDDING_SIGNALS;
47 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.RUN_AD_BIDDING_PER_CA_LATENCY_IN_MILLIS;
48 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.RUN_AD_BIDDING_PER_CA_RESULT_CODE;
49 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.RUN_BIDDING_LATENCY_IN_MILLIS;
50 import static com.android.adservices.service.stats.RunAdBiddingPerCAProcessReportedStatsTest.RUN_BIDDING_RESULT_CODE;
51 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.GET_BUYERS_CUSTOM_AUDIENCE_LATENCY_IN_MILLIS;
52 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.GET_BUYERS_CUSTOM_AUDIENCE_RESULT_CODE;
53 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.NUM_BUYERS_FETCHED;
54 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.NUM_BUYERS_REQUESTED;
55 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.NUM_OF_ADS_ENTERING_BIDDING;
56 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.NUM_OF_CAS_ENTERING_BIDDING;
57 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.NUM_OF_CAS_POSTING_BIDDING;
58 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.RATIO_OF_CAS_SELECTING_RMKT_ADS;
59 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.RUN_AD_BIDDING_LATENCY_IN_MILLIS;
60 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.RUN_AD_BIDDING_RESULT_CODE;
61 import static com.android.adservices.service.stats.RunAdBiddingProcessReportedStatsTest.TOTAL_AD_BIDDING_STAGE_LATENCY_IN_MILLIS;
62 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.FETCHED_AD_SELECTION_LOGIC_SCRIPT_SIZE_IN_BYTES;
63 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.FETCHED_TRUSTED_SCORING_SIGNALS_DATA_SIZE_IN_BYTES;
64 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.GET_AD_SCORES_LATENCY_IN_MILLIS;
65 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.GET_AD_SCORES_RESULT_CODE;
66 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.GET_AD_SELECTION_LOGIC_LATENCY_IN_MILLIS;
67 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.GET_AD_SELECTION_LOGIC_RESULT_CODE;
68 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.GET_AD_SELECTION_LOGIC_SCRIPT_TYPE;
69 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.GET_TRUSTED_SCORING_SIGNALS_LATENCY_IN_MILLIS;
70 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.GET_TRUSTED_SCORING_SIGNALS_RESULT_CODE;
71 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.NUM_OF_CAS_ENTERING_SCORING;
72 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.NUM_OF_CONTEXTUAL_ADS_ENTERING_SCORING;
73 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.NUM_OF_REMARKETING_ADS_ENTERING_SCORING;
74 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.RUN_AD_SCORING_LATENCY_IN_MILLIS;
75 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.RUN_AD_SCORING_RESULT_CODE;
76 import static com.android.adservices.service.stats.RunAdScoringProcessReportedStatsTest.SCORE_ADS_LATENCY_IN_MILLIS;
77 import static com.android.adservices.service.stats.RunAdSelectionProcessReportedStatsTest.DB_AD_SELECTION_SIZE_IN_BYTES;
78 import static com.android.adservices.service.stats.RunAdSelectionProcessReportedStatsTest.IS_RMKT_ADS_WON;
79 import static com.android.adservices.service.stats.RunAdSelectionProcessReportedStatsTest.PERSIST_AD_SELECTION_LATENCY_IN_MILLIS;
80 import static com.android.adservices.service.stats.RunAdSelectionProcessReportedStatsTest.PERSIST_AD_SELECTION_RESULT_CODE;
81 import static com.android.adservices.service.stats.RunAdSelectionProcessReportedStatsTest.RUN_AD_SELECTION_LATENCY_IN_MILLIS;
82 import static com.android.adservices.service.stats.RunAdSelectionProcessReportedStatsTest.RUN_AD_SELECTION_RESULT_CODE;
83 import static com.android.adservices.service.stats.UpdateCustomAudienceProcessReportedStatsTest.DATA_SIZE_OF_ADS_IN_BYTES;
84 import static com.android.adservices.service.stats.UpdateCustomAudienceProcessReportedStatsTest.NUM_OF_ADS;
85 
86 import static org.junit.Assert.assertEquals;
87 import static org.mockito.ArgumentMatchers.eq;
88 import static org.mockito.Mockito.verify;
89 
90 import com.android.adservices.service.measurement.WipeoutStatus;
91 import com.android.adservices.service.measurement.attribution.AttributionStatus;
92 
93 import org.junit.Before;
94 import org.junit.Test;
95 import org.mockito.ArgumentCaptor;
96 import org.mockito.Mock;
97 import org.mockito.MockitoAnnotations;
98 
99 /** Unit tests for {@link AdServicesLoggerImpl}. */
100 public class AdServicesLoggerImplTest {
101     @Mock StatsdAdServicesLogger mStatsdLoggerMock;
102 
103     @Before
setUp()104     public void setUp() {
105         MockitoAnnotations.initMocks(this);
106     }
107 
108     @Test
testLogFledgeApiCallStats()109     public void testLogFledgeApiCallStats() {
110         final int latencyMs = 10;
111         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
112         adServicesLogger.logFledgeApiCallStats(
113                 AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS, STATUS_SUCCESS, latencyMs);
114         verify(mStatsdLoggerMock)
115                 .logFledgeApiCallStats(
116                         eq(AD_SERVICES_API_CALLED__API_NAME__SELECT_ADS),
117                         eq(STATUS_SUCCESS),
118                         eq(latencyMs));
119     }
120 
121     @Test
testLogRunAdSelectionProcessReportedStats()122     public void testLogRunAdSelectionProcessReportedStats() {
123         RunAdSelectionProcessReportedStats stats =
124                 RunAdSelectionProcessReportedStats.builder()
125                         .setIsRemarketingAdsWon(IS_RMKT_ADS_WON)
126                         .setDBAdSelectionSizeInBytes(DB_AD_SELECTION_SIZE_IN_BYTES)
127                         .setPersistAdSelectionLatencyInMillis(
128                                 PERSIST_AD_SELECTION_LATENCY_IN_MILLIS)
129                         .setPersistAdSelectionResultCode(PERSIST_AD_SELECTION_RESULT_CODE)
130                         .setRunAdSelectionLatencyInMillis(RUN_AD_SELECTION_LATENCY_IN_MILLIS)
131                         .setRunAdSelectionResultCode(RUN_AD_SELECTION_RESULT_CODE)
132                         .build();
133         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
134         adServicesLogger.logRunAdSelectionProcessReportedStats(stats);
135         ArgumentCaptor<RunAdSelectionProcessReportedStats> argumentCaptor =
136                 ArgumentCaptor.forClass(RunAdSelectionProcessReportedStats.class);
137         verify(mStatsdLoggerMock).logRunAdSelectionProcessReportedStats(argumentCaptor.capture());
138         assertEquals(argumentCaptor.getValue().getIsRemarketingAdsWon(), IS_RMKT_ADS_WON);
139         assertEquals(
140                 argumentCaptor.getValue().getDBAdSelectionSizeInBytes(),
141                 DB_AD_SELECTION_SIZE_IN_BYTES);
142         assertEquals(
143                 argumentCaptor.getValue().getPersistAdSelectionLatencyInMillis(),
144                 PERSIST_AD_SELECTION_LATENCY_IN_MILLIS);
145         assertEquals(
146                 argumentCaptor.getValue().getRunAdSelectionResultCode(),
147                 PERSIST_AD_SELECTION_RESULT_CODE);
148         assertEquals(
149                 argumentCaptor.getValue().getRunAdSelectionLatencyInMillis(),
150                 RUN_AD_SELECTION_LATENCY_IN_MILLIS);
151         assertEquals(
152                 argumentCaptor.getValue().getRunAdSelectionResultCode(),
153                 RUN_AD_SELECTION_RESULT_CODE);
154     }
155 
156     @Test
testLogRunAdScoringProcessReportedStats()157     public void testLogRunAdScoringProcessReportedStats() {
158         RunAdScoringProcessReportedStats stats =
159                 RunAdScoringProcessReportedStats.builder()
160                         .setGetAdSelectionLogicLatencyInMillis(
161                                 GET_AD_SELECTION_LOGIC_LATENCY_IN_MILLIS)
162                         .setGetAdSelectionLogicResultCode(GET_AD_SELECTION_LOGIC_RESULT_CODE)
163                         .setGetAdSelectionLogicScriptType(GET_AD_SELECTION_LOGIC_SCRIPT_TYPE)
164                         .setFetchedAdSelectionLogicScriptSizeInBytes(
165                                 FETCHED_AD_SELECTION_LOGIC_SCRIPT_SIZE_IN_BYTES)
166                         .setGetTrustedScoringSignalsLatencyInMillis(
167                                 GET_TRUSTED_SCORING_SIGNALS_LATENCY_IN_MILLIS)
168                         .setGetTrustedScoringSignalsResultCode(
169                                 GET_TRUSTED_SCORING_SIGNALS_RESULT_CODE)
170                         .setFetchedTrustedScoringSignalsDataSizeInBytes(
171                                 FETCHED_TRUSTED_SCORING_SIGNALS_DATA_SIZE_IN_BYTES)
172                         .setScoreAdsLatencyInMillis(SCORE_ADS_LATENCY_IN_MILLIS)
173                         .setGetAdScoresLatencyInMillis(GET_AD_SCORES_LATENCY_IN_MILLIS)
174                         .setGetAdScoresResultCode(GET_AD_SCORES_RESULT_CODE)
175                         .setNumOfCasEnteringScoring(NUM_OF_CAS_ENTERING_SCORING)
176                         .setNumOfRemarketingAdsEnteringScoring(
177                                 NUM_OF_REMARKETING_ADS_ENTERING_SCORING)
178                         .setNumOfContextualAdsEnteringScoring(
179                                 NUM_OF_CONTEXTUAL_ADS_ENTERING_SCORING)
180                         .setRunAdScoringLatencyInMillis(RUN_AD_SCORING_LATENCY_IN_MILLIS)
181                         .setRunAdScoringResultCode(RUN_AD_SCORING_RESULT_CODE)
182                         .build();
183 
184         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
185         adServicesLogger.logRunAdScoringProcessReportedStats(stats);
186         ArgumentCaptor<RunAdScoringProcessReportedStats> argumentCaptor =
187                 ArgumentCaptor.forClass(RunAdScoringProcessReportedStats.class);
188         verify(mStatsdLoggerMock).logRunAdScoringProcessReportedStats(argumentCaptor.capture());
189         assertEquals(
190                 argumentCaptor.getValue().getGetAdSelectionLogicLatencyInMillis(),
191                 GET_AD_SELECTION_LOGIC_LATENCY_IN_MILLIS);
192         assertEquals(
193                 argumentCaptor.getValue().getGetAdSelectionLogicResultCode(),
194                 GET_AD_SELECTION_LOGIC_RESULT_CODE);
195         assertEquals(
196                 argumentCaptor.getValue().getGetAdSelectionLogicScriptType(),
197                 GET_AD_SELECTION_LOGIC_SCRIPT_TYPE);
198         assertEquals(
199                 argumentCaptor.getValue().getFetchedAdSelectionLogicScriptSizeInBytes(),
200                 FETCHED_AD_SELECTION_LOGIC_SCRIPT_SIZE_IN_BYTES);
201         assertEquals(
202                 argumentCaptor.getValue().getGetTrustedScoringSignalsLatencyInMillis(),
203                 GET_TRUSTED_SCORING_SIGNALS_LATENCY_IN_MILLIS);
204         assertEquals(
205                 argumentCaptor.getValue().getGetTrustedScoringSignalsResultCode(),
206                 GET_TRUSTED_SCORING_SIGNALS_RESULT_CODE);
207         assertEquals(
208                 argumentCaptor.getValue().getFetchedTrustedScoringSignalsDataSizeInBytes(),
209                 FETCHED_TRUSTED_SCORING_SIGNALS_DATA_SIZE_IN_BYTES);
210         assertEquals(
211                 argumentCaptor.getValue().getScoreAdsLatencyInMillis(),
212                 SCORE_ADS_LATENCY_IN_MILLIS);
213         assertEquals(
214                 argumentCaptor.getValue().getGetAdScoresLatencyInMillis(),
215                 GET_AD_SCORES_LATENCY_IN_MILLIS);
216         assertEquals(
217                 argumentCaptor.getValue().getGetAdScoresResultCode(), GET_AD_SCORES_RESULT_CODE);
218         assertEquals(
219                 argumentCaptor.getValue().getNumOfCasEnteringScoring(),
220                 NUM_OF_CAS_ENTERING_SCORING);
221         assertEquals(
222                 argumentCaptor.getValue().getNumOfRemarketingAdsEnteringScoring(),
223                 NUM_OF_REMARKETING_ADS_ENTERING_SCORING);
224         assertEquals(
225                 argumentCaptor.getValue().getNumOfContextualAdsEnteringScoring(),
226                 NUM_OF_CONTEXTUAL_ADS_ENTERING_SCORING);
227         assertEquals(
228                 argumentCaptor.getValue().getRunAdScoringLatencyInMillis(),
229                 RUN_AD_SCORING_LATENCY_IN_MILLIS);
230         assertEquals(
231                 argumentCaptor.getValue().getRunAdScoringResultCode(), RUN_AD_SCORING_RESULT_CODE);
232     }
233 
234     @Test
testLogRunAdBiddingProcessReportedStats()235     public void testLogRunAdBiddingProcessReportedStats() {
236         RunAdBiddingProcessReportedStats stats =
237                 RunAdBiddingProcessReportedStats.builder()
238                         .setGetBuyersCustomAudienceLatencyInMills(
239                                 GET_BUYERS_CUSTOM_AUDIENCE_LATENCY_IN_MILLIS)
240                         .setGetBuyersCustomAudienceResultCode(
241                                 GET_BUYERS_CUSTOM_AUDIENCE_RESULT_CODE)
242                         .setNumBuyersRequested(NUM_BUYERS_REQUESTED)
243                         .setNumBuyersFetched(NUM_BUYERS_FETCHED)
244                         .setNumOfAdsEnteringBidding(NUM_OF_ADS_ENTERING_BIDDING)
245                         .setNumOfCasEnteringBidding(NUM_OF_CAS_ENTERING_BIDDING)
246                         .setNumOfCasPostBidding(NUM_OF_CAS_POSTING_BIDDING)
247                         .setRatioOfCasSelectingRmktAds(RATIO_OF_CAS_SELECTING_RMKT_ADS)
248                         .setRunAdBiddingLatencyInMillis(RUN_AD_BIDDING_LATENCY_IN_MILLIS)
249                         .setRunAdBiddingResultCode(RUN_AD_BIDDING_RESULT_CODE)
250                         .setTotalAdBiddingStageLatencyInMillis(
251                                 TOTAL_AD_BIDDING_STAGE_LATENCY_IN_MILLIS)
252                         .build();
253 
254         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
255         adServicesLogger.logRunAdBiddingProcessReportedStats(stats);
256         ArgumentCaptor<RunAdBiddingProcessReportedStats> argumentCaptor =
257                 ArgumentCaptor.forClass(RunAdBiddingProcessReportedStats.class);
258         verify(mStatsdLoggerMock).logRunAdBiddingProcessReportedStats(argumentCaptor.capture());
259         assertEquals(
260                 argumentCaptor.getValue().getGetBuyersCustomAudienceLatencyInMills(),
261                 GET_BUYERS_CUSTOM_AUDIENCE_LATENCY_IN_MILLIS);
262         assertEquals(
263                 argumentCaptor.getValue().getGetBuyersCustomAudienceResultCode(),
264                 GET_BUYERS_CUSTOM_AUDIENCE_RESULT_CODE);
265         assertEquals(argumentCaptor.getValue().getNumBuyersRequested(), NUM_BUYERS_REQUESTED);
266         assertEquals(argumentCaptor.getValue().getNumBuyersFetched(), NUM_BUYERS_FETCHED);
267         assertEquals(
268                 argumentCaptor.getValue().getNumOfAdsEnteringBidding(),
269                 NUM_OF_ADS_ENTERING_BIDDING);
270         assertEquals(
271                 argumentCaptor.getValue().getNumOfCasEnteringBidding(),
272                 NUM_OF_CAS_ENTERING_BIDDING);
273         assertEquals(
274                 argumentCaptor.getValue().getNumOfCasPostBidding(), NUM_OF_CAS_POSTING_BIDDING);
275         assertEquals(
276                 argumentCaptor.getValue().getRatioOfCasSelectingRmktAds(),
277                 RATIO_OF_CAS_SELECTING_RMKT_ADS,
278                 0.0f);
279         assertEquals(
280                 argumentCaptor.getValue().getRunAdBiddingLatencyInMillis(),
281                 RUN_AD_BIDDING_LATENCY_IN_MILLIS);
282         assertEquals(
283                 argumentCaptor.getValue().getRunAdBiddingResultCode(), RUN_AD_BIDDING_RESULT_CODE);
284         assertEquals(
285                 argumentCaptor.getValue().getTotalAdBiddingStageLatencyInMillis(),
286                 TOTAL_AD_BIDDING_STAGE_LATENCY_IN_MILLIS);
287     }
288 
289     @Test
testLogRunAdBiddingPerCAProcessReportedStats()290     public void testLogRunAdBiddingPerCAProcessReportedStats() {
291         RunAdBiddingPerCAProcessReportedStats stats =
292                 RunAdBiddingPerCAProcessReportedStats.builder()
293                         .setNumOfAdsForBidding(NUM_OF_ADS_FOR_BIDDING)
294                         .setRunAdBiddingPerCaLatencyInMillis(
295                                 RUN_AD_BIDDING_PER_CA_LATENCY_IN_MILLIS)
296                         .setRunAdBiddingPerCaResultCode(RUN_AD_BIDDING_PER_CA_RESULT_CODE)
297                         .setGetBuyerDecisionLogicLatencyInMillis(
298                                 GET_BUYER_DECISION_LOGIC_LATENCY_IN_MILLIS)
299                         .setGetBuyerDecisionLogicResultCode(GET_BUYER_DECISION_LOGIC_RESULT_CODE)
300                         .setBuyerDecisionLogicScriptType(BUYER_DECISION_LOGIC_SCRIPT_TYPE)
301                         .setFetchedBuyerDecisionLogicScriptSizeInBytes(
302                                 FETCHED_BUYER_DECISION_LOGIC_SCRIPT_SIZE_IN_BYTES)
303                         .setNumOfKeysOfTrustedBiddingSignals(NUM_OF_KEYS_OF_TRUSTED_BIDDING_SIGNALS)
304                         .setFetchedTrustedBiddingSignalsDataSizeInBytes(
305                                 FETCHED_TRUSTED_BIDDING_SIGNALS_DATA_SIZE_IN_BYTES)
306                         .setGetTrustedBiddingSignalsLatencyInMillis(
307                                 GET_TRUSTED_BIDDING_SIGNALS_LATENCY_IN_MILLIS)
308                         .setGetTrustedBiddingSignalsResultCode(
309                                 GET_TRUSTED_BIDDING_SIGNALS_RESULT_CODE)
310                         .setGenerateBidsLatencyInMillis(GENERATE_BIDS_LATENCY_IN_MILLIS)
311                         .setRunBiddingLatencyInMillis(RUN_BIDDING_LATENCY_IN_MILLIS)
312                         .setRunBiddingResultCode(RUN_BIDDING_RESULT_CODE)
313                         .build();
314 
315         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
316         adServicesLogger.logRunAdBiddingPerCAProcessReportedStats(stats);
317         ArgumentCaptor<RunAdBiddingPerCAProcessReportedStats> argumentCaptor =
318                 ArgumentCaptor.forClass(RunAdBiddingPerCAProcessReportedStats.class);
319         verify(mStatsdLoggerMock)
320                 .logRunAdBiddingPerCAProcessReportedStats(argumentCaptor.capture());
321         assertEquals(argumentCaptor.getValue().getNumOfAdsForBidding(), NUM_OF_ADS_FOR_BIDDING);
322         assertEquals(
323                 argumentCaptor.getValue().getRunAdBiddingPerCaLatencyInMillis(),
324                 RUN_AD_BIDDING_PER_CA_LATENCY_IN_MILLIS);
325         assertEquals(
326                 argumentCaptor.getValue().getRunAdBiddingPerCaResultCode(),
327                 RUN_AD_BIDDING_PER_CA_RESULT_CODE);
328         assertEquals(
329                 argumentCaptor.getValue().getGetBuyerDecisionLogicLatencyInMillis(),
330                 GET_BUYER_DECISION_LOGIC_LATENCY_IN_MILLIS);
331         assertEquals(
332                 argumentCaptor.getValue().getGetBuyerDecisionLogicResultCode(),
333                 GET_BUYER_DECISION_LOGIC_RESULT_CODE);
334         assertEquals(
335                 argumentCaptor.getValue().getBuyerDecisionLogicScriptType(),
336                 BUYER_DECISION_LOGIC_SCRIPT_TYPE);
337         assertEquals(
338                 argumentCaptor.getValue().getFetchedBuyerDecisionLogicScriptSizeInBytes(),
339                 FETCHED_BUYER_DECISION_LOGIC_SCRIPT_SIZE_IN_BYTES);
340         assertEquals(
341                 argumentCaptor.getValue().getNumOfKeysOfTrustedBiddingSignals(),
342                 NUM_OF_KEYS_OF_TRUSTED_BIDDING_SIGNALS);
343         assertEquals(
344                 argumentCaptor.getValue().getFetchedTrustedBiddingSignalsDataSizeInBytes(),
345                 FETCHED_TRUSTED_BIDDING_SIGNALS_DATA_SIZE_IN_BYTES);
346         assertEquals(
347                 argumentCaptor.getValue().getGetTrustedBiddingSignalsLatencyInMillis(),
348                 GET_TRUSTED_BIDDING_SIGNALS_LATENCY_IN_MILLIS);
349         assertEquals(
350                 argumentCaptor.getValue().getGetTrustedBiddingSignalsResultCode(),
351                 GET_TRUSTED_BIDDING_SIGNALS_RESULT_CODE);
352         assertEquals(
353                 argumentCaptor.getValue().getGenerateBidsLatencyInMillis(),
354                 GENERATE_BIDS_LATENCY_IN_MILLIS);
355         assertEquals(
356                 argumentCaptor.getValue().getRunBiddingLatencyInMillis(),
357                 RUN_BIDDING_LATENCY_IN_MILLIS);
358         assertEquals(argumentCaptor.getValue().getRunBiddingResultCode(), RUN_BIDDING_RESULT_CODE);
359     }
360 
361     @Test
testLogBackgroundFetchProcessReportedStats()362     public void testLogBackgroundFetchProcessReportedStats() {
363         BackgroundFetchProcessReportedStats stats =
364                 BackgroundFetchProcessReportedStats.builder()
365                         .setLatencyInMillis(LATENCY_IN_MILLIS)
366                         .setNumOfEligibleToUpdateCas(NUM_OF_ELIGIBLE_TO_UPDATE_CAS)
367                         .setResultCode(RESULT_CODE)
368                         .build();
369 
370         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
371         adServicesLogger.logBackgroundFetchProcessReportedStats(stats);
372         ArgumentCaptor<BackgroundFetchProcessReportedStats> argumentCaptor =
373                 ArgumentCaptor.forClass(BackgroundFetchProcessReportedStats.class);
374         verify(mStatsdLoggerMock).logBackgroundFetchProcessReportedStats(argumentCaptor.capture());
375         assertEquals(argumentCaptor.getValue().getLatencyInMillis(), LATENCY_IN_MILLIS);
376         assertEquals(
377                 argumentCaptor.getValue().getNumOfEligibleToUpdateCas(),
378                 NUM_OF_ELIGIBLE_TO_UPDATE_CAS);
379         assertEquals(argumentCaptor.getValue().getResultCode(), RESULT_CODE);
380     }
381 
382     @Test
testLogUpdateCustomAudienceProcessReportedStats()383     public void testLogUpdateCustomAudienceProcessReportedStats() {
384         UpdateCustomAudienceProcessReportedStats stats =
385                 UpdateCustomAudienceProcessReportedStats.builder()
386                         .setLatencyInMills(LATENCY_IN_MILLIS)
387                         .setResultCode(RESULT_CODE)
388                         .setDataSizeOfAdsInBytes(DATA_SIZE_OF_ADS_IN_BYTES)
389                         .setNumOfAds(NUM_OF_ADS)
390                         .build();
391         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
392         adServicesLogger.logUpdateCustomAudienceProcessReportedStats(stats);
393         ArgumentCaptor<UpdateCustomAudienceProcessReportedStats> argumentCaptor =
394                 ArgumentCaptor.forClass(UpdateCustomAudienceProcessReportedStats.class);
395         verify(mStatsdLoggerMock)
396                 .logUpdateCustomAudienceProcessReportedStats(argumentCaptor.capture());
397         assertEquals(argumentCaptor.getValue().getLatencyInMills(), LATENCY_IN_MILLIS);
398         assertEquals(argumentCaptor.getValue().getResultCode(), RESULT_CODE);
399         assertEquals(
400                 argumentCaptor.getValue().getDataSizeOfAdsInBytes(), DATA_SIZE_OF_ADS_IN_BYTES);
401         assertEquals(argumentCaptor.getValue().getNumOfAds(), NUM_OF_ADS);
402     }
403 
404     @Test
testLogMeasurementReportReports()405     public void testLogMeasurementReportReports() {
406         MeasurementReportsStats stats =
407                 new MeasurementReportsStats.Builder()
408                         .setCode(AD_SERVICES_MESUREMENT_REPORTS_UPLOADED)
409                         .setType(AD_SERVICES_MEASUREMENT_REPORTS_UPLOADED__TYPE__EVENT)
410                         .setResultCode(STATUS_SUCCESS)
411                         .build();
412         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
413         adServicesLogger.logMeasurementReports(stats);
414         ArgumentCaptor<MeasurementReportsStats> argumentCaptor =
415                 ArgumentCaptor.forClass(MeasurementReportsStats.class);
416         verify(mStatsdLoggerMock).logMeasurementReports(argumentCaptor.capture());
417         assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_MESUREMENT_REPORTS_UPLOADED);
418         assertEquals(
419                 argumentCaptor.getValue().getType(),
420                 AD_SERVICES_MEASUREMENT_REPORTS_UPLOADED__TYPE__EVENT);
421         assertEquals(argumentCaptor.getValue().getResultCode(), STATUS_SUCCESS);
422     }
423 
424     @Test
testLogApiCallStats()425     public void testLogApiCallStats() {
426         final String packageName = "com.android.test";
427         final String sdkName = "com.android.container";
428         final int latency = 100;
429         ApiCallStats stats =
430                 new ApiCallStats.Builder()
431                         .setCode(AD_SERVICES_API_CALLED)
432                         .setApiClass(AD_SERVICES_API_CALLED__API_CLASS__TARGETING)
433                         .setApiName(AD_SERVICES_API_CALLED__API_NAME__GET_TOPICS)
434                         .setAppPackageName(packageName)
435                         .setSdkPackageName(sdkName)
436                         .setLatencyMillisecond(latency)
437                         .setResultCode(STATUS_SUCCESS)
438                         .build();
439         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
440         adServicesLogger.logApiCallStats(stats);
441         ArgumentCaptor<ApiCallStats> argumentCaptor = ArgumentCaptor.forClass(ApiCallStats.class);
442         verify(mStatsdLoggerMock).logApiCallStats(argumentCaptor.capture());
443         assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_API_CALLED);
444         assertEquals(
445                 argumentCaptor.getValue().getApiClass(),
446                 AD_SERVICES_API_CALLED__API_CLASS__TARGETING);
447         assertEquals(
448                 argumentCaptor.getValue().getApiName(),
449                 AD_SERVICES_API_CALLED__API_NAME__GET_TOPICS);
450         assertEquals(argumentCaptor.getValue().getAppPackageName(), packageName);
451         assertEquals(argumentCaptor.getValue().getSdkPackageName(), sdkName);
452         assertEquals(argumentCaptor.getValue().getLatencyMillisecond(), latency);
453         assertEquals(argumentCaptor.getValue().getResultCode(), STATUS_SUCCESS);
454     }
455 
456     @Test
testLogUIStats()457     public void testLogUIStats() {
458         UIStats stats =
459                 new UIStats.Builder()
460                         .setCode(AD_SERVICES_SETTINGS_USAGE_REPORTED)
461                         .setRegion(AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__ROW)
462                         .setAction(AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_SELECTED)
463                         .build();
464         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
465         adServicesLogger.logUIStats(stats);
466         ArgumentCaptor<UIStats> argumentCaptor = ArgumentCaptor.forClass(UIStats.class);
467         verify(mStatsdLoggerMock).logUIStats(argumentCaptor.capture());
468         assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_SETTINGS_USAGE_REPORTED);
469         assertEquals(
470                 argumentCaptor.getValue().getRegion(),
471                 AD_SERVICES_SETTINGS_USAGE_REPORTED__REGION__ROW);
472         assertEquals(
473                 argumentCaptor.getValue().getAction(),
474                 AD_SERVICES_SETTINGS_USAGE_REPORTED__ACTION__OPT_OUT_SELECTED);
475     }
476 
477     @Test
testLogMsmtDebugKeyMatchStats()478     public void testLogMsmtDebugKeyMatchStats() {
479         final String enrollmentId = "EnrollmentId";
480         long hashedValue = 5000L;
481         long hashLimit = 10000L;
482         MsmtDebugKeysMatchStats stats =
483                 MsmtDebugKeysMatchStats.builder()
484                         .setAdTechEnrollmentId(enrollmentId)
485                         .setMatched(true)
486                         .setAttributionType(
487                                 AD_SERVICES_MEASUREMENT_DEBUG_KEYS__ATTRIBUTION_TYPE__APP_WEB)
488                         .setDebugJoinKeyHashedValue(hashedValue)
489                         .setDebugJoinKeyHashLimit(hashLimit)
490                         .build();
491         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
492         adServicesLogger.logMeasurementDebugKeysMatch(stats);
493         ArgumentCaptor<MsmtDebugKeysMatchStats> argumentCaptor =
494                 ArgumentCaptor.forClass(MsmtDebugKeysMatchStats.class);
495         verify(mStatsdLoggerMock).logMeasurementDebugKeysMatch(argumentCaptor.capture());
496         assertEquals(stats, argumentCaptor.getValue());
497     }
498 
499     @Test
testLogMeasurementAttributionStats()500     public void testLogMeasurementAttributionStats() {
501         MeasurementAttributionStats stats =
502                 new MeasurementAttributionStats.Builder()
503                         .setCode(AD_SERVICES_MEASUREMENT_ATTRIBUTION)
504                         .setSourceType(AttributionStatus.SourceType.EVENT.ordinal())
505                         .setSurfaceType(AttributionStatus.AttributionSurface.APP_WEB.ordinal())
506                         .setResult(AttributionStatus.AttributionResult.SUCCESS.ordinal())
507                         .setFailureType(AttributionStatus.FailureType.UNKNOWN.ordinal())
508                         .setSourceDerived(false)
509                         .setInstallAttribution(true)
510                         .setAttributionDelay(100L)
511                         .build();
512         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
513         adServicesLogger.logMeasurementAttributionStats(stats);
514         ArgumentCaptor<MeasurementAttributionStats> argumentCaptor =
515                 ArgumentCaptor.forClass(MeasurementAttributionStats.class);
516         verify(mStatsdLoggerMock).logMeasurementAttributionStats(argumentCaptor.capture());
517         assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_MEASUREMENT_ATTRIBUTION);
518         assertEquals(
519                 argumentCaptor.getValue().getSourceType(),
520                 AttributionStatus.SourceType.EVENT.ordinal());
521         assertEquals(
522                 argumentCaptor.getValue().getSurfaceType(),
523                 AttributionStatus.AttributionSurface.APP_WEB.ordinal());
524         assertEquals(
525                 argumentCaptor.getValue().getResult(),
526                 AttributionStatus.AttributionResult.SUCCESS.ordinal());
527         assertEquals(
528                 argumentCaptor.getValue().getFailureType(),
529                 AttributionStatus.FailureType.UNKNOWN.ordinal());
530         assertEquals(argumentCaptor.getValue().isSourceDerived(), false);
531         assertEquals(argumentCaptor.getValue().isInstallAttribution(), true);
532         assertEquals(argumentCaptor.getValue().getAttributionDelay(), 100L);
533     }
534 
535     @Test
testLogMeasurementWipeoutStats()536     public void testLogMeasurementWipeoutStats() {
537         MeasurementWipeoutStats stats =
538                 new MeasurementWipeoutStats.Builder()
539                         .setCode(AD_SERVICES_MEASUREMENT_WIPEOUT)
540                         .setWipeoutType(WipeoutStatus.WipeoutType.CONSENT_FLIP.ordinal())
541                         .build();
542 
543         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
544         adServicesLogger.logMeasurementWipeoutStats(stats);
545         ArgumentCaptor<MeasurementWipeoutStats> argumentCaptor =
546                 ArgumentCaptor.forClass(MeasurementWipeoutStats.class);
547         verify(mStatsdLoggerMock).logMeasurementWipeoutStats(argumentCaptor.capture());
548         assertEquals(argumentCaptor.getValue().getCode(), AD_SERVICES_MEASUREMENT_WIPEOUT);
549         assertEquals(
550                 argumentCaptor.getValue().getWipeoutType(),
551                 WipeoutStatus.WipeoutType.CONSENT_FLIP.ordinal());
552     }
553 
554     @Test
testLogMeasurementDelayedSourceRegistrationStats()555     public void testLogMeasurementDelayedSourceRegistrationStats() {
556         int UnknownEnumValue = 0;
557         long registrationDelay = 500L;
558         MeasurementDelayedSourceRegistrationStats stats =
559                 new MeasurementDelayedSourceRegistrationStats.Builder()
560                         .setCode(AD_SERVICES_MEASUREMENT_DELAYED_SOURCE_REGISTRATION)
561                         .setRegistrationStatus(UnknownEnumValue)
562                         .setRegistrationDelay(registrationDelay)
563                         .build();
564 
565         AdServicesLoggerImpl adServicesLogger = new AdServicesLoggerImpl(mStatsdLoggerMock);
566         adServicesLogger.logMeasurementDelayedSourceRegistrationStats(stats);
567         ArgumentCaptor<MeasurementDelayedSourceRegistrationStats> argumentCaptor =
568                 ArgumentCaptor.forClass(MeasurementDelayedSourceRegistrationStats.class);
569         verify(mStatsdLoggerMock)
570                 .logMeasurementDelayedSourceRegistrationStats(argumentCaptor.capture());
571         assertEquals(
572                 argumentCaptor.getValue().getCode(),
573                 AD_SERVICES_MEASUREMENT_DELAYED_SOURCE_REGISTRATION);
574         assertEquals(argumentCaptor.getValue().getRegistrationStatus(), UnknownEnumValue);
575         assertEquals(argumentCaptor.getValue().getRegistrationDelay(), registrationDelay);
576     }
577 }
578