Skip to content

Commit

Permalink
Tests: Fix Bidder Aliases Validation (#3706)
Browse files Browse the repository at this point in the history
* Tests: Fix Bidder Aliases Validation
  • Loading branch information
osulzhenko authored Jan 28, 2025
1 parent d188ada commit c8b100d
Showing 1 changed file with 67 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,24 +1,42 @@
package org.prebid.server.functional.tests

import org.prebid.server.functional.model.bidder.AppNexus
import org.prebid.server.functional.model.bidder.Generic
import org.prebid.server.functional.model.bidder.Openx
import org.prebid.server.functional.model.request.auction.BidRequest
import org.prebid.server.functional.service.PrebidServerException
import org.prebid.server.functional.testcontainers.Dependencies
import org.prebid.server.functional.util.PBSUtils
import spock.lang.Shared

import static io.netty.handler.codec.http.HttpResponseStatus.BAD_REQUEST
import static org.prebid.server.functional.model.bidder.BidderName.ALIAS
import static org.prebid.server.functional.model.bidder.BidderName.APPNEXUS
import static org.prebid.server.functional.model.bidder.BidderName.BOGUS
import static org.prebid.server.functional.model.bidder.BidderName.GENERIC
import static org.prebid.server.functional.model.bidder.BidderName.GENER_X
import static org.prebid.server.functional.model.bidder.BidderName.OPENX
import static org.prebid.server.functional.model.bidder.CompressionType.GZIP
import static org.prebid.server.functional.model.response.auction.ErrorType.PREBID
import static org.prebid.server.functional.testcontainers.Dependencies.networkServiceContainer
import static org.prebid.server.functional.util.HttpUtil.CONTENT_ENCODING_HEADER

class AliasSpec extends BaseSpec {

private static final Map<String, String> ADDITIONAL_BIDDERS_CONFIG = ["adapters.${OPENX.value}.enabled" : "true",
"adapters.${OPENX.value}.endpoint" : "$networkServiceContainer.rootUri/${OPENX.value}/auction".toString(),
"adapters.${APPNEXUS.value}.enabled" : "true",
"adapters.${APPNEXUS.value}.endpoint": "$networkServiceContainer.rootUri/${APPNEXUS.value}/auction".toString()]
@Shared
private static pbsServiceWithAdditionalBidders

def setupSpec() {
pbsServiceWithAdditionalBidders = pbsServiceFactory.getService(ADDITIONAL_BIDDERS_CONFIG + GENERIC_ALIAS_CONFIG)
}

def cleanupSpec() {
pbsServiceFactory.removeContainer(ADDITIONAL_BIDDERS_CONFIG + GENERIC_ALIAS_CONFIG)
}

def "PBS should be able to take alias from request"() {
given: "Default bid request with alias"
def bidRequest = BidRequest.defaultBidRequest.tap {
Expand Down Expand Up @@ -142,7 +160,7 @@ class AliasSpec extends BaseSpec {
}

when: "PBS processes auction request"
prebidServerService.sendAuctionRequest(bidRequest)
pbsServiceWithAdditionalBidders.sendAuctionRequest(bidRequest)

then: "Bidder request should contain request per-alies"
def bidderRequests = bidder.getBidderRequests(bidRequest.id)
Expand Down Expand Up @@ -209,6 +227,53 @@ class AliasSpec extends BaseSpec {
pbsServiceFactory.removeContainer(pbsConfig)
}

def "PBS should validate request as alias request and without any warnings when required properties in place"() {
given: "Default bid request with openx and alias bidder"
def bidRequest = BidRequest.defaultBidRequest.tap {
imp[0].ext.prebid.bidder.appNexus = AppNexus.default
imp[0].ext.prebid.bidder.generic = null
ext.prebid.aliases = [(APPNEXUS.value): OPENX]
}

when: "PBS processes auction request"
def bidResponse = pbsServiceWithAdditionalBidders.sendAuctionRequest(bidRequest)

then: "PBS contain http call for specific bidder"
def responseDebug = bidResponse.ext.debug
assert responseDebug.httpcalls.size() == 1
assert responseDebug.httpcalls[APPNEXUS.value]*.uri == ["$networkServiceContainer.rootUri/${APPNEXUS.value}/auction"]

and: "PBS should not contain any warnings"
assert !bidResponse.ext.warnings
}

def "PBS should validate request as alias request and emit proper warnings when validation fails for request"() {
given: "Default bid request with openx and alias bidder"
def bidRequest = BidRequest.defaultBidRequest.tap {
imp[0].ext.prebid.bidder.appNexus = new AppNexus()
imp[0].ext.prebid.bidder.generic = null
ext.prebid.aliases = [(APPNEXUS.value): OPENX]
}

when: "PBS processes auction request"
def bidResponse = pbsServiceWithAdditionalBidders.sendAuctionRequest(bidRequest)

then: "PBS shouldn't contain http calls"
assert !bidResponse.ext.debug.httpcalls

and: "Bid response should contain warning"
assert bidResponse.ext.warnings[PREBID]?.code == [999, 999]
assert bidResponse.ext?.warnings[PREBID]*.message ==
["WARNING: request.imp[0].ext.prebid.bidder.${APPNEXUS.value} was dropped with a reason: " +
"request.imp[0].ext.prebid.bidder.${APPNEXUS.value} failed validation.\n" +
"\$.placement_id: is missing but it is required\n" +
"\$.member: is missing but it is required\n" +
"\$.placementId: is missing but it is required\n" +
"\$.inv_code: is missing but it is required\n" +
"\$.invCode: is missing but it is required",
"WARNING: request.imp[0].ext must contain at least one valid bidder"]
}

def "PBS should invoke as aliases when alias is unknown and core bidder is specified"() {
given: "Default bid request with generic and alias bidder"
def bidRequest = BidRequest.defaultBidRequest.tap {
Expand Down

0 comments on commit c8b100d

Please sign in to comment.