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