Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading