@@ -3,38 +3,58 @@ package org.prebid.server.functional.tests
33import org.apache.commons.lang3.StringUtils
44import org.prebid.server.functional.model.config.AccountAuctionConfig
55import org.prebid.server.functional.model.config.AccountConfig
6+ import org.prebid.server.functional.model.config.AccountMetricsConfig
67import org.prebid.server.functional.model.db.Account
78import org.prebid.server.functional.model.db.StoredRequest
89import org.prebid.server.functional.model.db.StoredResponse
910import org.prebid.server.functional.model.request.amp.AmpRequest
1011import org.prebid.server.functional.model.request.auction.BidRequest
12+ import org.prebid.server.functional.model.request.auction.Site
1113import org.prebid.server.functional.model.request.auction.StoredBidResponse
1214import org.prebid.server.functional.model.response.auction.BidResponse
1315import org.prebid.server.functional.model.response.auction.ErrorType
16+ import org.prebid.server.functional.service.PrebidServerException
1417import org.prebid.server.functional.util.PBSUtils
1518import spock.lang.PendingFeature
1619
1720import static org.prebid.server.functional.model.bidder.BidderName.GENERIC
21+ import static org.prebid.server.functional.model.config.AccountMetricsVerbosityLevel.BASIC
22+ import static org.prebid.server.functional.model.config.AccountMetricsVerbosityLevel.DETAILED
23+ import static org.prebid.server.functional.model.config.AccountMetricsVerbosityLevel.NONE
1824import static org.prebid.server.functional.model.request.auction.DebugCondition.DISABLED
1925import static org.prebid.server.functional.model.request.auction.DebugCondition.ENABLED
2026import static org.prebid.server.functional.model.response.auction.BidderCallType.STORED_BID_RESPONSE
2127
2228class DebugSpec extends BaseSpec {
2329
2430 private static final String overrideToken = PBSUtils . randomString
31+ private static final String ACCOUNT_METRICS_PREFIX_NAME = " account"
32+ private static final String DEBUG_REQUESTS_METRIC = " debug_requests"
33+ private static final String ACCOUNT_DEBUG_REQUESTS_METRIC = " account.%s.debug_requests"
34+ private static final String REQUEST_OK_WEB_METRICS = " requests.ok.openrtb2-web"
2535
26- def " PBS should return debug information when debug flag is #debug and test flag is #test" () {
36+ def " PBS should return debug information and emit metrics when debug flag is #debug and test flag is #test" () {
2737 given : " Default BidRequest with test flag"
2838 def bidRequest = BidRequest . defaultBidRequest
2939 bidRequest. ext. prebid. debug = debug
3040 bidRequest. test = test
3141
42+ and : " Flash metrics"
43+ flushMetrics(defaultPbsService)
44+
3245 when : " PBS processes auction request"
3346 def response = defaultPbsService. sendAuctionRequest(bidRequest)
3447
3548 then : " Response should contain ext.debug"
3649 assert response. ext?. debug
3750
51+ and : " Debug metrics should be incremented"
52+ def metricsRequest = defaultPbsService. sendCollectedMetricsRequest()
53+ assert metricsRequest[DEBUG_REQUESTS_METRIC ] == 1
54+
55+ and : " Account debug metrics shouldn't be incremented"
56+ assert ! metricsRequest. keySet(). contains(ACCOUNT_METRICS_PREFIX_NAME )
57+
3858 where :
3959 debug | test
4060 ENABLED | null
@@ -48,12 +68,23 @@ class DebugSpec extends BaseSpec {
4868 bidRequest. ext. prebid. debug = test
4969 bidRequest. test = test
5070
71+ and : " Flash metrics"
72+ flushMetrics(defaultPbsService)
73+
5174 when : " PBS processes auction request"
5275 def response = defaultPbsService. sendAuctionRequest(bidRequest)
5376
5477 then : " Response shouldn't contain ext.debug"
5578 assert ! response. ext?. debug
5679
80+ and : " Debug metrics shouldn't be populated"
81+ def metricsRequest = defaultPbsService. sendCollectedMetricsRequest()
82+ assert ! metricsRequest[DEBUG_REQUESTS_METRIC ]
83+ assert ! metricsRequest. keySet(). contains(ACCOUNT_METRICS_PREFIX_NAME )
84+
85+ and : " General metrics should be present"
86+ assert metricsRequest[REQUEST_OK_WEB_METRICS ] == 1
87+
5788 where :
5889 debug | test
5990 DISABLED | null
@@ -351,4 +382,157 @@ class DebugSpec extends BaseSpec {
351382 and : " Response should not contain ext.warnings"
352383 assert ! response. ext?. warnings
353384 }
385+
386+ def " PBS should return debug information and emit metrics when account debug enabled and verbosity detailed" () {
387+ given : " Default basic generic bid request"
388+ def bidRequest = BidRequest . defaultBidRequest
389+
390+ and : " Account in the DB"
391+ def accountConfig = new AccountConfig (
392+ metrics : new AccountMetricsConfig (verbosityLevel : DETAILED ),
393+ auction : new AccountAuctionConfig (debugAllow : true ))
394+ def account = new Account (uuid : bidRequest. site. publisher. id, config : accountConfig)
395+ accountDao. save(account)
396+
397+ and : " Flash metrics"
398+ flushMetrics(defaultPbsService)
399+
400+ when : " PBS processes auction request"
401+ def response = defaultPbsService. sendAuctionRequest(bidRequest)
402+
403+ then : " Response should contain ext.debug"
404+ assert response. ext?. debug
405+
406+ and : " Debug metrics should be incremented"
407+ def metricsRequest = defaultPbsService. sendCollectedMetricsRequest()
408+ assert metricsRequest[ACCOUNT_DEBUG_REQUESTS_METRIC . formatted(bidRequest. accountId)] == 1
409+ assert metricsRequest[DEBUG_REQUESTS_METRIC ] == 1
410+ }
411+
412+ def " PBS shouldn't return debug information and emit metrics when account debug enabled and verbosity #verbosityLevel" () {
413+ given : " Default basic generic bid request"
414+ def bidRequest = BidRequest . defaultBidRequest
415+
416+ and : " Account in the DB"
417+ def accountConfig = new AccountConfig (
418+ metrics : new AccountMetricsConfig (verbosityLevel : verbosityLevel),
419+ auction : new AccountAuctionConfig (debugAllow : true ))
420+ def account = new Account (uuid : bidRequest. site. publisher. id, config : accountConfig)
421+ accountDao. save(account)
422+
423+ and : " Flash metrics"
424+ flushMetrics(defaultPbsService)
425+
426+ when : " PBS processes auction request"
427+ def response = defaultPbsService. sendAuctionRequest(bidRequest)
428+
429+ then : " Response should contain ext.debug"
430+ assert response. ext?. debug
431+
432+ and : " Account debug metrics shouldn't be incremented"
433+ def metricsRequest = defaultPbsService. sendCollectedMetricsRequest()
434+ assert ! metricsRequest[ACCOUNT_DEBUG_REQUESTS_METRIC . formatted(bidRequest. accountId)]
435+
436+ and : " Request debug metrics should be incremented"
437+ assert metricsRequest[DEBUG_REQUESTS_METRIC ] == 1
438+
439+ where :
440+ verbosityLevel << [NONE , BASIC ]
441+ }
442+
443+ def " PBS amp should return debug information and emit metrics when account debug enabled and verbosity detailed" () {
444+ given : " Default AMP request"
445+ def ampRequest = AmpRequest . defaultAmpRequest
446+
447+ and : " Default stored request"
448+ def ampStoredRequest = BidRequest . defaultStoredRequest
449+
450+ and : " Account in the DB"
451+ def accountConfig = new AccountConfig (
452+ metrics : new AccountMetricsConfig (verbosityLevel : DETAILED ),
453+ auction : new AccountAuctionConfig (debugAllow : true ))
454+ def account = new Account (uuid : ampRequest. account, config : accountConfig)
455+ accountDao. save(account)
456+
457+ and : " Flash metrics"
458+ flushMetrics(defaultPbsService)
459+
460+ and : " Save storedRequest into DB"
461+ def storedRequest = StoredRequest . getStoredRequest(ampRequest, ampStoredRequest)
462+ storedRequestDao. save(storedRequest)
463+
464+ when : " PBS processes amp request"
465+ def response = defaultPbsService. sendAmpRequest(ampRequest)
466+
467+ then : " Response should contain ext.debug"
468+ assert response. ext?. debug
469+
470+ and : " Debug metrics should be incremented"
471+ def metricsRequest = defaultPbsService. sendCollectedMetricsRequest()
472+ assert metricsRequest[ACCOUNT_DEBUG_REQUESTS_METRIC . formatted(ampRequest. account)] == 1
473+ assert metricsRequest[DEBUG_REQUESTS_METRIC ] == 1
474+ }
475+
476+ def " PBS amp should return debug information and emit metrics when account debug enabled and verbosity #verbosityLevel" () {
477+ given : " Default AMP request"
478+ def ampRequest = AmpRequest . defaultAmpRequest
479+
480+ and : " Default stored request"
481+ def ampStoredRequest = BidRequest . defaultStoredRequest
482+
483+ and : " Account in the DB"
484+ def accountConfig = new AccountConfig (
485+ metrics : new AccountMetricsConfig (verbosityLevel : verbosityLevel),
486+ auction : new AccountAuctionConfig (debugAllow : true ))
487+ def account = new Account (uuid : ampRequest. account, config : accountConfig)
488+ accountDao. save(account)
489+
490+ and : " Flash metrics"
491+ flushMetrics(defaultPbsService)
492+
493+ and : " Save storedRequest into DB"
494+ def storedRequest = StoredRequest . getStoredRequest(ampRequest, ampStoredRequest)
495+ storedRequestDao. save(storedRequest)
496+
497+ when : " PBS processes amp request"
498+ def response = defaultPbsService. sendAmpRequest(ampRequest)
499+
500+ then : " Response should contain ext.debug"
501+ assert response. ext?. debug
502+
503+ and : " Account debug metrics shouldn't be incremented"
504+ def metricsRequest = defaultPbsService. sendCollectedMetricsRequest()
505+ assert ! metricsRequest[ACCOUNT_DEBUG_REQUESTS_METRIC . formatted(ampRequest. account)]
506+
507+ and : " Debug metrics should be incremented"
508+ assert metricsRequest[DEBUG_REQUESTS_METRIC ] == 1
509+
510+ where :
511+ verbosityLevel << [NONE , BASIC ]
512+ }
513+
514+ def " PBS shouldn't emit auction request metric when incoming request invalid" () {
515+ given : " Default basic BidRequest"
516+ def bidRequest = BidRequest . defaultBidRequest
517+ bidRequest. site = new Site (id : null , name : PBSUtils . randomString, page : null )
518+ bidRequest. ext. prebid. debug = ENABLED
519+
520+ and : " Flash metrics"
521+ flushMetrics(defaultPbsService)
522+
523+ when : " PBS processes auction request"
524+ defaultPbsService. sendAuctionRequest(bidRequest)
525+
526+ then : " Request should fail with error"
527+ def exception = thrown(PrebidServerException )
528+ assert exception. responseBody. contains(" request.site should include at least one of request.site.id or request.site.page" )
529+
530+ and : " Debug metrics shouldn't be populated"
531+ def metricsRequest = defaultPbsService. sendCollectedMetricsRequest()
532+ assert ! metricsRequest[DEBUG_REQUESTS_METRIC ]
533+ assert ! metricsRequest. keySet(). contains(ACCOUNT_METRICS_PREFIX_NAME )
534+
535+ and : " General metrics shouldn't be present"
536+ assert ! metricsRequest[REQUEST_OK_WEB_METRICS ]
537+ }
354538}
0 commit comments