From aa3d6f3f9b4ee1b86d4a1811ba6f0af2dddf7a5d Mon Sep 17 00:00:00 2001 From: osulzhenko Date: Mon, 27 Jan 2025 14:02:38 +0200 Subject: [PATCH] Fix issue with connection for tests --- .../server/functional/tests/BaseSpec.groovy | 5 +- .../functional/tests/BidderParamsSpec.groovy | 197 +++++++++++++----- .../tests/module/AbTestingModuleSpec.groovy | 17 +- .../tests/module/GeneralModuleSpec.groovy | 17 +- .../AnalyticsTagsModuleSpec.groovy | 12 +- .../ortb2blocking/Ortb2BlockingSpec.groovy | 15 +- .../PbRequestCorrectionSpec.groovy | 12 +- .../ResponseCorrectionSpec.groovy | 21 +- .../richmedia/RichMediaFilterSpec.groovy | 27 ++- 9 files changed, 246 insertions(+), 77 deletions(-) diff --git a/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy index fcb735d7186..54b712b2b6f 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/BaseSpec.groovy @@ -17,6 +17,7 @@ import org.prebid.server.functional.testcontainers.scaffolding.PrebidCache import org.prebid.server.functional.testcontainers.scaffolding.VendorList import org.prebid.server.functional.util.ObjectMapperWrapper import org.prebid.server.functional.util.PBSUtils +import spock.lang.Shared import spock.lang.Specification import static java.math.RoundingMode.DOWN @@ -43,9 +44,11 @@ abstract class BaseSpec extends Specification implements ObjectMapperWrapper { protected static final Map GENERIC_ALIAS_CONFIG = ["adapters.generic.aliases.alias.enabled" : "true", "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString()] - protected final PrebidServerService defaultPbsService = pbsServiceFactory.getService([:]) + @Shared + protected static PrebidServerService defaultPbsService def setupSpec() { + defaultPbsService = pbsServiceFactory.getService([:]) prebidCache.setResponse() bidder.setResponse() vendorList.setResponse() diff --git a/src/test/groovy/org/prebid/server/functional/tests/BidderParamsSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/BidderParamsSpec.groovy index cab50bd816b..aa3b323d998 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/BidderParamsSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/BidderParamsSpec.groovy @@ -69,6 +69,9 @@ class BidderParamsSpec extends BaseSpec { and: "Response should not contain error" assert !response.ext?.errors + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(adapterConfig) + where: adapterDefault | generic | adapterConfig "true" | "true" | ["adapter-defaults.enabled" : adapterDefault, @@ -92,6 +95,9 @@ class BidderParamsSpec extends BaseSpec { then: "Response should contain error" assert response.ext?.errors[GENERIC]*.code == [2] + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(adapterConfig) + where: adapterDefault | generic | adapterConfig "false" | "false" | ["adapter-defaults.enabled": adapterDefault, @@ -103,8 +109,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS should modify vast xml when adapter-defaults.modifying-vast-xml-allowed = #adapterDefault and BIDDER.modifying-vast-xml-allowed = #generic"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService(["adapter-defaults.modifying-vast-xml-allowed": adapterDefault, - "adapters.generic.modifying-vast-xml-allowed": generic]) + def pbsConfig = ["adapter-defaults.modifying-vast-xml-allowed": adapterDefault, + "adapters.generic.modifying-vast-xml-allowed": generic] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default vtrack request" String payload = PBSUtils.randomString @@ -123,6 +130,9 @@ class BidderParamsSpec extends BaseSpec { assert prebidCacheRequest.size() == 1 assert prebidCacheRequest.first().contains("/event?t=imp&b=${request.puts[0].bidid}&a=$accountId&bidder=${request.puts[0].bidder}") + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) + where: adapterDefault | generic "true" | "true" @@ -131,8 +141,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS should not modify vast xml when adapter-defaults.modifying-vast-xml-allowed = #adapterDefault and BIDDER.modifying-vast-xml-allowed = #generic"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService(["adapter-defaults.modifying-vast-xml-allowed": adapterDefault, - "adapters.generic.modifying-vast-xml-allowed": generic]) + def pbsConfig = ["adapter-defaults.modifying-vast-xml-allowed": adapterDefault, + "adapters.generic.modifying-vast-xml-allowed": generic] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default VtrackRequest" String payload = PBSUtils.randomString @@ -151,6 +162,9 @@ class BidderParamsSpec extends BaseSpec { assert prebidCacheRequest.size() == 1 assert !prebidCacheRequest.first().contains("/event?t=imp&b=${request.puts[0].bidid}&a=$accountId&bidder=${request.puts[0].bidder}") + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) + where: adapterDefault | generic "true" | "false" @@ -159,8 +173,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS should mask values when adapter-defaults.pbs-enforces-ccpa = #adapterDefault settings when BIDDER.pbs-enforces-ccpa = #generic"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService(["adapter-defaults.pbs-enforces-ccpa": adapterDefault, - "adapters.generic.pbs-enforces-ccpa": generic]) + def pbsConfig = ["adapter-defaults.pbs-enforces-ccpa": adapterDefault, + "adapters.generic.pbs-enforces-ccpa": generic] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic generic BidRequest" def bidRequest = BidRequest.defaultBidRequest @@ -178,6 +193,9 @@ class BidderParamsSpec extends BaseSpec { assert bidderRequests.device?.geo?.lat as BigDecimal == PBSUtils.roundDecimal(lat, 2) assert bidderRequests.device?.geo?.lon as BigDecimal == PBSUtils.roundDecimal(lon, 2) + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) + where: adapterDefault | generic "true" | "true" @@ -186,8 +204,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS should not mask values when adapter-defaults.pbs-enforces-ccpa = #adapterDefault settings when BIDDER.pbs-enforces-ccpa = #generic"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService(["adapter-defaults.pbs-enforces-ccpa": adapterDefault, - "adapters.generic.pbs-enforces-ccpa": generic]) + def pbsConfig = ["adapter-defaults.pbs-enforces-ccpa": adapterDefault, + "adapters.generic.pbs-enforces-ccpa": generic] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic generic BidRequest" def bidRequest = BidRequest.defaultBidRequest @@ -205,6 +224,9 @@ class BidderParamsSpec extends BaseSpec { assert bidderRequests.device?.geo?.lat == lat assert bidderRequests.device?.geo?.lon == lon + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) + where: adapterDefault | generic "true" | "false" @@ -284,9 +306,10 @@ class BidderParamsSpec extends BaseSpec { // TODO: create same test for enabled circuit breaker def "PBS should emit warning when bidder endpoint is invalid"() { given: "Pbs config" - def pbsService = pbsServiceFactory.getService(["adapters.generic.enabled" : "true", - "adapters.generic.endpoint" : "https://", - "http-client.circuit-breaker.enabled": "false"]) + def pbsConfig = ["adapters.generic.enabled" : "true", + "adapters.generic.endpoint" : "https://", + "http-client.circuit-breaker.enabled": "false"] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic generic BidRequest" def bidRequest = BidRequest.defaultBidRequest @@ -297,6 +320,9 @@ class BidderParamsSpec extends BaseSpec { then: "Response should contain error" assert response.ext?.errors[GENERIC]*.code == [999] assert response.ext?.errors[GENERIC]*.message == ["host name must not be empty"] + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should reject bidder when bidder params from request doesn't satisfy json-schema for auction request"() { @@ -390,9 +416,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS should emit error when filter-imp-media-type = true and #configMediaType is empty in bidder config"() { given: "Pbs config" - def pbsService = pbsServiceFactory.getService( - ["auction.filter-imp-media-type.enabled" : "true", - ("adapters.generic.meta-info.${configMediaType}".toString()): ""]) + def pbsConfig = ["auction.filter-imp-media-type.enabled" : "true", + ("adapters.generic.meta-info.${configMediaType}".toString()): ""] + def pbsService = pbsServiceFactory.getService(pbsConfig) when: "PBS processes auction request" def response = pbsService.sendAuctionRequest(bidRequest) @@ -404,6 +430,9 @@ class BidderParamsSpec extends BaseSpec { assert response.ext?.warnings[GENERIC]*.code == [2] assert response.ext?.warnings[GENERIC]*.message == ["Bidder does not support any media types."] + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) + where: configMediaType | bidRequest "app-media-types" | BidRequest.getDefaultBidRequest(APP) @@ -412,9 +441,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS should not validate request when filter-imp-media-type = false and #configMediaType is empty in bidder config"() { given: "Pbs config" - def pbsService = pbsServiceFactory.getService( - ["auction.filter-imp-media-type.enabled" : "false", - ("adapters.generic.meta-info.${configMediaType}".toString()): ""]) + def pbsConfig = ["auction.filter-imp-media-type.enabled" : "false", + ("adapters.generic.meta-info.${configMediaType}".toString()): ""] + def pbsService = pbsServiceFactory.getService(pbsConfig) when: "PBS processes auction request" def response = pbsService.sendAuctionRequest(bidRequest) @@ -425,6 +454,9 @@ class BidderParamsSpec extends BaseSpec { and: "Response should not contain error" assert !response.ext?.errors + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) + where: configMediaType | bidRequest "app-media-types" | BidRequest.getDefaultBidRequest(APP) @@ -433,9 +465,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS should emit error when filter-imp-media-type = true and request contains media type that is not configured in bidder config"() { given: "Pbs config" - def pbsService = pbsServiceFactory.getService( - ["auction.filter-imp-media-type.enabled" : "true", - "adapters.generic.meta-info.site-media-types": "native"]) + def pbsConfig = ["auction.filter-imp-media-type.enabled" : "true", + "adapters.generic.meta-info.site-media-types": "native"] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic BidRequest with banner, native" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -460,13 +492,16 @@ class BidderParamsSpec extends BaseSpec { and: "Response should not contain warnings" assert !response.ext?.warnings + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should not validate request when filter-imp-media-type = false and request contains only media type that is not configured in bidder config"() { given: "Pbs config" - def pbsService = pbsServiceFactory.getService( - ["auction.filter-imp-media-type.enabled" : "false", - "adapters.generic.meta-info.site-media-types": "native"]) + def pbsConfig = ["auction.filter-imp-media-type.enabled" : "false", + "adapters.generic.meta-info.site-media-types": "native"] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic BidRequest with banner, native" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -485,13 +520,16 @@ class BidderParamsSpec extends BaseSpec { and: "Response should not contain error" assert !response.ext?.errors + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should emit error for request with multiple impressions when filter-imp-media-type = true, one of imp doesn't contain supported media type"() { given: "Pbs config" - def pbsService = pbsServiceFactory.getService( - ["auction.filter-imp-media-type.enabled" : "true", - "adapters.generic.meta-info.site-media-types": "native,video"]) + def pbsConfig = ["auction.filter-imp-media-type.enabled" : "true", + "adapters.generic.meta-info.site-media-types": "native,video"] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic BidRequest with banner, native" def nativeImp = Imp.getDefaultImpression(NATIVE) @@ -525,13 +563,16 @@ class BidderParamsSpec extends BaseSpec { and: "seatbid should not be empty" assert !response.seatbid.isEmpty() + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS auction should reject the bidder with media-type that is not supported by DOOH configuration with proper warning"() { given: "PBS service with configuration for dooh media-types" - def pbsService = pbsServiceFactory.getService( - ["auction.filter-imp-media-type.enabled" : "true", - "adapters.generic.meta-info.dooh-media-types": mediaType]) + def pbsConfig = ["auction.filter-imp-media-type.enabled" : "true", + "adapters.generic.meta-info.dooh-media-types": mediaType] + def pbsService = pbsServiceFactory.getService(pbsConfig) when: "Requesting PBS auction" def bidResponse = pbsService.sendAuctionRequest(bidRequest) @@ -545,6 +586,9 @@ class BidderParamsSpec extends BaseSpec { and: "Should't send any bidder request" assert !bidder.getBidderRequests(bidRequest.id) + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) + where: mediaType | bidRequest VIDEO.value | BidRequest.getDefaultBidRequest(DOOH) @@ -556,9 +600,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS auction should reject only imps with media-type that is not supported by DOOH configuration with proper warning"() { given: "PBS service with configuration for dooh media-types" - def pbsService = pbsServiceFactory.getService( - ["auction.filter-imp-media-type.enabled" : "true", - "adapters.generic.meta-info.dooh-media-types": mediaType.value]) + def pbsConfig = ["auction.filter-imp-media-type.enabled" : "true", + "adapters.generic.meta-info.dooh-media-types": mediaType.value] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default bid response with adm and nurl" def bidResponse = BidResponse.getDefaultBidResponse(bidRequest).tap { @@ -580,6 +624,9 @@ class BidderParamsSpec extends BaseSpec { and: "Should send bidder request with only proper imp" assert bidder.getBidderRequest(bidRequest.id).imp.id == [bidRequest.imp.first().id] + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) + where: mediaType | bidRequest BANNER | BidRequest.getDefaultBidRequest(DOOH).tap { imp << Imp.getDefaultImpression(VIDEO) } @@ -589,9 +636,9 @@ class BidderParamsSpec extends BaseSpec { def "PBS should return empty seatBit when filter-imp-media-type = true, request.imp doesn't contain supported media type"() { given: "Pbs config" - def pbsService = pbsServiceFactory.getService( - ["auction.filter-imp-media-type.enabled" : "true", - "adapters.generic.meta-info.site-media-types": "native,video"]) + def pbsConfig = ["auction.filter-imp-media-type.enabled" : "true", + "adapters.generic.meta-info.site-media-types": "native,video"] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic BidRequest with banner" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -614,6 +661,9 @@ class BidderParamsSpec extends BaseSpec { and: "seatbid should be empty" assert response.seatbid.isEmpty() + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should send server specific info to bidder when such is set in PBS config"() { @@ -621,9 +671,10 @@ class BidderParamsSpec extends BaseSpec { def serverDataCenter = PBSUtils.randomString def serverExternalUrl = "https://${PBSUtils.randomString}.com/" def serverHostVendorId = PBSUtils.randomNumber - def pbsService = pbsServiceFactory.getService(["datacenter-region" : serverDataCenter, - "external-url" : serverExternalUrl as String, - "gdpr.host-vendor-id": serverHostVendorId as String]) + def pbsConfig = ["datacenter-region" : serverDataCenter, + "external-url" : serverExternalUrl as String, + "gdpr.host-vendor-id": serverHostVendorId as String] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Bid request" def bidRequest = BidRequest.defaultBidRequest @@ -637,13 +688,17 @@ class BidderParamsSpec extends BaseSpec { assert bidderRequest?.ext?.prebid?.server?.externalUrl == serverExternalUrl assert bidderRequest.ext.prebid.server.datacenter == serverDataCenter assert bidderRequest.ext.prebid.server.gvlId == serverHostVendorId + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should request to bidder with header Content-Encoding = gzip when adapters.BIDDER.endpoint-compression = gzip"() { given: "PBS with adapter configuration" def compressionType = GZIP.value - def pbsService = pbsServiceFactory.getService(["adapters.generic.enabled" : "true", - "adapters.generic.endpoint-compression": compressionType]) + def pbsConfig = ["adapters.generic.enabled" : "true", + "adapters.generic.endpoint-compression": compressionType] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default bid request" def bidRequest = BidRequest.defaultBidRequest @@ -654,12 +709,16 @@ class BidderParamsSpec extends BaseSpec { then: "Bidder request should contain header Content-Encoding = gzip" assert response.ext?.debug?.httpcalls?.get(BidderName.GENERIC.value)?.requestHeaders?.first() ?.get(CONTENT_ENCODING_HEADER)?.first() == compressionType + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should send request to bidder without header Content-Encoding when adapters.BIDDER.endpoint-compression = none"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService(["adapters.generic.enabled" : "true", - "adapters.generic.endpoint-compression": NONE.value]) + def pbsConfig = ["adapters.generic.enabled" : "true", + "adapters.generic.endpoint-compression": NONE.value] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default bid request" def bidRequest = BidRequest.defaultBidRequest @@ -670,6 +729,9 @@ class BidderParamsSpec extends BaseSpec { then: "Bidder request should not contain header Content-Encoding" assert !response.ext?.debug?.httpcalls?.get(BidderName.GENERIC.value)?.requestHeaders?.first() ?.get(CONTENT_ENCODING_HEADER) + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should not treat reserved imp[].ext.tid object as a bidder"() { @@ -814,7 +876,8 @@ class BidderParamsSpec extends BaseSpec { def "PBS should send request to bidder when adapters.bidder.meta-info.currency-accepted not specified"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService("adapters.generic.meta-info.currency-accepted": "") + def pbsConfig = ['adapters.generic.meta-info.currency-accepted': ''] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default bid request with generic bidder" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -842,14 +905,17 @@ class BidderParamsSpec extends BaseSpec { and: "PBS response shouldn't contain seatNonBid" assert !response.ext.seatnonbid + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should send request to bidder when adapters.bidder.aliases.bidder.meta-info.currency-accepted not specified"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService( - "adapters.generic.aliases.alias.enabled" : "true", - "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), - "adapters.generic.aliases.alias.meta-info.currency-accepted": "") + def pbsConfig = ["adapters.generic.aliases.alias.enabled": "true", + "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), + "adapters.generic.aliases.alias.meta-info.currency-accepted": ""] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default bid request with alias bidder" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -879,11 +945,15 @@ class BidderParamsSpec extends BaseSpec { and: "PBS response shouldn't contain seatNonBid" assert !response.ext.seatnonbid + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should send request to bidder when adapters.bidder.meta-info.currency-accepted intersect with requested currency"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService("adapters.generic.meta-info.currency-accepted": "${USD},${EUR}".toString()) + def pbsConfig = ["adapters.generic.meta-info.currency-accepted": "${USD},${EUR}".toString()] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic generic BidRequest" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -911,11 +981,15 @@ class BidderParamsSpec extends BaseSpec { and: "PBS response shouldn't contain seatNonBid and contain errors" assert !response.ext.seatnonbid + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS shouldn't send request to bidder and emit warning when adapters.bidder.meta-info.currency-accepted not intersect with requested currency"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService("adapters.generic.meta-info.currency-accepted": "${JPY},${CHF}".toString()) + def pbsConfig = ["adapters.generic.meta-info.currency-accepted": "${JPY},${CHF}".toString()] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic generic BidRequest" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -950,14 +1024,17 @@ class BidderParamsSpec extends BaseSpec { assert seatNonBid.seat == BidderName.GENERIC.value assert seatNonBid.nonBid[0].impId == bidRequest.imp[0].id assert seatNonBid.nonBid[0].statusCode == REQUEST_BLOCKED_UNACCEPTABLE_CURRENCY + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS should send request to bidder when adapters.bidder.aliases.bidder.meta-info.currency-accepted intersect with requested currency"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService( - "adapters.generic.aliases.alias.enabled" : "true", - "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), - "adapters.generic.aliases.alias.meta-info.currency-accepted": "${USD},${EUR}".toString()) + def pbsConfig = ["adapters.generic.aliases.alias.enabled": "true", + "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), + "adapters.generic.aliases.alias.meta-info.currency-accepted": "${USD},${EUR}".toString()] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic BidRequest with alias bidder" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -991,14 +1068,17 @@ class BidderParamsSpec extends BaseSpec { and: "PBS response shouldn't contain seatNonBid and contain errors" assert !response.ext.seatnonbid + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } def "PBS shouldn't send request to bidder and emit warning when adapters.bidder.aliases.bidder.meta-info.currency-accepted not intersect with requested currency"() { given: "PBS with adapter configuration" - def pbsService = pbsServiceFactory.getService( - "adapters.generic.aliases.alias.enabled" : "true", - "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), - "adapters.generic.aliases.alias.meta-info.currency-accepted": "${JPY},${CHF}".toString()) + def pbsConfig = ["adapters.generic.aliases.alias.enabled": "true", + "adapters.generic.aliases.alias.endpoint": "$networkServiceContainer.rootUri/auction".toString(), + "adapters.generic.aliases.alias.meta-info.currency-accepted": "${JPY},${CHF}".toString()] + def pbsService = pbsServiceFactory.getService(pbsConfig) and: "Default basic BidRequest with alias bidder" def bidRequest = BidRequest.defaultBidRequest.tap { @@ -1039,5 +1119,8 @@ class BidderParamsSpec extends BaseSpec { assert seatNonBid.seat == BidderName.ALIAS.value assert seatNonBid.nonBid[0].impId == bidRequest.imp[0].id assert seatNonBid.nonBid[0].statusCode == REQUEST_BLOCKED_UNACCEPTABLE_CURRENCY + + cleanup: "Stop and remove pbs container" + pbsServiceFactory.removeContainer(pbsConfig) } } diff --git a/src/test/groovy/org/prebid/server/functional/tests/module/AbTestingModuleSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/module/AbTestingModuleSpec.groovy index 9ca353e0088..b009794cb63 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/module/AbTestingModuleSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/module/AbTestingModuleSpec.groovy @@ -14,6 +14,7 @@ import org.prebid.server.functional.model.response.auction.AnalyticResult import org.prebid.server.functional.model.response.auction.InvocationResult import org.prebid.server.functional.service.PrebidServerService import org.prebid.server.functional.util.PBSUtils +import spock.lang.Shared import static org.prebid.server.functional.model.ModuleName.PB_RESPONSE_CORRECTION import static org.prebid.server.functional.model.config.Endpoint.OPENRTB2_AUCTION @@ -48,8 +49,20 @@ class AbTestingModuleSpec extends ModuleBaseSpec { private final static Map MULTI_MODULE_CONFIG = getResponseCorrectionConfig() + getOrtb2BlockingSettings() + ['hooks.host-execution-plan': null] - private final static PrebidServerService ortbModulePbsService = pbsServiceFactory.getService(getOrtb2BlockingSettings()) - private final static PrebidServerService pbsServiceWithMultipleModules = pbsServiceFactory.getService(MULTI_MODULE_CONFIG) + @Shared + private static PrebidServerService ortbModulePbsService + @Shared + private static PrebidServerService pbsServiceWithMultipleModules + + def setupSpec() { + ortbModulePbsService = pbsServiceFactory.getService(getOrtb2BlockingSettings()) + pbsServiceWithMultipleModules = pbsServiceFactory.getService(MULTI_MODULE_CONFIG) + } + + def cleanupSpec() { + pbsServiceFactory.removeContainer(getOrtb2BlockingSettings()) + pbsServiceFactory.removeContainer(MULTI_MODULE_CONFIG) + } def "PBS shouldn't apply a/b test config when config of ab test is disabled"() { given: "Default bid request with verbose trace" diff --git a/src/test/groovy/org/prebid/server/functional/tests/module/GeneralModuleSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/module/GeneralModuleSpec.groovy index 82727b16a56..231394afa6a 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/module/GeneralModuleSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/module/GeneralModuleSpec.groovy @@ -15,6 +15,7 @@ import org.prebid.server.functional.model.request.auction.TraceLevel import org.prebid.server.functional.model.response.auction.InvocationResult import org.prebid.server.functional.service.PrebidServerService import org.prebid.server.functional.util.PBSUtils +import spock.lang.Shared import static org.prebid.server.functional.model.ModuleName.ORTB2_BLOCKING import static org.prebid.server.functional.model.ModuleName.PB_RICHMEDIA_FILTER @@ -45,8 +46,20 @@ class GeneralModuleSpec extends ModuleBaseSpec { getOrtb2BlockingSettings() + ['hooks.host-execution-plan': encode(ExecutionPlan.getSingleEndpointExecutionPlan(OPENRTB2_AUCTION, MODULES_STAGES))] - private final static PrebidServerService pbsServiceWithMultipleModule = pbsServiceFactory.getService(MULTI_MODULE_CONFIG + DISABLED_INVOKE_CONFIG) - private final static PrebidServerService pbsServiceWithMultipleModuleWithRequireInvoke = pbsServiceFactory.getService(MULTI_MODULE_CONFIG + ENABLED_INVOKE_CONFIG) + @Shared + private static PrebidServerService pbsServiceWithMultipleModule + @Shared + private static PrebidServerService pbsServiceWithMultipleModuleWithRequireInvoke + + def setupSpec() { + pbsServiceWithMultipleModule = pbsServiceFactory.getService(MULTI_MODULE_CONFIG + DISABLED_INVOKE_CONFIG) + pbsServiceWithMultipleModuleWithRequireInvoke = pbsServiceFactory.getService(MULTI_MODULE_CONFIG + ENABLED_INVOKE_CONFIG) + } + + def cleanupSpec() { + pbsServiceFactory.removeContainer(MULTI_MODULE_CONFIG + DISABLED_INVOKE_CONFIG) + pbsServiceFactory.removeContainer(MULTI_MODULE_CONFIG + ENABLED_INVOKE_CONFIG) + } def "PBS should call all modules and traces response when account config is empty and require-config-to-invoke is disabled"() { given: "Default bid request with verbose trace" diff --git a/src/test/groovy/org/prebid/server/functional/tests/module/analyticstag/AnalyticsTagsModuleSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/module/analyticstag/AnalyticsTagsModuleSpec.groovy index 8a99628b70c..c625c926303 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/module/analyticstag/AnalyticsTagsModuleSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/module/analyticstag/AnalyticsTagsModuleSpec.groovy @@ -18,6 +18,7 @@ import org.prebid.server.functional.model.response.auction.ModuleActivityName import org.prebid.server.functional.service.PrebidServerService import org.prebid.server.functional.tests.module.ModuleBaseSpec import org.prebid.server.functional.util.PBSUtils +import spock.lang.Shared import static org.prebid.server.functional.model.ModuleName.ORTB2_BLOCKING import static org.prebid.server.functional.model.ModuleName.PB_RICHMEDIA_FILTER @@ -30,7 +31,16 @@ import static org.prebid.server.functional.model.response.auction.ErrorType.PREB class AnalyticsTagsModuleSpec extends ModuleBaseSpec { - private final PrebidServerService pbsServiceWithEnabledOrtb2Blocking = pbsServiceFactory.getService(ortb2BlockingSettings) + @Shared + private static PrebidServerService pbsServiceWithEnabledOrtb2Blocking + + def setupSpec() { + pbsServiceWithEnabledOrtb2Blocking = pbsServiceFactory.getService(ortb2BlockingSettings) + } + + def cleanupSpec() { + pbsServiceFactory.removeContainer(ortb2BlockingSettings) + } def "PBS should include analytics tag for ortb2-blocking module in response when request and account allow client details"() { given: "Default account with module config" diff --git a/src/test/groovy/org/prebid/server/functional/tests/module/ortb2blocking/Ortb2BlockingSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/module/ortb2blocking/Ortb2BlockingSpec.groovy index bb644508090..ebe29ea01cc 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/module/ortb2blocking/Ortb2BlockingSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/module/ortb2blocking/Ortb2BlockingSpec.groovy @@ -33,6 +33,7 @@ import org.prebid.server.functional.model.response.auction.SeatBid import org.prebid.server.functional.service.PrebidServerService import org.prebid.server.functional.tests.module.ModuleBaseSpec import org.prebid.server.functional.util.PBSUtils +import spock.lang.Shared import static org.prebid.server.functional.model.ModuleName.ORTB2_BLOCKING import static org.prebid.server.functional.model.bidder.BidderName.ALIAS @@ -59,9 +60,19 @@ class Ortb2BlockingSpec extends ModuleBaseSpec { private static final String WILDCARD = '*' private static final Map IX_CONFIG = ["adapters.ix.enabled" : "true", "adapters.ix.endpoint": "$networkServiceContainer.rootUri/auction".toString()] + private static final Map PBS_CONFIG = getOrtb2BlockingSettings() + IX_CONFIG + + ['adapter-defaults.ortb.multiformat-supported': 'false'] - private final PrebidServerService pbsServiceWithEnabledOrtb2Blocking = pbsServiceFactory.getService(ortb2BlockingSettings + IX_CONFIG + - ['adapter-defaults.ortb.multiformat-supported': 'false']) + @Shared + private static PrebidServerService pbsServiceWithEnabledOrtb2Blocking + + def setupSpec() { + pbsServiceWithEnabledOrtb2Blocking = pbsServiceFactory.getService(PBS_CONFIG) + } + + def cleanupSpec() { + pbsServiceFactory.removeContainer(PBS_CONFIG) + } def "PBS should send original array ortb2 attribute to bidder when enforce blocking is disabled"() { given: "Default bid request with proper ortb attribute" diff --git a/src/test/groovy/org/prebid/server/functional/tests/module/pbrequestcorrection/PbRequestCorrectionSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/module/pbrequestcorrection/PbRequestCorrectionSpec.groovy index 68b00bdd0d1..c478032d3d4 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/module/pbrequestcorrection/PbRequestCorrectionSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/module/pbrequestcorrection/PbRequestCorrectionSpec.groovy @@ -14,6 +14,7 @@ import org.prebid.server.functional.model.request.auction.OperationState import org.prebid.server.functional.service.PrebidServerService import org.prebid.server.functional.tests.module.ModuleBaseSpec import org.prebid.server.functional.util.PBSUtils +import spock.lang.Shared import static org.prebid.server.functional.model.request.auction.DistributionChannel.APP import static org.prebid.server.functional.model.request.auction.OperationState.YES @@ -27,7 +28,16 @@ class PbRequestCorrectionSpec extends ModuleBaseSpec { private static final String ANDROID = "android" private static final String IOS = "IOS" - private PrebidServerService pbsServiceWithRequestCorrectionModule = pbsServiceFactory.getService(requestCorrectionSettings) + @Shared + private static PrebidServerService pbsServiceWithRequestCorrectionModule + + def setupSpec() { + pbsServiceWithRequestCorrectionModule = pbsServiceFactory.getService(requestCorrectionSettings) + } + + def cleanupSpec() { + pbsServiceFactory.removeContainer(requestCorrectionSettings) + } def "PBS should remove positive instl from imps for android app when request correction is enabled for account"() { given: "Android APP bid request with version lover then version threshold" diff --git a/src/test/groovy/org/prebid/server/functional/tests/module/responsecorrenction/ResponseCorrectionSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/module/responsecorrenction/ResponseCorrectionSpec.groovy index c848c30e2e4..0cae9da6844 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/module/responsecorrenction/ResponseCorrectionSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/module/responsecorrenction/ResponseCorrectionSpec.groovy @@ -16,6 +16,7 @@ import org.prebid.server.functional.model.response.auction.Prebid import org.prebid.server.functional.service.PrebidServerService import org.prebid.server.functional.tests.module.ModuleBaseSpec import org.prebid.server.functional.util.PBSUtils +import spock.lang.Shared import java.time.Instant @@ -32,12 +33,22 @@ import static org.prebid.server.functional.model.response.auction.MediaType.VIDE class ResponseCorrectionSpec extends ModuleBaseSpec { - private final PrebidServerService pbsServiceWithResponseCorrectionModule = pbsServiceFactory.getService( - ["adapter-defaults.modifying-vast-xml-allowed": "false", - "adapters.generic.modifying-vast-xml-allowed": "false"] + - responseCorrectionConfig) - private final static int OPTIMAL_MAX_LENGTH = 20 + private static final Map PBS_CONFIG = ["adapter-defaults.modifying-vast-xml-allowed": "false", + "adapters.generic.modifying-vast-xml-allowed": "false"] + + getResponseCorrectionConfig() + + @Shared + private static PrebidServerService pbsServiceWithResponseCorrectionModule + + def setupSpec() { + pbsServiceWithResponseCorrectionModule = pbsServiceFactory.getService(PBS_CONFIG) + } + + def cleanupSpec() { + pbsServiceFactory.removeContainer(PBS_CONFIG) + } + def "PBS shouldn't modify response when in account correction module disabled"() { given: "Start up time" diff --git a/src/test/groovy/org/prebid/server/functional/tests/module/richmedia/RichMediaFilterSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/module/richmedia/RichMediaFilterSpec.groovy index c49743b275b..bf653ac7f0e 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/module/richmedia/RichMediaFilterSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/module/richmedia/RichMediaFilterSpec.groovy @@ -27,13 +27,28 @@ class RichMediaFilterSpec extends ModuleBaseSpec { private static final String PATTERN_NAME = PBSUtils.randomString private static final String PATTERN_NAME_ACCOUNT = PBSUtils.randomString - private final PrebidServerService pbsServiceWithEnabledMediaFilter = pbsServiceFactory.getService(getRichMediaFilterSettings(PATTERN_NAME)) - private final PrebidServerService pbsServiceWithEnabledMediaFilterAndDifferentCaseStrategy = pbsServiceFactory.getService( - (getRichMediaFilterSettings(PATTERN_NAME) + ["hooks.host-execution-plan": encode(ExecutionPlan.getSingleEndpointExecutionPlan(OPENRTB2_AUCTION, PB_RICHMEDIA_FILTER, [ALL_PROCESSED_BID_RESPONSES]).tap { + private static final Map DISABLED_FILTER_SPECIFIC_PATTERN_NAME_CONFIG = getRichMediaFilterSettings(PATTERN_NAME, false) + private static final Map SPECIFIC_PATTERN_NAME_CONFIG = getRichMediaFilterSettings(PATTERN_NAME) + private static final Map SNAKE_SPECIFIC_PATTERN_NAME_CONFIG = (getRichMediaFilterSettings(PATTERN_NAME) + + ["hooks.host-execution-plan": encode(ExecutionPlan.getSingleEndpointExecutionPlan(OPENRTB2_AUCTION, PB_RICHMEDIA_FILTER, [ALL_PROCESSED_BID_RESPONSES]).tap { endpoints.values().first().stages.values().first().groups.first.hookSequenceSnakeCase = [new HookId(moduleCodeSnakeCase: PB_RICHMEDIA_FILTER.code, hookImplCodeSnakeCase: "${PB_RICHMEDIA_FILTER.code}-${ALL_PROCESSED_BID_RESPONSES.value}-hook")] - })]) - .collectEntries { key, value -> [(key.toString()): value.toString()] }) - private final PrebidServerService pbsServiceWithDisabledMediaFilter = pbsServiceFactory.getService(getRichMediaFilterSettings(PATTERN_NAME, false)) + })]).collectEntries { key, value -> [(key.toString()): value.toString()] } + + private static PrebidServerService pbsServiceWithDisabledMediaFilter + private static PrebidServerService pbsServiceWithEnabledMediaFilter + private static PrebidServerService pbsServiceWithEnabledMediaFilterAndDifferentCaseStrategy + + def setupSpec() { + pbsServiceWithDisabledMediaFilter = pbsServiceFactory.getService(DISABLED_FILTER_SPECIFIC_PATTERN_NAME_CONFIG) + pbsServiceWithEnabledMediaFilter = pbsServiceFactory.getService(SPECIFIC_PATTERN_NAME_CONFIG) + pbsServiceWithEnabledMediaFilterAndDifferentCaseStrategy = pbsServiceFactory.getService(SNAKE_SPECIFIC_PATTERN_NAME_CONFIG) + } + + def cleanupSpec() { + pbsServiceFactory.removeContainer(DISABLED_FILTER_SPECIFIC_PATTERN_NAME_CONFIG) + pbsServiceFactory.removeContainer(SPECIFIC_PATTERN_NAME_CONFIG) + pbsServiceFactory.removeContainer(SNAKE_SPECIFIC_PATTERN_NAME_CONFIG) + } def "PBS should process request without rich media module when host config have empty settings"() { given: "Prebid server with empty settings for module"