diff --git a/src/main/java/org/prebid/server/auction/BidResponseCreator.java b/src/main/java/org/prebid/server/auction/BidResponseCreator.java index b2c364d6a54..68c187d8f74 100644 --- a/src/main/java/org/prebid/server/auction/BidResponseCreator.java +++ b/src/main/java/org/prebid/server/auction/BidResponseCreator.java @@ -18,7 +18,6 @@ import io.vertx.core.CompositeFuture; import io.vertx.core.Future; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; @@ -35,7 +34,6 @@ import org.prebid.server.auction.model.CachedDebugLog; import org.prebid.server.auction.model.CategoryMappingResult; import org.prebid.server.auction.model.MultiBidConfig; -import org.prebid.server.auction.model.PaaFormat; import org.prebid.server.auction.model.Rejection; import org.prebid.server.auction.model.TargetingInfo; import org.prebid.server.auction.model.debug.DebugContext; @@ -63,13 +61,7 @@ import org.prebid.server.identity.IdGenerator; import org.prebid.server.json.DecodeException; import org.prebid.server.json.JacksonMapper; -import org.prebid.server.log.ConditionalLogger; -import org.prebid.server.log.Logger; -import org.prebid.server.log.LoggerFactory; -import org.prebid.server.metric.MetricName; -import org.prebid.server.metric.Metrics; import org.prebid.server.proto.openrtb.ext.request.ExtImp; -import org.prebid.server.proto.openrtb.ext.request.ExtImpAuctionEnvironment; import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid; import org.prebid.server.proto.openrtb.ext.request.ExtMediaTypePriceGranularity; import org.prebid.server.proto.openrtb.ext.request.ExtOptions; @@ -85,19 +77,13 @@ import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; import org.prebid.server.proto.openrtb.ext.response.ExtBidResponse; -import org.prebid.server.proto.openrtb.ext.response.ExtBidResponseFledge; import org.prebid.server.proto.openrtb.ext.response.ExtBidResponsePrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidderError; import org.prebid.server.proto.openrtb.ext.response.ExtDebugTrace; import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgb; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgsExt; import org.prebid.server.proto.openrtb.ext.response.ExtResponseCache; import org.prebid.server.proto.openrtb.ext.response.ExtResponseDebug; import org.prebid.server.proto.openrtb.ext.response.ExtTraceActivityInfrastructure; -import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import org.prebid.server.proto.openrtb.ext.response.seatnonbid.NonBid; import org.prebid.server.proto.openrtb.ext.response.seatnonbid.SeatNonBid; import org.prebid.server.settings.model.Account; @@ -133,9 +119,6 @@ public class BidResponseCreator { - private static final Logger logger = LoggerFactory.getLogger(BidResponseCreator.class); - private static final ConditionalLogger conditionalLogger = new ConditionalLogger(logger); - private static final String CACHE = "cache"; private static final String PREBID_EXT = "prebid"; private static final Integer DEFAULT_BID_LIMIT_MIN = 1; @@ -146,7 +129,6 @@ public class BidResponseCreator { private static final String TARGETING_ENV_AMP_VALUE = "amp"; private static final int MIN_BID_ID_LENGTH = 17; - private final double logSamplingRate; private final CoreCacheService coreCacheService; private final BidderCatalog bidderCatalog; private final VastModifier vastModifier; @@ -161,7 +143,6 @@ public class BidResponseCreator { private final boolean enforceRandomBidId; private final Clock clock; private final JacksonMapper mapper; - private final Metrics metrics; private final CacheTtl mediaTypeCacheTtl; private final CacheDefaultTtlProperties cacheDefaultProperties; @@ -169,8 +150,7 @@ public class BidResponseCreator { private final String cachePath; private final String cacheAssetUrlTemplate; - public BidResponseCreator(double logSamplingRate, - CoreCacheService coreCacheService, + public BidResponseCreator(CoreCacheService coreCacheService, BidderCatalog bidderCatalog, VastModifier vastModifier, EventsService eventsService, @@ -184,7 +164,6 @@ public BidResponseCreator(double logSamplingRate, boolean enforceRandomBidId, Clock clock, JacksonMapper mapper, - Metrics metrics, CacheTtl mediaTypeCacheTtl, CacheDefaultTtlProperties cacheDefaultProperties) { @@ -204,8 +183,6 @@ public BidResponseCreator(double logSamplingRate, this.mapper = Objects.requireNonNull(mapper); this.mediaTypeCacheTtl = Objects.requireNonNull(mediaTypeCacheTtl); this.cacheDefaultProperties = Objects.requireNonNull(cacheDefaultProperties); - this.metrics = Objects.requireNonNull(metrics); - this.logSamplingRate = logSamplingRate; cacheAssetUrlTemplate = Objects.requireNonNull(coreCacheService.getCachedAssetURLTemplate()); cacheHost = Objects.requireNonNull(coreCacheService.getEndpointHost()); @@ -428,9 +405,7 @@ private List toBidderResponseInfos(CategoryMappingResult cat Collections.emptyList(), seatBid.getHttpCalls(), seatBid.getErrors(), - seatBid.getWarnings(), - seatBid.getFledgeAuctionConfigs(), - seatBid.getIgi()); + seatBid.getWarnings()); result.add(BidderResponseInfo.of( bidder, @@ -472,9 +447,7 @@ private List toBidderResponseInfos(CategoryMappingResult cat bidInfos, seatBid.getHttpCalls(), seatBid.getErrors(), - seatBid.getWarnings(), - seatBid.getFledgeAuctionConfigs(), - seatBid.getIgi()); + seatBid.getWarnings()); result.add(BidderResponseInfo.of( bidder, @@ -663,8 +636,8 @@ private Future cacheBidsAndCreateResponse(List final Set winningBidInfos = targeting == null ? null : bidInfos.stream() - .filter(bidInfo -> bidInfo.getTargetingInfo().isWinningBid()) - .collect(Collectors.toSet()); + .filter(bidInfo -> bidInfo.getTargetingInfo().isWinningBid()) + .collect(Collectors.toSet()); final Set bidsToCache = cacheInfo.isShouldCacheWinningBidsOnly() ? winningBidInfos : bidInfos; @@ -837,10 +810,6 @@ private ExtBidResponse toExtBidResponse(List bidderResponseI final DebugContext debugContext = auctionContext.getDebugContext(); final boolean debugEnabled = debugContext.isDebugEnabled(); - final PaaResult paaResult = toPaaOutput(bidderResponseInfos, auctionContext); - final List igi = paaResult.igis(); - final ExtBidResponseFledge fledge = paaResult.fledge(); - final ExtResponseDebug extResponseDebug = toExtResponseDebug( bidderResponseInfos, auctionContext, cacheResult, debugEnabled); final Map> errors = toExtBidderErrors( @@ -850,8 +819,7 @@ private ExtBidResponse toExtBidResponse(List bidderResponseI final Map responseTimeMillis = toResponseTimes(bidderResponseInfos, cacheResult); - final ExtBidResponsePrebid prebid = toExtBidResponsePrebid( - auctionTimestamp, auctionContext.getBidRequest(), fledge); + final ExtBidResponsePrebid prebid = toExtBidResponsePrebid(auctionTimestamp, auctionContext.getBidRequest()); return ExtBidResponse.builder() .debug(extResponseDebug) @@ -859,15 +827,11 @@ private ExtBidResponse toExtBidResponse(List bidderResponseI .warnings(warnings) .responsetimemillis(responseTimeMillis) .tmaxrequest(auctionContext.getBidRequest().getTmax()) - .igi(igi) .prebid(prebid) .build(); } - private ExtBidResponsePrebid toExtBidResponsePrebid(long auctionTimestamp, - BidRequest bidRequest, - ExtBidResponseFledge extBidResponseFledge) { - + private ExtBidResponsePrebid toExtBidResponsePrebid(long auctionTimestamp, BidRequest bidRequest) { final JsonNode passThrough = Optional.ofNullable(bidRequest) .map(BidRequest::getExt) .map(ExtRequest::getPrebid) @@ -877,165 +841,6 @@ private ExtBidResponsePrebid toExtBidResponsePrebid(long auctionTimestamp, return ExtBidResponsePrebid.builder() .auctiontimestamp(auctionTimestamp) .passthrough(passThrough) - .fledge(extBidResponseFledge) - .build(); - } - - private PaaResult toPaaOutput(List bidderResponseInfos, AuctionContext auctionContext) { - - final PaaFormat paaFormat = resolvePaaFormat(auctionContext); - final List igis = extractIgis(bidderResponseInfos, auctionContext); - final List extIgi = paaFormat == PaaFormat.IAB && !igis.isEmpty() ? igis : null; - - final List fledgeConfigs = paaFormat == PaaFormat.ORIGINAL - ? toOriginalFledgeFormat(igis) - : Collections.emptyList(); - - // TODO: Remove after transition period - final List imps = auctionContext.getBidRequest().getImp(); - final List deprecatedFledgeConfigs = bidderResponseInfos.stream() - .flatMap(bidderResponseInfo -> toDeprecatedFledgeConfigs(bidderResponseInfo, imps)) - .toList(); - - final List combinedFledgeConfigs = ListUtils.union(deprecatedFledgeConfigs, fledgeConfigs); - final ExtBidResponseFledge extBidResponseFledge = combinedFledgeConfigs.isEmpty() - ? null - : ExtBidResponseFledge.of(combinedFledgeConfigs); - - return new PaaResult(extIgi, extBidResponseFledge); - } - - private List extractIgis(List bidderResponseInfos, AuctionContext auctionContext) { - return bidderResponseInfos.stream() - .flatMap(responseInfo -> responseInfo.getSeatBid().getIgi().stream() - .map(igi -> prepareExtIgi( - igi, - responseInfo.getSeat(), - responseInfo.getAdapterCode(), - auctionContext))) - .filter(Objects::nonNull) - .toList(); - } - - private ExtIgi prepareExtIgi(ExtIgi igi, - String seat, - String adapterCode, - AuctionContext auctionContext) { - if (igi == null) { - return null; - } - - final boolean shouldDropIgb = StringUtils.isEmpty(igi.getImpid()) && CollectionUtils.isNotEmpty(igi.getIgb()); - if (shouldDropIgb) { - final String warning = "ExtIgi with absent impId from bidder: " + seat; - if (auctionContext.getDebugContext().isDebugEnabled()) { - auctionContext.getDebugWarnings().add(warning); - } - conditionalLogger.warn(warning, logSamplingRate); - metrics.updateAlertsMetrics(MetricName.general); - } - - final List updatedIgs = prepareExtIgiIgs(igi.getIgs(), seat, adapterCode, auctionContext); - final List preparedIgs = updatedIgs.isEmpty() ? null : updatedIgs; - final List preparedIgb = shouldDropIgb ? null : igi.getIgb(); - - return ObjectUtils.anyNotNull(preparedIgs, preparedIgb) - ? igi.toBuilder().igs(preparedIgs).igb(preparedIgb).build() - : null; - } - - private List prepareExtIgiIgs(List igiIgs, - String seat, - String adapterCode, - AuctionContext auctionContext) { - - if (igiIgs == null) { - return Collections.emptyList(); - } - - final boolean debugEnabled = auctionContext.getDebugContext().isDebugEnabled(); - final List preparedIgiIgs = new ArrayList<>(); - for (ExtIgiIgs extIgiIgs : igiIgs) { - if (extIgiIgs == null) { - continue; - } - - if (StringUtils.isEmpty(extIgiIgs.getImpId())) { - final String warning = "ExtIgiIgs with absent impId from bidder: " + seat; - if (debugEnabled) { - auctionContext.getDebugWarnings().add(warning); - } - conditionalLogger.warn(warning, logSamplingRate); - metrics.updateAlertsMetrics(MetricName.general); - continue; - } - - if (extIgiIgs.getConfig() == null) { - final String warning = "ExtIgiIgs with absent config from bidder: " + seat; - if (debugEnabled) { - auctionContext.getDebugWarnings().add(warning); - } - conditionalLogger.warn(warning, logSamplingRate); - metrics.updateAlertsMetrics(MetricName.general); - continue; - } - - final ExtIgiIgs preparedExtIgiIgs = extIgiIgs.toBuilder() - .ext(ExtIgiIgsExt.of(seat, adapterCode)) - .build(); - - preparedIgiIgs.add(preparedExtIgiIgs); - } - - return preparedIgiIgs; - } - - private List toOriginalFledgeFormat(List igis) { - return igis.stream() - .map(ExtIgi::getIgs) - .flatMap(Collection::stream) - .map(BidResponseCreator::extIgiIgsToFledgeConfig) - .toList(); - } - - private static FledgeAuctionConfig extIgiIgsToFledgeConfig(ExtIgiIgs extIgiIgs) { - return FledgeAuctionConfig.builder() - .bidder(extIgiIgs.getExt().getBidder()) - .adapter(extIgiIgs.getExt().getAdapter()) - .impId(extIgiIgs.getImpId()) - .config(extIgiIgs.getConfig()) - .build(); - } - - private Stream toDeprecatedFledgeConfigs(BidderResponseInfo bidderResponseInfo, - List imps) { - - return Optional.ofNullable(bidderResponseInfo.getSeatBid().getFledgeAuctionConfigs()) - .stream() - .flatMap(Collection::stream) - .filter(fledgeConfig -> validateFledgeConfig(fledgeConfig, imps)) - .map(fledgeConfig -> fledgeConfigWithBidder( - fledgeConfig, - bidderResponseInfo.getSeat(), - bidderResponseInfo.getAdapterCode())); - } - - private boolean validateFledgeConfig(FledgeAuctionConfig fledgeAuctionConfig, List imps) { - final ExtImpAuctionEnvironment fledgeEnabled = correspondingImp(fledgeAuctionConfig.getImpId(), imps) - .map(Imp::getExt) - .map(ext -> convertValue(ext, "ae", ExtImpAuctionEnvironment.class)) - .orElse(ExtImpAuctionEnvironment.SERVER_SIDE_AUCTION); - - return fledgeEnabled == ExtImpAuctionEnvironment.ON_DEVICE_IG_AUCTION_FLEDGE; - } - - private FledgeAuctionConfig fledgeConfigWithBidder(FledgeAuctionConfig fledgeConfig, - String seat, - String adapterCode) { - - return fledgeConfig.toBuilder() - .bidder(seat) - .adapter(adapterCode) .build(); } @@ -1353,17 +1158,6 @@ private static Map toResponseTimes(Collection Optional.ofNullable(auctionContext.getAccount()) - .map(Account::getAuction) - .map(AccountAuctionConfig::getPaaFormat)) - .orElse(PaaFormat.ORIGINAL); - } - /** * Returns {@link BidResponse} based on list of {@link BidderResponse}s and {@link CacheServiceResult}. */ @@ -2003,7 +1797,4 @@ private T convertValue(JsonNode jsonNode, String key, Class typeClass) { return null; } } - - private record PaaResult(List igis, ExtBidResponseFledge fledge) { - } } diff --git a/src/main/java/org/prebid/server/auction/ImpAdjuster.java b/src/main/java/org/prebid/server/auction/ImpAdjuster.java index 738622e6a86..27fe98930a7 100644 --- a/src/main/java/org/prebid/server/auction/ImpAdjuster.java +++ b/src/main/java/org/prebid/server/auction/ImpAdjuster.java @@ -1,7 +1,6 @@ package org.prebid.server.auction; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.IntNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.Imp; import org.apache.commons.lang3.StringUtils; @@ -17,8 +16,6 @@ public class ImpAdjuster { private static final String IMP_EXT = "ext"; - private static final String EXT_AE = "ae"; - private static final String EXT_IGS = "igs"; private static final String EXT_PREBID = "prebid"; private static final String EXT_PREBID_BIDDER = "bidder"; private static final String EXT_PREBID_IMP = "imp"; @@ -37,8 +34,6 @@ public ImpAdjuster(JacksonMapper jacksonMapper, } public Imp adjust(Imp originalImp, String bidder, List debugMessages) { - setAeParams(originalImp.getExt()); - final JsonNode impExtPrebidImp = bidderParamsFromImpExtPrebidImp(originalImp.getExt()); if (impExtPrebidImp == null) { return originalImp; @@ -71,26 +66,6 @@ public Imp adjust(Imp originalImp, String bidder, List debugMessages) { } } - private void setAeParams(ObjectNode ext) { - final int extAe = Optional.ofNullable(ext) - .map(extNode -> extNode.get(EXT_AE)) - .filter(JsonNode::isInt) - .map(JsonNode::asInt) - .orElse(-1); - - final boolean extIgsAePresent = Optional.ofNullable(ext) - .map(extNode -> extNode.get(EXT_IGS)) - .map(igsNode -> igsNode.get(EXT_AE)) - .isPresent(); - - if (!extIgsAePresent && (extAe == 0 || extAe == 1)) { - final ObjectNode igsNode = jacksonMapper.mapper().createObjectNode() - .set(EXT_AE, IntNode.valueOf(extAe)); - - ext.set(EXT_IGS, igsNode); - } - } - private static JsonNode bidderParamsFromImpExtPrebidImp(ObjectNode ext) { return Optional.ofNullable(ext) .map(extNode -> extNode.get(EXT_PREBID)) diff --git a/src/main/java/org/prebid/server/auction/model/PaaFormat.java b/src/main/java/org/prebid/server/auction/model/PaaFormat.java deleted file mode 100644 index 8367b61c0f2..00000000000 --- a/src/main/java/org/prebid/server/auction/model/PaaFormat.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.prebid.server.auction.model; - -import com.fasterxml.jackson.annotation.JsonProperty; - -public enum PaaFormat { - - @JsonProperty("original") - ORIGINAL, - - @JsonProperty("iab") - IAB -} diff --git a/src/main/java/org/prebid/server/auction/requestfactory/Ortb2ImplicitParametersResolver.java b/src/main/java/org/prebid/server/auction/requestfactory/Ortb2ImplicitParametersResolver.java index 90c049db606..4371fd9c3e9 100644 --- a/src/main/java/org/prebid/server/auction/requestfactory/Ortb2ImplicitParametersResolver.java +++ b/src/main/java/org/prebid/server/auction/requestfactory/Ortb2ImplicitParametersResolver.java @@ -24,12 +24,12 @@ import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; -import org.prebid.server.auction.aliases.BidderAliases; import org.prebid.server.auction.ImplicitParametersExtractor; import org.prebid.server.auction.IpAddressHelper; import org.prebid.server.auction.PriceGranularity; import org.prebid.server.auction.SecBrowsingTopicsResolver; import org.prebid.server.auction.TimeoutResolver; +import org.prebid.server.auction.aliases.BidderAliases; import org.prebid.server.auction.model.AuctionContext; import org.prebid.server.auction.model.Endpoint; import org.prebid.server.auction.model.IpAddress; @@ -89,7 +89,7 @@ public class Ortb2ImplicitParametersResolver { private static final String BIDDER_EXT = "bidder"; private static final Set IMP_EXT_NON_BIDDER_FIELDS = - Set.of(PREBID_EXT, "context", "all", "general", "skadn", "data", "gpid", "tid", "ae"); + Set.of(PREBID_EXT, "context", "all", "general", "skadn", "data", "gpid", "tid"); private static final String OVERRIDE_SOURCE_ID_TEMPLATE = "{{UUID}}"; private final boolean shouldCacheOnlyWinningBids; @@ -521,10 +521,10 @@ private User populateUser(User user, CaseInsensitiveMultiMap headers, boolean de return populatedData != null ? Optional.ofNullable(user) - .map(User::toBuilder) - .orElseGet(User::builder) - .data(populatedData) - .build() + .map(User::toBuilder) + .orElseGet(User::builder) + .data(populatedData) + .build() : null; } @@ -625,9 +625,9 @@ private static Set newSegmentsIds(List segments, Set ne ? SetUtils.difference( newIds, CollectionUtils.emptyIfNull(segments).stream() - .filter(Objects::nonNull) - .map(Segment::getId) - .collect(Collectors.toSet())) + .filter(Objects::nonNull) + .map(Segment::getId) + .collect(Collectors.toSet())) : newIds; } @@ -1030,10 +1030,10 @@ private Imp populateImp(Imp imp, return ObjectUtils.anyNotNull(populatedImpId, populatedImpSecure, populatedImpExt) ? imp.toBuilder() - .id(populatedImpId != null ? populatedImpId : impId) - .secure(populatedImpSecure != null ? populatedImpSecure : impSecure) - .ext(populatedImpExt != null ? populatedImpExt : impExt) - .build() + .id(populatedImpId != null ? populatedImpId : impId) + .secure(populatedImpSecure != null ? populatedImpSecure : impSecure) + .ext(populatedImpExt != null ? populatedImpExt : impExt) + .build() : null; } diff --git a/src/main/java/org/prebid/server/bidder/Bidder.java b/src/main/java/org/prebid/server/bidder/Bidder.java index 4a357da0a54..9dae888c4b9 100644 --- a/src/main/java/org/prebid/server/bidder/Bidder.java +++ b/src/main/java/org/prebid/server/bidder/Bidder.java @@ -4,7 +4,6 @@ import com.iab.openrtb.request.BidRequest; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.Result; @@ -33,22 +32,6 @@ public interface Bidder { */ Result> makeBids(BidderCall httpCall, BidRequest bidRequest); - /** - * Compound Bidder response with bids and other data to be passed back. - *

- * The errors should contain a list of errors which explain why this bidder's bids will be - * "subpar" in some way. For example: the server response didn't have the expected format. - */ - default CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) { - final var result = makeBids(httpCall, bidRequest); - return result != null - ? CompositeBidderResponse.builder() - .bids(result.getValue()) - .errors(result.getErrors()) - .build() - : null; - } - /** * Extracts targeting from bidder-specific extension. It is safe to assume that {@code ext} is not null. */ diff --git a/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java b/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java index 61e074ecb26..13cc63a666c 100644 --- a/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java +++ b/src/main/java/org/prebid/server/bidder/HttpBidderRequester.java @@ -8,8 +8,8 @@ import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.prebid.server.auction.aliases.BidderAliases; import org.prebid.server.auction.ExchangeService; +import org.prebid.server.auction.aliases.BidderAliases; import org.prebid.server.auction.model.BidRejectionReason; import org.prebid.server.auction.model.BidRejectionTracker; import org.prebid.server.auction.model.BidderRequest; @@ -18,7 +18,6 @@ import org.prebid.server.bidder.model.BidderCallType; import org.prebid.server.bidder.model.BidderError; import org.prebid.server.bidder.model.BidderSeatBid; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; @@ -30,8 +29,6 @@ import org.prebid.server.log.LoggerFactory; import org.prebid.server.model.CaseInsensitiveMultiMap; import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import org.prebid.server.util.HttpUtil; import org.prebid.server.vertx.httpclient.HttpClient; import org.prebid.server.vertx.httpclient.model.HttpClientResponse; @@ -191,9 +188,7 @@ private Future emptyBidderSeatBidWithErrors(List bid "The bidder failed to generate any bid requests, but also failed to generate an error")) : bidderErrors; - return Future.succeededFuture(BidderSeatBid.builder() - .errors(errors) - .build()); + return Future.succeededFuture(BidderSeatBid.builder().errors(errors).build()); } /** @@ -296,10 +291,7 @@ private Void processHttpCall(Bidder bidder, return null; } - /** - * Returns result based on response status code, list of {@link BidderBid}s and other data from bidder. - */ - private static CompositeBidderResponse makeBids(Bidder bidder, + private static Result> makeBids(Bidder bidder, BidderCall httpCall, BidRequest bidRequest) { @@ -309,13 +301,13 @@ private static CompositeBidderResponse makeBids(Bidder bidder, final int statusCode = httpCall.getResponse().getStatusCode(); if (statusCode == HttpResponseStatus.NO_CONTENT.code()) { - return CompositeBidderResponse.empty(); + return Result.empty(); } if (statusCode != HttpResponseStatus.OK.code()) { return null; } - return bidder.makeBidderResponse(toHttpCallWithSafeResponseBody(httpCall), bidRequest); + return bidder.makeBids(toHttpCallWithSafeResponseBody(httpCall), bidRequest); } /** @@ -346,8 +338,6 @@ private static class ResultBuilder { private final Map, BidderCall> bidderCallsRecorded = new HashMap<>(); private final List bidsRecorded = new ArrayList<>(); private final List errorsRecorded = new ArrayList<>(); - private final List igiRecorded = new ArrayList<>(); - private final List fledgeRecorded = new ArrayList<>(); ResultBuilder(List> httpRequests, List previousErrors, @@ -362,17 +352,15 @@ private static class ResultBuilder { this.mapper = mapper; } - void addHttpCall(BidderCall bidderCall, CompositeBidderResponse bidderResponse) { + void addHttpCall(BidderCall bidderCall, Result> bidderResponse) { bidderCallsRecorded.put(bidderCall.getRequest(), bidderCall); handleBids(bidderResponse); handleBidderErrors(bidderResponse); handleBidderCallError(bidderCall); - handleIgis(bidderResponse); - handleFledgeAuctionConfigs(bidderResponse); } - private void handleBids(CompositeBidderResponse bidderResponse) { - final List bids = bidderResponse != null ? bidderResponse.getBids() : null; + private void handleBids(Result> bidderResponse) { + final List bids = bidderResponse != null ? bidderResponse.getValue() : null; if (bids != null) { bidsRecorded.addAll(bids); completionTracker.processBids(bids); @@ -380,7 +368,7 @@ private void handleBids(CompositeBidderResponse bidderResponse) { } } - private void handleBidderErrors(CompositeBidderResponse bidderResponse) { + private void handleBidderErrors(Result> bidderResponse) { final List bidderErrors = bidderResponse != null ? bidderResponse.getErrors() : null; if (bidderErrors != null) { errorsRecorded.addAll(bidderErrors); @@ -425,18 +413,6 @@ private void handleBidderCallError(BidderCall bidderCall) { bidRejectionTracker.rejectImps(requestedImpIds, reason); } - private void handleFledgeAuctionConfigs(CompositeBidderResponse bidderResponse) { - Optional.ofNullable(bidderResponse) - .map(CompositeBidderResponse::getFledgeAuctionConfigs) - .ifPresent(fledgeRecorded::addAll); - } - - private void handleIgis(CompositeBidderResponse bidderResponse) { - Optional.ofNullable(bidderResponse) - .map(CompositeBidderResponse::getIgi) - .ifPresent(igiRecorded::addAll); - } - BidderSeatBid toBidderSeatBid(boolean debugEnabled) { final List> httpCalls = new ArrayList<>(bidderCallsRecorded.values()); httpRequests.stream() @@ -454,8 +430,6 @@ BidderSeatBid toBidderSeatBid(boolean debugEnabled) { .bids(bidsRecorded) .httpCalls(extHttpCalls) .errors(errors) - .igi(igiRecorded) - .fledgeAuctionConfigs(fledgeRecorded) .build(); } diff --git a/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java b/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java index 5b70032a98d..ff8de3f49fb 100644 --- a/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java +++ b/src/main/java/org/prebid/server/bidder/consumable/ConsumableBidder.java @@ -17,7 +17,6 @@ import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.Result; import org.prebid.server.exception.PreBidException; @@ -112,23 +111,13 @@ private static MultiMap resolveHeaders() { } @Override - @Deprecated(since = "Not used, since Bidder.makeBidderResponse(...) was overridden.") public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { - return Result.withError(BidderError.generic("Invalid method call")); - } - - @Override - public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) { try { - final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); final List errors = new ArrayList<>(); - - return CompositeBidderResponse.builder() - .bids(extractConsumableBids(bidRequest, bidResponse, errors)) - .errors(errors) - .build(); + final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); + return Result.of(extractConsumableBids(bidRequest, bidResponse, errors), errors); } catch (DecodeException e) { - return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage())); + return Result.withError(BidderError.badServerResponse(e.getMessage())); } } diff --git a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidResponse.java b/src/main/java/org/prebid/server/bidder/criteo/CriteoBidResponse.java deleted file mode 100644 index d6f43ef4c86..00000000000 --- a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.prebid.server.bidder.criteo; - -import com.iab.openrtb.response.SeatBid; -import lombok.Builder; -import lombok.Value; - -import java.util.List; - -@Builder(toBuilder = true) -@Value -public class CriteoBidResponse { - - String id; - - List seatbid; - - String bidid; - - String cur; - - String customdata; - - Integer nbr; - - CriteoExtBidResponse ext; - -} diff --git a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java b/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java index 9bf68e89e24..1afc5d9fa98 100644 --- a/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java +++ b/src/main/java/org/prebid/server/bidder/criteo/CriteoBidder.java @@ -4,13 +4,13 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.response.Bid; +import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.Result; import org.prebid.server.exception.PreBidException; @@ -19,7 +19,6 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; @@ -45,27 +44,18 @@ public Result>> makeHttpRequests(BidRequest bidRequ } @Override - @Deprecated(forRemoval = true) public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { - return Result.withError(BidderError.generic("Deprecated adapter method invoked")); - } - - @Override - public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) { try { - final CriteoBidResponse bidResponse = mapper.decodeValue( - httpCall.getResponse().getBody(), CriteoBidResponse.class); + final BidResponse bidResponse = mapper.decodeValue( + httpCall.getResponse().getBody(), BidResponse.class); - return CompositeBidderResponse.builder() - .bids(extractBids(bidResponse)) - .igi(extractIgi(bidResponse)) - .build(); + return Result.withValues(extractBids(bidResponse)); } catch (DecodeException | PreBidException e) { - return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage())); + return Result.withError(BidderError.badServerResponse(e.getMessage())); } } - private List extractBids(CriteoBidResponse bidResponse) { + private List extractBids(BidResponse bidResponse) { if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } @@ -106,12 +96,4 @@ private ObjectNode makeExt(String networkName) { .meta(ExtBidPrebidMeta.builder().networkName(networkName).build()) .build()); } - - private static List extractIgi(CriteoBidResponse bidResponse) { - return Optional.ofNullable(bidResponse) - .map(CriteoBidResponse::getExt) - .map(CriteoExtBidResponse::getIgi) - .filter(CollectionUtils::isNotEmpty) - .orElse(Collections.emptyList()); - } } diff --git a/src/main/java/org/prebid/server/bidder/criteo/CriteoExtBidResponse.java b/src/main/java/org/prebid/server/bidder/criteo/CriteoExtBidResponse.java deleted file mode 100644 index dda26a73ef7..00000000000 --- a/src/main/java/org/prebid/server/bidder/criteo/CriteoExtBidResponse.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.prebid.server.bidder.criteo; - -import lombok.Value; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; - -import java.util.List; - -@Value(staticConstructor = "of") -public class CriteoExtBidResponse { - - List igi; -} diff --git a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java index fcfc8a729a3..7c0ad863a34 100644 --- a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java +++ b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java @@ -15,19 +15,17 @@ import com.iab.openrtb.request.ntv.EventTrackingMethod; import com.iab.openrtb.request.ntv.EventType; import com.iab.openrtb.response.Bid; +import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.EventTracker; import com.iab.openrtb.response.Response; import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.prebid.server.bidder.Bidder; -import org.prebid.server.bidder.ix.model.response.IxBidResponse; -import org.prebid.server.bidder.ix.model.response.IxExtBidResponse; import org.prebid.server.bidder.ix.model.response.NativeV11Wrapper; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.Result; import org.prebid.server.exception.PreBidException; @@ -41,8 +39,6 @@ import org.prebid.server.proto.openrtb.ext.request.ix.ExtImpIx; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; import org.prebid.server.util.ObjectUtil; @@ -243,29 +239,18 @@ private ObjectNode makeDiagData(ExtRequest extRequest, Set siteIds) { } @Override - @Deprecated(since = "Not used, since Bidder.makeBidderResponse(...) was overridden.") public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { - return Result.withError(BidderError.generic("Invalid method call")); - } - - @Override - public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) { try { - final IxBidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), IxBidResponse.class); final List errors = new ArrayList<>(); - - return CompositeBidderResponse.builder() - .bids(extractBids(bidRequest, bidResponse, errors)) - .igi(extractIgi(bidResponse)) - .errors(errors) - .build(); + final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); + return Result.of(extractBids(bidRequest, bidResponse, errors), errors); } catch (DecodeException e) { - return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage())); + return Result.withError(BidderError.badServerResponse(e.getMessage())); } } private List extractBids(BidRequest bidRequest, - IxBidResponse bidResponse, + BidResponse bidResponse, List errors) { if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { @@ -283,7 +268,7 @@ private List extractBids(BidRequest bidRequest, .toList(); } - private BidderBid toBidderBid(Bid bid, BidRequest bidRequest, IxBidResponse bidResponse, List errors) { + private BidderBid toBidderBid(Bid bid, BidRequest bidRequest, BidResponse bidResponse, List errors) { final BidType bidType; try { bidType = getBidType(bid, bidRequest.getImp()); @@ -368,8 +353,8 @@ private ExtBidPrebidVideo parseBidExtPrebidVideo(ObjectNode bidExt) { private Bid updateBidWithVideoAttributes(Bid bid, ExtBidPrebidVideo extBidPrebidVideo) { return CollectionUtils.isEmpty(bid.getCat()) && extBidPrebidVideo != null ? bid.toBuilder() - .cat(Collections.singletonList(extBidPrebidVideo.getPrimaryCategory())) - .build() + .cat(Collections.singletonList(extBidPrebidVideo.getPrimaryCategory())) + .build() : bid; } @@ -428,17 +413,4 @@ private static ExtBidPrebidVideo videoInfo(ExtBidPrebidVideo extBidPrebidVideo) ? ExtBidPrebidVideo.of(extBidPrebidVideo.getDuration(), null) : null; } - - private List extractIgi(IxBidResponse bidResponse) { - final List igs = Optional.ofNullable(bidResponse) - .map(IxBidResponse::getExt) - .map(IxExtBidResponse::getProtectedAudienceAuctionConfigs) - .orElse(Collections.emptyList()) - .stream() - .filter(Objects::nonNull) - .map(config -> ExtIgiIgs.builder().impId(config.getBidId()).config(config.getConfig()).build()) - .toList(); - - return igs.isEmpty() ? null : Collections.singletonList(ExtIgi.builder().igs(igs).build()); - } } diff --git a/src/main/java/org/prebid/server/bidder/ix/model/response/AuctionConfigExtBidResponse.java b/src/main/java/org/prebid/server/bidder/ix/model/response/AuctionConfigExtBidResponse.java deleted file mode 100644 index 709fab87429..00000000000 --- a/src/main/java/org/prebid/server/bidder/ix/model/response/AuctionConfigExtBidResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.prebid.server.bidder.ix.model.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.Value; - -@Value(staticConstructor = "of") -public class AuctionConfigExtBidResponse { - - @JsonProperty("bidId") - String bidId; - - ObjectNode config; -} diff --git a/src/main/java/org/prebid/server/bidder/ix/model/response/IxBidResponse.java b/src/main/java/org/prebid/server/bidder/ix/model/response/IxBidResponse.java deleted file mode 100644 index 0bbbace5f81..00000000000 --- a/src/main/java/org/prebid/server/bidder/ix/model/response/IxBidResponse.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.prebid.server.bidder.ix.model.response; - -import com.iab.openrtb.response.SeatBid; -import lombok.Builder; -import lombok.Value; - -import java.util.List; - -@Builder(toBuilder = true) -@Value -public class IxBidResponse { - - String id; - - List seatbid; - - String bidid; - - String cur; - - String customdata; - - Integer nbr; - - IxExtBidResponse ext; -} diff --git a/src/main/java/org/prebid/server/bidder/ix/model/response/IxExtBidResponse.java b/src/main/java/org/prebid/server/bidder/ix/model/response/IxExtBidResponse.java deleted file mode 100644 index c586817df2c..00000000000 --- a/src/main/java/org/prebid/server/bidder/ix/model/response/IxExtBidResponse.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.prebid.server.bidder.ix.model.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Value; - -import java.util.List; - -@Value(staticConstructor = "of") -public class IxExtBidResponse { - - @JsonProperty("protectedAudienceAuctionConfigs") - List protectedAudienceAuctionConfigs; - -} diff --git a/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java b/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java index a82d6a72e63..adb208364ab 100644 --- a/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java +++ b/src/main/java/org/prebid/server/bidder/medianet/MedianetBidder.java @@ -3,24 +3,19 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; +import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; -import org.prebid.server.bidder.medianet.model.response.InterestGroupAuctionIntent; -import org.prebid.server.bidder.medianet.model.response.MedianetBidResponse; -import org.prebid.server.bidder.medianet.model.response.MedianetBidResponseExt; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.Result; import org.prebid.server.exception.PreBidException; import org.prebid.server.json.DecodeException; import org.prebid.server.json.JacksonMapper; import org.prebid.server.proto.openrtb.ext.response.BidType; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; @@ -29,7 +24,6 @@ import java.util.Collections; import java.util.List; import java.util.Objects; -import java.util.Optional; public class MedianetBidder implements Bidder { @@ -46,34 +40,23 @@ public Result>> makeHttpRequests(BidRequest bidRequ return Result.withValue(BidderUtil.defaultRequest(bidRequest, endpointUrl, mapper)); } - /** - * @deprecated for this bidder in favor of @link{makeBidderResponse} which supports additional response data - */ @Override - @Deprecated(forRemoval = true) public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { - return Result.withError(BidderError.generic("Deprecated adapter method invoked")); - } - - @Override - public final CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) { - final MedianetBidResponse bidResponse; + final BidResponse bidResponse; try { - bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), MedianetBidResponse.class); + bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); } catch (DecodeException e) { - return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage())); + return Result.withError(BidderError.badServerResponse(e.getMessage())); } final List errors = new ArrayList<>(); - return CompositeBidderResponse.builder() - .bids(extractBids(httpCall.getRequest().getPayload(), bidResponse, errors)) - .igi(extractIgi(bidResponse)) - .errors(errors) - .build(); + return Result.of(extractBids(httpCall.getRequest().getPayload(), bidResponse, errors), errors); } - private static List extractBids(BidRequest bidRequest, MedianetBidResponse bidResponse, + private static List extractBids(BidRequest bidRequest, + BidResponse bidResponse, List errors) { + if (bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid())) { return Collections.emptyList(); } @@ -135,18 +118,4 @@ private static BidType resolveBidTypeFromImpId(String impId, List imps) { return BidType.banner; } - - private static List extractIgi(MedianetBidResponse bidResponse) { - final List igs = Optional.ofNullable(bidResponse) - .map(MedianetBidResponse::getExt) - .map(MedianetBidResponseExt::getIgi) - .orElse(Collections.emptyList()) - .stream() - .map(InterestGroupAuctionIntent::getIgs) - .flatMap(Collection::stream) - .map(igiIgs -> ExtIgiIgs.builder().impId(igiIgs.getImpId()).config(igiIgs.getConfig()).build()) - .toList(); - - return igs.isEmpty() ? null : Collections.singletonList(ExtIgi.builder().igs(igs).build()); - } } diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionBuyer.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionBuyer.java deleted file mode 100644 index 04340fd8321..00000000000 --- a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionBuyer.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.prebid.server.bidder.medianet.model.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.Value; - -@Value -public class InterestGroupAuctionBuyer { - - String origin; - - @JsonProperty("maxbid") - Double maxBid; - - @JsonProperty("cur") - String currency; - - @JsonProperty("pbs") - String buyerSignals; - - @JsonProperty("ps") - ObjectNode prioritySignals; -} diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionIntent.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionIntent.java deleted file mode 100644 index e060c1fb5dd..00000000000 --- a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionIntent.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.prebid.server.bidder.medianet.model.response; - -import lombok.Builder; -import lombok.Value; - -import java.util.List; - -@Builder -@Value -public class InterestGroupAuctionIntent { - - List igb; - - List igs; -} diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionSeller.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionSeller.java deleted file mode 100644 index 15ae3ade13b..00000000000 --- a/src/main/java/org/prebid/server/bidder/medianet/model/response/InterestGroupAuctionSeller.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.prebid.server.bidder.medianet.model.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.Builder; -import lombok.Value; - -@Builder -@Value -public class InterestGroupAuctionSeller { - - @JsonProperty(value = "impid") - String impId; - - ObjectNode config; -} diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponse.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponse.java deleted file mode 100644 index 4677294e6fc..00000000000 --- a/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponse.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.prebid.server.bidder.medianet.model.response; - -import com.iab.openrtb.response.SeatBid; -import lombok.Builder; -import lombok.Value; - -import java.util.List; - -@Value -@Builder -public class MedianetBidResponse { - - String id; - - List seatbid; - - String bidid; - - String cur; - - String customdata; - - Integer nbr; - - MedianetBidResponseExt ext; -} diff --git a/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponseExt.java b/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponseExt.java deleted file mode 100644 index 2ce5775704c..00000000000 --- a/src/main/java/org/prebid/server/bidder/medianet/model/response/MedianetBidResponseExt.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.prebid.server.bidder.medianet.model.response; - -import lombok.Value; - -import java.util.List; - -@Value(staticConstructor = "of") -public class MedianetBidResponseExt { - - List igi; -} diff --git a/src/main/java/org/prebid/server/bidder/model/BidderSeatBid.java b/src/main/java/org/prebid/server/bidder/model/BidderSeatBid.java index 8022b8667f1..4b760c40cd5 100644 --- a/src/main/java/org/prebid/server/bidder/model/BidderSeatBid.java +++ b/src/main/java/org/prebid/server/bidder/model/BidderSeatBid.java @@ -4,8 +4,6 @@ import lombok.Value; import org.prebid.server.bidder.Bidder; import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import java.util.Collections; import java.util.List; @@ -54,13 +52,6 @@ public class BidderSeatBid { @Builder.Default List warnings = Collections.emptyList(); - @Deprecated - @Builder.Default - List fledgeAuctionConfigs = Collections.emptyList(); - - @Builder.Default - List igi = Collections.emptyList(); - public BidderSeatBid with(List bids) { return toBuilder().bids(bids).build(); } diff --git a/src/main/java/org/prebid/server/bidder/model/BidderSeatBidInfo.java b/src/main/java/org/prebid/server/bidder/model/BidderSeatBidInfo.java index 38c9f86433c..9186e03f04b 100644 --- a/src/main/java/org/prebid/server/bidder/model/BidderSeatBidInfo.java +++ b/src/main/java/org/prebid/server/bidder/model/BidderSeatBidInfo.java @@ -3,8 +3,6 @@ import lombok.Value; import org.prebid.server.auction.model.BidInfo; import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import java.util.List; @@ -19,18 +17,11 @@ public class BidderSeatBidInfo { List warnings; - @Deprecated(forRemoval = true) - List fledgeAuctionConfigs; - - List igi; - public BidderSeatBidInfo with(List bids) { return BidderSeatBidInfo.of( bids, this.httpCalls, this.errors, - this.warnings, - this.fledgeAuctionConfigs, - this.igi); + this.warnings); } } diff --git a/src/main/java/org/prebid/server/bidder/model/CompositeBidderResponse.java b/src/main/java/org/prebid/server/bidder/model/CompositeBidderResponse.java deleted file mode 100644 index 75a71e0864a..00000000000 --- a/src/main/java/org/prebid/server/bidder/model/CompositeBidderResponse.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.prebid.server.bidder.model; - -import lombok.Builder; -import lombok.Value; -import org.prebid.server.bidder.Bidder; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; - -import java.util.Collections; -import java.util.List; - -/** - * Composite bidder response (bids + other data) returned by a {@link Bidder}. - */ -@Value -@Builder(toBuilder = true) -public class CompositeBidderResponse { - - @Builder.Default - List bids = Collections.emptyList(); - - @Builder.Default - List errors = Collections.emptyList(); - - /** - * FLEDGE interest group bids passback - */ - List fledgeAuctionConfigs; - - List igi; - - public static CompositeBidderResponse empty() { - return builder().build(); - } - - public static CompositeBidderResponse withError(BidderError error) { - return builder().errors(Collections.singletonList(error)).build(); - } -} diff --git a/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java b/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java index 00a8c8dc3fb..6483b491a61 100644 --- a/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java +++ b/src/main/java/org/prebid/server/bidder/openx/OpenxBidder.java @@ -5,6 +5,7 @@ import com.iab.openrtb.request.BidRequest; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; +import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -13,13 +14,10 @@ import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.Result; import org.prebid.server.bidder.openx.model.OpenxImpType; import org.prebid.server.bidder.openx.proto.OpenxBidExt; -import org.prebid.server.bidder.openx.proto.OpenxBidResponse; -import org.prebid.server.bidder.openx.proto.OpenxBidResponseExt; import org.prebid.server.bidder.openx.proto.OpenxRequestExt; import org.prebid.server.bidder.openx.proto.OpenxVideoExt; import org.prebid.server.exception.PreBidException; @@ -33,8 +31,6 @@ import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; @@ -45,7 +41,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -90,29 +85,15 @@ public Result>> makeHttpRequests(BidRequest bidRequ } @Override - public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) { + public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { try { - final OpenxBidResponse bidResponse = mapper.decodeValue( - httpCall.getResponse().getBody(), OpenxBidResponse.class); - - return CompositeBidderResponse.builder() - .bids(extractBids(bidRequest, bidResponse)) - .igi(extractIgi(bidResponse)) - .build(); + final BidResponse bidResponse = mapper.decodeValue(httpCall.getResponse().getBody(), BidResponse.class); + return Result.withValues(extractBids(bidRequest, bidResponse)); } catch (DecodeException e) { - return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage())); + return Result.withError(BidderError.badServerResponse(e.getMessage())); } } - /** - * @deprecated for this bidder in favor of @link{makeBidderResponse} which supports additional response data - */ - @Override - @Deprecated(forRemoval = true) - public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { - return Result.withError(BidderError.generic("Deprecated adapter method invoked")); - } - private List makeRequests( BidRequest bidRequest, List bannerImps, @@ -206,9 +187,9 @@ private BidRequest createSingleRequest(List imps, BidRequest bidRequest, Li return CollectionUtils.isNotEmpty(processedImps) ? bidRequest.toBuilder() - .imp(processedImps) - .ext(makeReqExt(imps.getFirst())) - .build() + .imp(processedImps) + .ext(makeReqExt(imps.getFirst())) + .build() : null; } @@ -273,13 +254,13 @@ private ObjectNode makeImpExt(ObjectNode impExt, boolean addCustomParams) { return openxImpExt; } - private List extractBids(BidRequest bidRequest, OpenxBidResponse bidResponse) { + private List extractBids(BidRequest bidRequest, BidResponse bidResponse) { return bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid()) ? Collections.emptyList() : bidsFromResponse(bidRequest, bidResponse); } - private List bidsFromResponse(BidRequest bidRequest, OpenxBidResponse bidResponse) { + private List bidsFromResponse(BidRequest bidRequest, BidResponse bidResponse) { final Map impIdToBidType = impIdToBidType(bidRequest); final String bidCurrency = StringUtils.isNotBlank(bidResponse.getCur()) @@ -325,19 +306,6 @@ private static BidType getBidType(Bid bid, Map impIdToBidType) }; } - private static List extractIgi(OpenxBidResponse bidResponse) { - final List igs = Optional.ofNullable(bidResponse) - .map(OpenxBidResponse::getExt) - .map(OpenxBidResponseExt::getFledgeAuctionConfigs) - .orElse(Collections.emptyMap()) - .entrySet() - .stream() - .map(ext -> ExtIgiIgs.builder().impId(ext.getKey()).config(ext.getValue()).build()) - .toList(); - - return igs.isEmpty() ? null : Collections.singletonList(ExtIgi.builder().igs(igs).build()); - } - private ObjectNode getBidExt(Bid bid) { final ObjectNode ext = bid.getExt(); if (ext == null) { diff --git a/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponse.java b/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponse.java deleted file mode 100644 index 9be5a61e30d..00000000000 --- a/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponse.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.prebid.server.bidder.openx.proto; - -import com.iab.openrtb.response.SeatBid; -import lombok.Builder; -import lombok.Value; - -import java.util.List; - -@Value -@Builder -public class OpenxBidResponse { - - String id; - - List seatbid; - - String cur; - - Integer nbr; - - OpenxBidResponseExt ext; -} diff --git a/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponseExt.java b/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponseExt.java deleted file mode 100644 index c52ad9ef9c4..00000000000 --- a/src/main/java/org/prebid/server/bidder/openx/proto/OpenxBidResponseExt.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.prebid.server.bidder.openx.proto; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.Value; - -import java.util.Map; - -@Value(staticConstructor = "of") -public class OpenxBidResponseExt { - - @JsonProperty("fledge_auction_configs") - Map fledgeAuctionConfigs; -} diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java index 7b8be79fa7d..16c3f27e2f5 100644 --- a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java @@ -11,6 +11,7 @@ import com.iab.openrtb.request.Publisher; import com.iab.openrtb.request.Site; import com.iab.openrtb.response.Bid; +import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; @@ -23,7 +24,6 @@ import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.Result; import org.prebid.server.bidder.pubmatic.model.request.PubmaticBidderImpExt; @@ -31,8 +31,6 @@ import org.prebid.server.bidder.pubmatic.model.request.PubmaticMarketplace; import org.prebid.server.bidder.pubmatic.model.request.PubmaticWrapper; import org.prebid.server.bidder.pubmatic.model.response.PubmaticBidExt; -import org.prebid.server.bidder.pubmatic.model.response.PubmaticBidResponse; -import org.prebid.server.bidder.pubmatic.model.response.PubmaticExtBidResponse; import org.prebid.server.bidder.pubmatic.model.response.VideoCreativeInfo; import org.prebid.server.exception.PreBidException; import org.prebid.server.json.DecodeException; @@ -48,8 +46,6 @@ import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; import org.prebid.server.util.StreamUtil; @@ -79,7 +75,6 @@ public class PubmaticBidder implements Bidder { private static final String ACAT_EXT_REQUEST = "acat"; private static final String WRAPPER_EXT_REQUEST = "wrapper"; private static final String BIDDER_NAME = "pubmatic"; - private static final String AE = "ae"; private static final String GP_ID = "gpid"; private static final String SKADN = "skadn"; private static final String IMP_EXT_PBADSLOT = "pbadslot"; @@ -182,8 +177,8 @@ private List extractAcat(JsonNode bidderParams) { return acatNode != null && acatNode.isArray() ? Arrays.stream(mapper.mapper().convertValue(acatNode, String[].class)) - .map(StringUtils::stripToEmpty) - .toList() + .map(StringUtils::stripToEmpty) + .toList() : null; } @@ -330,9 +325,6 @@ private ObjectNode makeKeywords(PubmaticBidderImpExt impExt) { putExtBidderKeywords(keywordsNode, extBidder); putExtDataKeywords(keywordsNode, impExt.getData(), extBidder.getDctr()); - if (impExt.getAe() != null) { - keywordsNode.put(AE, impExt.getAe()); - } if (impExt.getGpId() != null) { keywordsNode.put(GP_ID, impExt.getGpId()); } @@ -393,9 +385,9 @@ private static String buildDctrPart(Map.Entry dctrPart) { : null; final String arrayAsString = valueAsString == null && value.isArray() ? StreamUtil.asStream(value.elements()) - .map(JsonNode::asText) - .map(StringUtils::trim) - .collect(Collectors.joining(",")) + .map(JsonNode::asText) + .map(StringUtils::trim) + .collect(Collectors.joining(",")) : null; final String valuePart = ObjectUtils.firstNonNull(valueAsString, arrayAsString); @@ -417,8 +409,8 @@ private String extractAdUnitCode(ObjectNode extData) { return AD_SERVER_GAM.equals(adServerName) && StringUtils.isNotEmpty(adServerAdSlot) ? adServerAdSlot : Optional.ofNullable(extData.get(IMP_EXT_PBADSLOT)) - .map(JsonNode::asText) - .orElse(null); + .map(JsonNode::asText) + .orElse(null); } private PubmaticExtDataAdServer extractAdServer(ObjectNode extData) { @@ -492,16 +484,16 @@ private BidRequest modifyBidRequest(BidRequest request, private static Site modifySite(Site site, String publisherId) { return publisherId != null && site != null ? site.toBuilder() - .publisher(modifyPublisher(site.getPublisher(), publisherId)) - .build() + .publisher(modifyPublisher(site.getPublisher(), publisherId)) + .build() : site; } private static App modifyApp(App app, String publisherId) { return publisherId != null && app != null ? app.toBuilder() - .publisher(modifyPublisher(app.getPublisher(), publisherId)) - .build() + .publisher(modifyPublisher(app.getPublisher(), publisherId)) + .build() : app; } @@ -536,39 +528,25 @@ private HttpRequest makeHttpRequest(BidRequest request) { return BidderUtil.defaultRequest(request, endpointUrl, mapper); } - /** - * @deprecated for this bidder in favor of @link{makeBidderResponse} which supports additional response data - */ @Override - @Deprecated(forRemoval = true) public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { - return Result.withError(BidderError.generic("Deprecated adapter method invoked")); - } - - @Override - public CompositeBidderResponse makeBidderResponse(BidderCall httpCall, BidRequest bidRequest) { try { - final PubmaticBidResponse bidResponse = mapper.decodeValue( - httpCall.getResponse().getBody(), PubmaticBidResponse.class); final List errors = new ArrayList<>(); - - return CompositeBidderResponse.builder() - .bids(extractBids(bidResponse, errors)) - .igi(extractIgi(bidResponse)) - .errors(errors) - .build(); + final BidResponse bidResponse = mapper.decodeValue( + httpCall.getResponse().getBody(), BidResponse.class); + return Result.of(extractBids(bidResponse, errors), errors); } catch (DecodeException | PreBidException e) { - return CompositeBidderResponse.withError(BidderError.badServerResponse(e.getMessage())); + return Result.withError(BidderError.badServerResponse(e.getMessage())); } } - private List extractBids(PubmaticBidResponse bidResponse, List bidderErrors) { + private List extractBids(BidResponse bidResponse, List bidderErrors) { return bidResponse == null || CollectionUtils.isEmpty(bidResponse.getSeatbid()) ? Collections.emptyList() : bidsFromResponse(bidResponse, bidderErrors); } - private List bidsFromResponse(PubmaticBidResponse bidResponse, List bidderErrors) { + private List bidsFromResponse(BidResponse bidResponse, List bidderErrors) { return bidResponse.getSeatbid().stream() .filter(Objects::nonNull) .map(SeatBid::getBid) @@ -686,17 +664,4 @@ private static Integer getDealPriority(PubmaticBidExt bidExt) { .map(PubmaticBidExt::getPrebidDealPriority) .orElse(null); } - - private static List extractIgi(PubmaticBidResponse bidResponse) { - final List igs = Optional.ofNullable(bidResponse) - .map(PubmaticBidResponse::getExt) - .map(PubmaticExtBidResponse::getFledgeAuctionConfigs) - .orElse(Collections.emptyMap()) - .entrySet() - .stream() - .map(config -> ExtIgiIgs.builder().impId(config.getKey()).config(config.getValue()).build()) - .toList(); - - return igs.isEmpty() ? null : Collections.singletonList(ExtIgi.builder().igs(igs).build()); - } } diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java b/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java index 0a248ff8a5b..ef58f131a04 100644 --- a/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java +++ b/src/main/java/org/prebid/server/bidder/pubmatic/model/request/PubmaticBidderImpExt.java @@ -12,8 +12,6 @@ public class PubmaticBidderImpExt { ObjectNode data; - Integer ae; - @JsonProperty("gpid") String gpId; diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticBidResponse.java b/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticBidResponse.java deleted file mode 100644 index b421e7f1b4a..00000000000 --- a/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticBidResponse.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.prebid.server.bidder.pubmatic.model.response; - -import com.iab.openrtb.response.SeatBid; -import lombok.Builder; -import lombok.Value; - -import java.util.List; - -@Builder(toBuilder = true) -@Value -public class PubmaticBidResponse { - - String id; - - List seatbid; - - String bidid; - - String cur; - - String customdata; - - Integer nbr; - - PubmaticExtBidResponse ext; - -} diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticExtBidResponse.java b/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticExtBidResponse.java deleted file mode 100644 index d2c531a23b5..00000000000 --- a/src/main/java/org/prebid/server/bidder/pubmatic/model/response/PubmaticExtBidResponse.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.prebid.server.bidder.pubmatic.model.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.Value; - -import java.util.Map; - -@Value(staticConstructor = "of") -public class PubmaticExtBidResponse { - - @JsonProperty("fledge_auction_configs") - Map fledgeAuctionConfigs; - -} diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/ExtPrebid.java b/src/main/java/org/prebid/server/proto/openrtb/ext/ExtPrebid.java index 9b656fc180c..b2203113322 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/ExtPrebid.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/ExtPrebid.java @@ -1,10 +1,7 @@ package org.prebid.server.proto.openrtb.ext; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Value; import org.prebid.server.bidder.Bidder; -import org.prebid.server.proto.openrtb.ext.request.ExtImpAuctionEnvironment; /** * Defines the contract for any extension that has "prebid" and "bidder" fields. @@ -25,12 +22,4 @@ public class ExtPrebid { * Bidder implementations may safely assume that this extension has been validated by their parameters' schema. */ B bidder; - - @JsonProperty("ae") - @JsonInclude(value = JsonInclude.Include.NON_DEFAULT) - ExtImpAuctionEnvironment auctionEnvironment; - - public static ExtPrebid of(P prebid, B bidder) { - return of(prebid, bidder, null); - } } diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/ExtImpAuctionEnvironment.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/ExtImpAuctionEnvironment.java deleted file mode 100644 index d5249c3d9b1..00000000000 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/ExtImpAuctionEnvironment.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.prebid.server.proto.openrtb.ext.request; - -import com.fasterxml.jackson.annotation.JsonFormat; - -/** - * AuctionEnvironment is a Google Privacy Sandbox flag indicating where the auction may take place - */ -@JsonFormat(shape = JsonFormat.Shape.NUMBER_INT) -public enum ExtImpAuctionEnvironment { - - /** - * 0 Standard server-side auction - */ - SERVER_SIDE_AUCTION, - - /** - * 1 On-device interest group auction (FLEDGE) - */ - ON_DEVICE_IG_AUCTION_FLEDGE, - - /** - * 2 Server-side with interest group simulation - */ - SERVER_SIDE_WITH_IG_SIMULATION -} diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/request/ExtRequestPrebid.java b/src/main/java/org/prebid/server/proto/openrtb/ext/request/ExtRequestPrebid.java index 1380e543991..50b26e926f9 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/request/ExtRequestPrebid.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/request/ExtRequestPrebid.java @@ -6,7 +6,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Builder; import lombok.Value; -import org.prebid.server.auction.model.PaaFormat; import org.prebid.server.floors.model.PriceFloorRules; import org.prebid.server.json.deserializer.IntegerFlagDeserializer; @@ -190,12 +189,6 @@ public class ExtRequestPrebid { */ ExtRequestPrebidSdk sdk; - /** - * Defines the contract for bidrequest.ext.prebid.paaformat - */ - @JsonProperty("paaformat") - PaaFormat paaFormat; - @JsonProperty("alternatebiddercodes") ExtRequestPrebidAlternateBidderCodes alternateBidderCodes; diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponse.java b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponse.java index 6f4b3904fd7..115ce7b3ff9 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponse.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponse.java @@ -48,11 +48,6 @@ public class ExtBidResponse { */ Map usersync; - /** - * Defines the contract for bidresponse.ext.igi - */ - List igi; - /** * Defines the contract for bidresponse.ext.prebid */ diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponseFledge.java b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponseFledge.java deleted file mode 100644 index 452c3feb0c4..00000000000 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponseFledge.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.prebid.server.proto.openrtb.ext.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Value; - -import java.util.List; - -/** - * Defines the contract for bidresponse.ext.prebid.fledge (.auctionconfigs[]) - */ -@Value(staticConstructor = "of") -public class ExtBidResponseFledge { - - @JsonProperty("auctionconfigs") - List auctionConfigs; -} diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponsePrebid.java b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponsePrebid.java index fbf368e5e97..4a9fbf0dacd 100644 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponsePrebid.java +++ b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtBidResponsePrebid.java @@ -25,11 +25,6 @@ public class ExtBidResponsePrebid { ExtAnalytics analytics; - /** - * FLEDGE response as bidresponse.ext.prebid.fledge.auctionconfigs[] - */ - ExtBidResponseFledge fledge; - /** * Additional targeting key/values for the bid response (only used for AMP) * Set targeting options here that will occur in the bidResponse no matter if diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgi.java b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgi.java deleted file mode 100644 index a68ed9cdf6a..00000000000 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgi.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.prebid.server.proto.openrtb.ext.response; - -import lombok.Builder; -import lombok.Value; - -import java.util.List; - -/** - * Defines the contract for bidresponse.ext.igi - */ -@Builder(toBuilder = true) -@Value -public class ExtIgi { - - String impid; - - List igb; - - List igs; -} diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgb.java b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgb.java deleted file mode 100644 index aca3758c7aa..00000000000 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgb.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.prebid.server.proto.openrtb.ext.response; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.Builder; -import lombok.Value; - -@Value -@Builder -public class ExtIgiIgb { - - String origin; - - Double maxbid; - - @Builder.Default - String cur = "USD"; - - JsonNode pbs; - - ObjectNode ps; -} diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgs.java b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgs.java deleted file mode 100644 index 305d211a4b5..00000000000 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgs.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.prebid.server.proto.openrtb.ext.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.Builder; -import lombok.Value; - -@Builder(toBuilder = true) -@Value -public class ExtIgiIgs { - - @JsonProperty("impid") - String impId; - - ObjectNode config; - - ExtIgiIgsExt ext; -} diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgsExt.java b/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgsExt.java deleted file mode 100644 index 979b7fe6e13..00000000000 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/response/ExtIgiIgsExt.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.prebid.server.proto.openrtb.ext.response; - -import lombok.Value; - -@Value(staticConstructor = "of") -public class ExtIgiIgsExt { - - String bidder; - - String adapter; -} diff --git a/src/main/java/org/prebid/server/proto/openrtb/ext/response/FledgeAuctionConfig.java b/src/main/java/org/prebid/server/proto/openrtb/ext/response/FledgeAuctionConfig.java deleted file mode 100644 index c0d2c6730f0..00000000000 --- a/src/main/java/org/prebid/server/proto/openrtb/ext/response/FledgeAuctionConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.prebid.server.proto.openrtb.ext.response; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.node.ObjectNode; -import lombok.Builder; -import lombok.Value; - -/** - * Defines the contract for bidresponse.ext.prebid.fledge.auctionconfigs[] elements - */ -@Value -@Builder(toBuilder = true) -public class FledgeAuctionConfig { - - @JsonProperty("impid") - String impId; - - String bidder; - - String adapter; - - ObjectNode config; -} diff --git a/src/main/java/org/prebid/server/settings/model/AccountAuctionConfig.java b/src/main/java/org/prebid/server/settings/model/AccountAuctionConfig.java index c78bd14770c..06758d4da8d 100644 --- a/src/main/java/org/prebid/server/settings/model/AccountAuctionConfig.java +++ b/src/main/java/org/prebid/server/settings/model/AccountAuctionConfig.java @@ -5,7 +5,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.Builder; import lombok.Value; -import org.prebid.server.auction.model.PaaFormat; import org.prebid.server.spring.config.bidder.model.MediaType; import java.util.Map; @@ -54,9 +53,6 @@ public class AccountAuctionConfig { @JsonProperty("privacysandbox") AccountPrivacySandboxConfig privacySandbox; - @JsonProperty("paaformat") - PaaFormat paaFormat; - AccountCacheConfig cache; AccountBidRankingConfig ranking; diff --git a/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java b/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java index 337363fcf02..878321410cf 100644 --- a/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/ServiceConfiguration.java @@ -891,7 +891,6 @@ CacheDefaultTtlProperties cacheDefaultTtlProperties( @Bean BidResponseCreator bidResponseCreator( - @Value("${logging.sampling-rate:0.01}") double logSamplingRate, CoreCacheService coreCacheService, BidderCatalog bidderCatalog, VastModifier vastModifier, @@ -905,13 +904,11 @@ BidResponseCreator bidResponseCreator( @Value("${auction.enforce-random-bid-id:false}") boolean enforceRandomBidId, Clock clock, JacksonMapper mapper, - Metrics metrics, @Value("${cache.banner-ttl-seconds:#{null}}") Integer bannerCacheTtl, @Value("${cache.video-ttl-seconds:#{null}}") Integer videoCacheTtl, CacheDefaultTtlProperties cacheDefaultTtlProperties) { return new BidResponseCreator( - logSamplingRate, coreCacheService, bidderCatalog, vastModifier, @@ -926,7 +923,6 @@ BidResponseCreator bidResponseCreator( enforceRandomBidId, clock, mapper, - metrics, CacheTtl.of(bannerCacheTtl, videoCacheTtl), cacheDefaultTtlProperties); } diff --git a/src/test/java/org/prebid/server/auction/BidResponseCreatorTest.java b/src/test/java/org/prebid/server/auction/BidResponseCreatorTest.java index de671b88440..7d8d939600f 100644 --- a/src/test/java/org/prebid/server/auction/BidResponseCreatorTest.java +++ b/src/test/java/org/prebid/server/auction/BidResponseCreatorTest.java @@ -45,7 +45,6 @@ import org.prebid.server.auction.model.CategoryMappingResult; import org.prebid.server.auction.model.ImpRejection; import org.prebid.server.auction.model.MultiBidConfig; -import org.prebid.server.auction.model.PaaFormat; import org.prebid.server.auction.model.TargetingInfo; import org.prebid.server.auction.model.TimeoutContext; import org.prebid.server.auction.model.debug.DebugContext; @@ -69,8 +68,6 @@ import org.prebid.server.hooks.execution.v1.bidder.AllProcessedBidResponsesPayloadImpl; import org.prebid.server.hooks.execution.v1.bidder.BidderResponsePayloadImpl; import org.prebid.server.identity.IdGenerator; -import org.prebid.server.metric.MetricName; -import org.prebid.server.metric.Metrics; import org.prebid.server.proto.openrtb.ext.ExtIncludeBrandCategory; import org.prebid.server.proto.openrtb.ext.request.ExtDeal; import org.prebid.server.proto.openrtb.ext.request.ExtDealLine; @@ -91,18 +88,12 @@ import org.prebid.server.proto.openrtb.ext.response.CacheAsset; import org.prebid.server.proto.openrtb.ext.response.Events; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid; -import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; import org.prebid.server.proto.openrtb.ext.response.ExtBidResponse; -import org.prebid.server.proto.openrtb.ext.response.ExtBidResponseFledge; import org.prebid.server.proto.openrtb.ext.response.ExtBidResponsePrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidderError; import org.prebid.server.proto.openrtb.ext.response.ExtDebugTrace; import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgb; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgsExt; import org.prebid.server.proto.openrtb.ext.response.ExtResponseCache; import org.prebid.server.proto.openrtb.ext.response.ExtResponseDebug; import org.prebid.server.proto.openrtb.ext.response.ExtTraceActivityInfrastructure; @@ -110,7 +101,6 @@ import org.prebid.server.proto.openrtb.ext.response.ExtTraceActivityInvocationDefaultResult; import org.prebid.server.proto.openrtb.ext.response.ExtTraceActivityInvocationResult; import org.prebid.server.proto.openrtb.ext.response.ExtTraceActivityRule; -import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import org.prebid.server.proto.openrtb.ext.response.seatnonbid.NonBid; import org.prebid.server.proto.openrtb.ext.response.seatnonbid.SeatNonBid; import org.prebid.server.settings.model.Account; @@ -206,8 +196,6 @@ public class BidResponseCreatorTest extends VertxTest { private CacheTtl mediaTypeCacheTtl; @Mock(strictness = LENIENT) private CacheDefaultTtlProperties cacheDefaultProperties; - @Mock(strictness = LENIENT) - private Metrics metrics; @Spy private WinningBidComparatorFactory winningBidComparatorFactory; @@ -1970,7 +1958,6 @@ public void shouldTruncateTargetingKeywordsByGlobalConfig() { contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); target = new BidResponseCreator( - 0, coreCacheService, bidderCatalog, vastModifier, @@ -1985,7 +1972,6 @@ public void shouldTruncateTargetingKeywordsByGlobalConfig() { false, clock, jacksonMapper, - metrics, mediaTypeCacheTtl, cacheDefaultProperties); @@ -3109,7 +3095,7 @@ public void shouldPopulateBidExpBasedOnCachedResult() { // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(10).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(20).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, banner, "seat", "USD")), 100)); @@ -3612,7 +3598,7 @@ public void shouldThrowExceptionWhenBidAdmIsParsedButImpNativeNotFound() throws assertThat(bidResponse.getExt()) .extracting(ExtBidResponse::getErrors) .extracting(error -> error.get("seat")) - .extracting(extBidderErrors -> extBidderErrors.getFirst()) + .extracting(List::getFirst) .isEqualTo(ExtBidderError.of(3, "Could not find native imp")); } @@ -3652,7 +3638,7 @@ public void shouldThrowExceptionWhenNativeRequestIsInvalid() throws JsonProcessi assertThat(bidResponse.getExt()) .extracting(ExtBidResponse::getErrors) .extracting(error -> error.get("seat")) - .extracting(extBidderErrors -> extBidderErrors.getFirst()) + .extracting(List::getFirst) .isEqualTo(ExtBidderError.of(3, "No content to map due to end-of-input\n" + " at [Source: (String)\"\"; line: 1, column: 0]")); } @@ -3690,9 +3676,9 @@ public void shouldPopulateBidAdmIfResponseAssetsIsNull() throws JsonProcessingEx // then assertThat(bidResponse) .extracting(BidResponse::getSeatbid) - .extracting(seatBids -> seatBids.getFirst()) + .extracting(List::getFirst) .extracting(SeatBid::getBid) - .extracting(bids -> bids.getFirst()) + .extracting(List::getFirst) .extracting(Bid::getAdm) .isEqualTo(adm); } @@ -3863,579 +3849,6 @@ public void shouldCopyImpExtPrebidPassThroughToResponseBidExtPrebidPassThroughWh .containsExactly(TextNode.valueOf("passthrough")); } - @Test - public void shouldAddExtPrebidFledgeIfAvailable() { - // given - final Imp imp = givenImp("i1").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), identity(), imp); - final FledgeAuctionConfig fledgeAuctionConfig = givenFledgeAuctionConfig("i1"); - final Bid bid = Bid.builder() - .id("bidId1") - .price(BigDecimal.valueOf(2.37)) - .impid("i1") - .ext(mapper.createObjectNode().set("prebid", mapper.valueToTree(ExtBidPrebid.builder() - .meta(ExtBidPrebidMeta.builder().adapterCode("adapter1").build()) - .build()))) - .build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .fledgeAuctionConfigs(List.of(fledgeAuctionConfig)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt().getPrebid().getFledge().getAuctionConfigs()) - .isNotEmpty() - .first() - .usingRecursiveComparison() - .isEqualTo(fledgeAuctionConfig.toBuilder() - .bidder("seat") - .adapter("adapter1") - .build()); - } - - @Test - public void shouldAddExtIgiIfAvailableAndExtRequestPrebidPaaFormatIsIab() { - // given - final Imp imp = givenImp("i1").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), ext -> ext.paaFormat(PaaFormat.IAB), imp); - final ExtIgi igi = ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder().impId("impId").config(mapper.createObjectNode()).build())) - .build(); - - final Bid bid = Bid.builder() - .id("bidId1") - .price(BigDecimal.valueOf(2.37)) - .impid("i1") - .ext(mapper.createObjectNode().set("prebid", mapper.valueToTree(ExtBidPrebid.builder() - .meta(ExtBidPrebidMeta.builder().adapterCode("adapter1").build()) - .build()))) - .build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt().getIgi()).containsExactly( - ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder() - .impId("impId") - .config(mapper.createObjectNode()) - .ext(ExtIgiIgsExt.of("seat", "adapter1")) - .build())) - .build()); - } - - @Test - public void shouldAddExtPrebidFledgeIfAvailableAndExtRequestPrebidPaaFormatIsOriginal() { - // given - final Imp imp = givenImp("impId").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), ext -> ext.paaFormat(PaaFormat.ORIGINAL), imp); - final ExtIgi igi = ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder().impId("impId").config(mapper.createObjectNode()).build())) - .build(); - - final Bid bid = Bid.builder() - .id("bidId1") - .price(BigDecimal.valueOf(2.37)) - .ext(mapper.createObjectNode().set("prebid", mapper.valueToTree(ExtBidPrebid.builder() - .meta(ExtBidPrebidMeta.builder().adapterCode("adapter1").build()) - .build()))) - .impid("impId") - .build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getPrebid) - .extracting(ExtBidResponsePrebid::getFledge) - .extracting(ExtBidResponseFledge::getAuctionConfigs) - .asList() - .containsExactly( - FledgeAuctionConfig.builder() - .impId("impId") - .config(mapper.createObjectNode()) - .bidder("seat") - .adapter("adapter1") - .build()); - } - - @Test - public void shouldAddExtIgiIfAvailableAndExtRequestPrebidPaaFormatIsAbsentAndAccountConfigPaaFormatSetToIab() { - // given - final Imp imp = givenImp("impId").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), identity(), imp); - final ExtIgi igi = ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder().impId("impId").config(mapper.createObjectNode()).build())) - .build(); - - final Bid bid = Bid.builder() - .id("bidId1") - .price(BigDecimal.valueOf(2.37)) - .impid("impId") - .ext(mapper.createObjectNode().set("prebid", mapper.valueToTree(ExtBidPrebid.builder() - .meta(ExtBidPrebidMeta.builder().adapterCode("adapter1").build()) - .build()))) - .build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder - .auctionParticipations(toAuctionParticipant(bidderResponses)) - .account(Account.builder() - .auction(AccountAuctionConfig.builder().paaFormat(PaaFormat.IAB).build()) - .build())); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt().getIgi()).containsExactly( - ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder() - .impId("impId") - .config(mapper.createObjectNode()) - .ext(ExtIgiIgsExt.of("seat", "adapter1")) - .build())) - .build()); - } - - @Test - public void shouldAddExtPrebidFledgeIfAvailableAndRequestPaaFormatIsAbsentAndAccountConfigPaaFormatSetToOriginal() { - // given - final Imp imp = givenImp("impId").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), identity(), imp); - final ExtIgi igi = ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder().impId("impId").config(mapper.createObjectNode()).build())) - .build(); - - final Bid bid = Bid.builder() - .id("bidId1") - .price(BigDecimal.valueOf(2.37)) - .ext(mapper.createObjectNode().set("prebid", mapper.valueToTree(ExtBidPrebid.builder() - .meta(ExtBidPrebidMeta.builder().adapterCode("adapter1").build()) - .build()))) - .impid("impId") - .build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder - .auctionParticipations(toAuctionParticipant(bidderResponses)) - .account(Account.builder() - .auction(AccountAuctionConfig.builder().paaFormat(PaaFormat.ORIGINAL).build()) - .build())); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getPrebid) - .extracting(ExtBidResponsePrebid::getFledge) - .extracting(ExtBidResponseFledge::getAuctionConfigs) - .asList() - .containsExactly( - FledgeAuctionConfig.builder() - .impId("impId") - .config(mapper.createObjectNode()) - .bidder("seat") - .adapter("adapter1") - .build()); - } - - @Test - public void shouldDefaultToOriginalPaaFormat() { - // given - final Imp imp = givenImp("impId").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), identity(), imp); - final ExtIgi igi = ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder().impId("impId").config(mapper.createObjectNode()).build())) - .build(); - - final Bid bid = Bid.builder() - .id("bidId1") - .price(BigDecimal.valueOf(2.37)) - .impid("impId") - .ext(mapper.createObjectNode().set("prebid", mapper.valueToTree(ExtBidPrebid.builder() - .meta(ExtBidPrebidMeta.builder().adapterCode("adapter1").build()) - .build()))) - .build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getPrebid) - .extracting(ExtBidResponsePrebid::getFledge) - .extracting(ExtBidResponseFledge::getAuctionConfigs) - .asList() - .containsExactly( - FledgeAuctionConfig.builder() - .impId("impId") - .config(mapper.createObjectNode()) - .bidder("seat") - .adapter("adapter1") - .build()); - } - - @Test - public void shouldDropExtIgiIgbIfAvailableAndExtIgiImpIdIsAbsent() { - // given - final Imp imp = givenImp("impId").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), ext -> ext.paaFormat(PaaFormat.IAB), imp); - final ExtIgi igi = ExtIgi.builder() - .igs(singletonList(ExtIgiIgs.builder().impId("impId").config(mapper.createObjectNode()).build())) - .igb(singletonList(ExtIgiIgb.builder().build())) - .build(); - - final Bid bid = Bid.builder() - .id("bidId1") - .price(BigDecimal.valueOf(2.37)) - .impid("impId") - .ext(mapper.createObjectNode().set("prebid", mapper.valueToTree(ExtBidPrebid.builder() - .meta(ExtBidPrebidMeta.builder().adapterCode("adapter1").build()) - .build()))) - .build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder - .debugContext(DebugContext.of(true, false, null)) - .auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getIgi) - .asList() - .containsExactly( - ExtIgi.builder() - .igs(singletonList( - ExtIgiIgs.builder() - .impId("impId") - .config(mapper.createObjectNode()) - .ext(ExtIgiIgsExt.of("seat", "adapter1")) - .build())) - .build()); - - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getWarnings) - .extracting(warnings -> warnings.get(PREBID)) - .asList() - .containsExactly( - ExtBidderError.of( - BidderError.Type.generic.getCode(), - "ExtIgi with absent impId from bidder: seat")); - verify(metrics).updateAlertsMetrics(MetricName.general); - } - - @Test - public void shouldDropExtIgiIgsIfAvailableAndExtIgiIgsImpIdIsAbsent() { - // given - final Imp imp = givenImp("impId").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), ext -> ext.paaFormat(PaaFormat.IAB), imp); - final ExtIgi igi = ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder().config(mapper.createObjectNode()).build())) - .igb(singletonList(ExtIgiIgb.builder().build())) - .build(); - - final Bid bid = Bid.builder() - .id("bidId1") - .price(BigDecimal.valueOf(2.37)) - .ext(mapper.createObjectNode().set("prebid", mapper.valueToTree(ExtBidPrebid.builder() - .meta(ExtBidPrebidMeta.builder().adapterCode("adapter1").build()) - .build()))) - .impid("impId").build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder - .debugContext(DebugContext.of(true, false, null)) - .auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getIgi) - .asList() - .containsExactly( - ExtIgi.builder() - .impid("impId") - .igb(singletonList(ExtIgiIgb.builder().build())) - .build()); - - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getWarnings) - .extracting(warnings -> warnings.get(PREBID)) - .asList() - .containsExactly( - ExtBidderError.of( - BidderError.Type.generic.getCode(), - "ExtIgiIgs with absent impId from bidder: seat")); - verify(metrics).updateAlertsMetrics(MetricName.general); - } - - @Test - public void shouldDropExtIgiIgsIfAvailableAndExtIgiIgsConfigIsAbsent() { - // given - final Imp imp = givenImp("impId").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), ext -> ext.paaFormat(PaaFormat.IAB), imp); - final ExtIgi igi = ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder().impId("impId").build())) - .igb(singletonList(ExtIgiIgb.builder().build())) - .build(); - - final Bid bid = Bid.builder().id("bidId1").price(BigDecimal.valueOf(2.37)).impid("impId").build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder - .debugContext(DebugContext.of(true, false, null)) - .auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getIgi) - .asList() - .containsExactly( - ExtIgi.builder() - .impid("impId") - .igb(singletonList(ExtIgiIgb.builder().build())) - .build()); - - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getWarnings) - .extracting(warnings -> warnings.get(PREBID)) - .asList() - .containsExactly( - ExtBidderError.of( - BidderError.Type.generic.getCode(), - "ExtIgiIgs with absent config from bidder: seat")); - verify(metrics).updateAlertsMetrics(MetricName.general); - } - - @Test - public void shouldDropExtIgiIfAvailableAndExtIgiIgsAndExtIgiIgbAreAbsent() { - // given - final Imp imp = givenImp("impId").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), ext -> ext.paaFormat(PaaFormat.IAB), imp); - final ExtIgi igi = ExtIgi.builder() - .impid("impId") - .build(); - - final Bid bid = Bid.builder().id("bidId1").price(BigDecimal.valueOf(2.37)).impid("impId").build(); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(List.of(BidderBid.of(bid, banner, "seat", "USD"))) - .igi(singletonList(igi)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder - .debugContext(DebugContext.of(true, false, null)) - .auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt()) - .extracting(ExtBidResponse::getIgi) - .isNull(); - } - - @Test - public void shouldAddExtPrebidFledgeIfAvailableEvenIfBidsEmpty() { - // given - final Imp imp = givenImp("i1").toBuilder() - .ext(mapper.createObjectNode().put("ae", 1)) - .build(); - final BidRequest bidRequest = givenBidRequest(identity(), identity(), imp); - final FledgeAuctionConfig fledgeAuctionConfig = givenFledgeAuctionConfig("i1"); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(Collections.emptyList()) - .fledgeAuctionConfigs(List.of(fledgeAuctionConfig)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt().getPrebid().getFledge().getAuctionConfigs()) - .isNotEmpty() - .first() - .usingRecursiveComparison() - .isEqualTo(fledgeAuctionConfig.toBuilder() - .bidder("bidder1") - .adapter("bidder1") - .build()); - } - - @Test - public void shouldDropFledgeResponsesReferencingUnknownImps() { - // given - final Imp imp = givenImp("i1"); - final BidRequest bidRequest = givenBidRequest(identity(), identity(), imp); - final FledgeAuctionConfig fledgeAuctionConfig = givenFledgeAuctionConfig("i1"); - final List bidderResponses = singletonList( - BidderResponse.of("bidder1", - BidderSeatBid.builder() - .bids(Collections.emptyList()) - .fledgeAuctionConfigs(List.of(fledgeAuctionConfig)) - .build(), 100)); - - final AuctionContext auctionContext = givenAuctionContext( - bidRequest, - contextBuilder -> contextBuilder.auctionParticipations(toAuctionParticipant(bidderResponses))); - - // when - final BidResponse bidResponse = target - .create(auctionContext, CACHE_INFO, MULTI_BIDS) - .result(); - - // then - assertThat(bidResponse.getExt().getPrebid().getFledge()) - .isNull(); - } - @Test public void shouldPopulateExtPrebidSeatNonBidWhenReturnAllBidStatusFlagIsTrue() { // given @@ -4678,7 +4091,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetTtlFromBid() { // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(10).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(20).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, video, "seat", "USD")), 100)); @@ -4747,7 +4160,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetTtlFromImp() { // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(20).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, video, "seat", "USD")), 100)); @@ -4816,7 +4229,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetTtlFromRequest() { // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, video, "seat", "USD")), 100)); @@ -4885,7 +4298,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetTtlFromAccountBanne // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, banner, "seat", "USD")), 100)); @@ -4954,7 +4367,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetTtlFromAccountVideo // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, video, "seat", "USD")), 100)); @@ -5023,7 +4436,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetTtlFromMediaTypeTtl // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, banner, "seat", "USD")), 100)); @@ -5092,7 +4505,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetTtlFromMediaTypeTtl // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, video, "seat", "USD")), 100)); @@ -5161,7 +4574,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetDefaultTtlForBanner // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, banner, "seat", "USD")), 100)); @@ -5230,7 +4643,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetDefaultTtlForVideoB // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, video, "seat", "USD")), 100)); @@ -5299,7 +4712,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetDefaultTtlForAudioB // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, audio, "seat", "USD")), 100)); @@ -5368,7 +4781,7 @@ public void createShouldSendCacheRequestWithExpectedTtlAndSetDefaultTtlForNative // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, xNative, "seat", "USD")), 100)); @@ -5437,7 +4850,7 @@ public void createShouldSendCacheRequestWithTtlFromMediaTypeWhenAccountIsEmpty() // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, banner, "seat", "USD")), 100)); @@ -5495,7 +4908,7 @@ public void createShouldSendCacheRequestWithNoTtlAndSetEmptyTtl() { // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, banner, "seat", "USD")), 100)); @@ -5553,7 +4966,7 @@ public void createShouldSendCacheRequestWithVideoBidWithTtlMaxOfTtlAndVideoTtl() // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, video, "seat", "USD")), 100)); @@ -5612,7 +5025,7 @@ public void createShouldSendCacheRequestWithBannerBidWithTtlMaxOfTtlAndVideoTtl( // given final Bid bid = Bid.builder().id("bidId").impid("impId").exp(null).price(BigDecimal.valueOf(5.67)).build(); final Imp imp = Imp.builder().id("impId").exp(null).build(); - final List bidderResponses = asList(BidderResponse.of( + final List bidderResponses = singletonList(BidderResponse.of( "bidder1", givenSeatBid(BidderBid.of(bid, banner, "seat", "USD")), 100)); @@ -5769,13 +5182,6 @@ private static BidderSeatBid givenSeatBid(BidderBid... bids) { return BidderSeatBid.of(List.of(bids)); } - private static FledgeAuctionConfig givenFledgeAuctionConfig(String impId) { - return FledgeAuctionConfig.builder() - .impId(impId) - .config(mapper.createObjectNode().put("references", impId)) - .build(); - } - private static ExtRequestTargeting givenTargeting() { return ExtRequestTargeting.builder() .pricegranularity(mapper.valueToTree( @@ -5810,7 +5216,6 @@ private static ExtBidPrebid toExtBidPrebid(ObjectNode ext) { private BidResponseCreator givenBidResponseCreator(int truncateAttrChars, boolean enforcedRandomBidId) { return new BidResponseCreator( - 0, coreCacheService, bidderCatalog, vastModifier, @@ -5825,7 +5230,6 @@ private BidResponseCreator givenBidResponseCreator(int truncateAttrChars, boolea enforcedRandomBidId, clock, jacksonMapper, - metrics, mediaTypeCacheTtl, cacheDefaultProperties); } diff --git a/src/test/java/org/prebid/server/auction/ExchangeServiceTest.java b/src/test/java/org/prebid/server/auction/ExchangeServiceTest.java index 84ec69ecddb..9e7296c275e 100644 --- a/src/test/java/org/prebid/server/auction/ExchangeServiceTest.java +++ b/src/test/java/org/prebid/server/auction/ExchangeServiceTest.java @@ -111,7 +111,6 @@ import org.prebid.server.proto.openrtb.ext.request.ExtBidderConfigOrtb; import org.prebid.server.proto.openrtb.ext.request.ExtDooh; import org.prebid.server.proto.openrtb.ext.request.ExtGranularityRange; -import org.prebid.server.proto.openrtb.ext.request.ExtImpAuctionEnvironment; import org.prebid.server.proto.openrtb.ext.request.ExtPriceGranularity; import org.prebid.server.proto.openrtb.ext.request.ExtRequest; import org.prebid.server.proto.openrtb.ext.request.ExtRequestCurrency; @@ -150,7 +149,6 @@ import org.prebid.server.proto.openrtb.ext.response.ExtModulesTraceStage; import org.prebid.server.proto.openrtb.ext.response.ExtModulesTraceStageOutcome; import org.prebid.server.proto.openrtb.ext.response.ExtResponseDebug; -import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import org.prebid.server.settings.model.Account; import org.prebid.server.settings.model.AccountAlternateBidderCodes; import org.prebid.server.settings.model.AccountAlternateBidderCodesBidder; @@ -1300,51 +1298,6 @@ public void shouldReturnSeparateSeatBidsForTheSameBidderIfBiddersAliasAndBidderW .containsOnly(1, 1); } - @Test - public void shouldPropagateFledgeResponseWithBidderAlias() { - // given - final FledgeAuctionConfig fledgeAuctionConfig = givenFledgeAuctionConfig("impId"); - given(httpBidderRequester.requestBids(any(), any(), any(), any(), any(), any(), anyBoolean())) - .willReturn(Future.succeededFuture(givenEmptySeatBid() - .toBuilder() - .fledgeAuctionConfigs(List.of(fledgeAuctionConfig)) - .build())); - - final BidRequest bidRequest = givenBidRequest( - singletonList(Imp.builder() - .id("impId") - .ext(mapper.valueToTree( - Map.of("prebid", singletonMap("bidder", singletonMap("bidderAlias", 1)), - "ae", 1))) - .build()), - builder -> builder.ext(ExtRequest.of(ExtRequestPrebid.builder() - .aliases(singletonMap("bidderAlias", "bidder")) - .build()))); - - // when - target.holdAuction(givenRequestContext(bidRequest)); - - verify(httpBidderRequester, times(1)) - .requestBids(any(), any(), any(), any(), any(), any(), anyBoolean()); - - // then - final BidRequest capturedBidRequest = captureBidRequest(); - - assertThat(capturedBidRequest.getImp()) - .extracting(Imp::getExt) - .containsOnly(mapper.valueToTree(ExtPrebid.of(null, 1, - ExtImpAuctionEnvironment.ON_DEVICE_IG_AUCTION_FLEDGE))); - - final List auctionParticipations = captureAuctionParticipations(); - - assertThat(auctionParticipations) - .hasSize(1) - .extracting(AuctionParticipation::getBidderResponse) - .extracting(BidderResponse::getSeatBid) - .extracting(BidderSeatBid::getFledgeAuctionConfigs) - .containsExactly(List.of(fledgeAuctionConfig)); - } - @Test public void shouldOverrideDebugEnabledFlag() { // given @@ -4330,13 +4283,6 @@ private static Bid givenBid(Function bidBuilder) .build(); } - private static FledgeAuctionConfig givenFledgeAuctionConfig(String impId) { - return FledgeAuctionConfig.builder() - .impId(impId) - .config(mapper.createObjectNode().put("references", impId)) - .build(); - } - private static ExtBidPrebid toExtBidPrebid(ObjectNode ext) { try { return mapper.treeToValue(ext.get("prebid"), ExtBidPrebid.class); diff --git a/src/test/java/org/prebid/server/auction/ImpAdjusterTest.java b/src/test/java/org/prebid/server/auction/ImpAdjusterTest.java index e69a6169d77..6f46ad06811 100644 --- a/src/test/java/org/prebid/server/auction/ImpAdjusterTest.java +++ b/src/test/java/org/prebid/server/auction/ImpAdjusterTest.java @@ -1,7 +1,6 @@ package org.prebid.server.auction; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.IntNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.Deal; import com.iab.openrtb.request.Imp; @@ -69,79 +68,6 @@ public void adjustShouldReturnOriginalImpWhenImpExtPrebidImpIsAbsent() { assertThat(debugMessages).isEmpty(); } - @Test - public void adjustShouldSetImpExtIgsAeWhenImpExtAeIsZero() { - // given - final ObjectNode ext = mapper.createObjectNode(); - ext.set("ae", IntNode.valueOf(0)); - - final Imp givenImp = Imp.builder().ext(ext).build(); - - final List debugMessages = new ArrayList<>(); - - // when - final Imp result = target.adjust(givenImp, "someBidder", debugMessages); - - // then - assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(0)); - assertThat(debugMessages).isEmpty(); - } - - @Test - public void adjustShouldSetImpExtIgsAeWhenImpExtAeIsOne() { - // given - final ObjectNode ext = mapper.createObjectNode(); - ext.set("ae", IntNode.valueOf(1)); - - final Imp givenImp = Imp.builder().ext(ext).build(); - - final List debugMessages = new ArrayList<>(); - - // when - final Imp result = target.adjust(givenImp, "someBidder", debugMessages); - - // then - assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(1)); - assertThat(debugMessages).isEmpty(); - } - - @Test - public void adjustShouldNotSetImpExtIgsAeWhenImpExtAeIsNotZeroOrOne() { - // given - final ObjectNode ext = mapper.createObjectNode(); - ext.set("ae", IntNode.valueOf(3)); - - final Imp givenImp = Imp.builder().ext(ext).build(); - - final List debugMessages = new ArrayList<>(); - - // when - final Imp result = target.adjust(givenImp, "someBidder", debugMessages); - - // then - assertThat(result.getExt().get("igs")).isNull(); - assertThat(debugMessages).isEmpty(); - } - - @Test - public void adjustShouldNotModifyImpExtIgsAeWhenImpExtIgsAePresent() { - // given - final ObjectNode ext = mapper.createObjectNode(); - ext.set("ae", IntNode.valueOf(0)); - ext.set("igs", mapper.createObjectNode().set("ae", IntNode.valueOf(123))); - - final Imp givenImp = Imp.builder().ext(ext).build(); - - final List debugMessages = new ArrayList<>(); - - // when - final Imp result = target.adjust(givenImp, "someBidder", debugMessages); - - // then - assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(123)); - assertThat(debugMessages).isEmpty(); - } - @Test public void adjustShouldRemoveExpImpFromOriginalImpWhenImpExtPrebidImpHasEmptyBidder() { // given diff --git a/src/test/java/org/prebid/server/bidder/HttpBidderRequesterTest.java b/src/test/java/org/prebid/server/bidder/HttpBidderRequesterTest.java index dab0028c791..6db68cc7575 100644 --- a/src/test/java/org/prebid/server/bidder/HttpBidderRequesterTest.java +++ b/src/test/java/org/prebid/server/bidder/HttpBidderRequesterTest.java @@ -30,7 +30,6 @@ import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; import org.prebid.server.bidder.model.BidderSeatBid; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; @@ -38,9 +37,6 @@ import org.prebid.server.execution.timeout.TimeoutFactory; import org.prebid.server.model.CaseInsensitiveMultiMap; import org.prebid.server.proto.openrtb.ext.response.ExtHttpCall; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; -import org.prebid.server.proto.openrtb.ext.response.FledgeAuctionConfig; import org.prebid.server.util.HttpUtil; import org.prebid.server.vertx.httpclient.HttpClient; import org.prebid.server.vertx.httpclient.model.HttpClientResponse; @@ -121,13 +117,12 @@ public void setUp() { target = new HttpBidderRequester( httpClient, null, bidderErrorNotifier, requestEnricher, jacksonMapper, 0.0); - given(bidder.makeBidderResponse(any(BidderCall.class), any(BidRequest.class))).willCallRealMethod(); } @Test public void shouldReturnFailedToRequestBidsErrorWhenBidderReturnsEmptyHttpRequestAndErrorLists() { // given - given(bidder.makeHttpRequests(any())).willReturn(Result.of(emptyList(), emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.empty()); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -159,7 +154,7 @@ public void shouldReturnFailedToRequestBidsErrorWhenBidderReturnsEmptyHttpReques @Test public void shouldTolerateBidderReturningErrorsAndNoHttpRequests() { // given - given(bidder.makeHttpRequests(any())).willReturn(Result.of(emptyList(), + given(bidder.makeHttpRequests(any())).willReturn(Result.withErrors( asList(BidderError.badInput("error1"), BidderError.badInput("error2")))); final BidderRequest bidderRequest = BidderRequest.builder() @@ -194,12 +189,11 @@ public void shouldPassStoredResponseToBidderMakeBidsMethodAndReturnSeatBids() { final MultiMap headers = MultiMap.caseInsensitiveMultiMap(); headers.add("header1", "value1"); headers.add("header2", "value2"); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(singletonList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder.uri("uri"))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValue( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder.uri("uri")))); final List bids = asList(BidderBid.of(null, null, null), BidderBid.of(null, null, null)); - given(bidder.makeBidderResponse(any(), any())).willReturn(CompositeBidderResponse.builder().bids(bids).build()); + given(bidder.makeBids(any(), any())).willReturn(Result.withValues(bids)); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -223,7 +217,7 @@ public void shouldPassStoredResponseToBidderMakeBidsMethodAndReturnSeatBids() { verifyNoInteractions(httpClient); final ArgumentCaptor> httpCallArgumentCaptor = ArgumentCaptor.forClass(BidderCall.class); - verify(bidder).makeBidderResponse(httpCallArgumentCaptor.capture(), any()); + verify(bidder).makeBids(httpCallArgumentCaptor.capture(), any()); assertThat(httpCallArgumentCaptor.getValue().getResponse()) .extracting(HttpResponse::getBody) .isEqualTo("storedResponse"); @@ -240,14 +234,13 @@ public void shouldMakeRequestToBidderWhenStoredResponseDefinedButBidderCreatesMo final MultiMap headers = MultiMap.caseInsensitiveMultiMap(); headers.add("header1", "value1"); headers.add("header2", "value2"); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(asList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri") - .headers(headers)), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri") - .headers(headers))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValues(asList( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri") + .headers(headers)), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri") + .headers(headers))))); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -314,12 +307,9 @@ public void shouldSendMultipleRequests() throws JsonProcessingException { final BidRequest bidRequest = givenBidRequest(identity()); final byte[] body = mapper.writeValueAsBytes(bidRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(asList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .body(body)), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .body(body))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValues(asList( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder.body(body)), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder.body(body))))); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -349,7 +339,7 @@ public void shouldReturnBidsCreatedByBidder() { givenSuccessfulBidderMakeHttpRequests(); final List bids = asList(BidderBid.of(null, null, null), BidderBid.of(null, null, null)); - given(bidder.makeBidderResponse(any(), any())).willReturn(CompositeBidderResponse.builder().bids(bids).build()); + given(bidder.makeBids(any(), any())).willReturn(Result.withValues(bids)); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -382,95 +372,7 @@ public void shouldReturnBidsCreatedByMakeBids() { givenSuccessfulBidderMakeHttpRequests(); final List bids = emptyList(); - given(bidder.makeBidderResponse(any(), any())).willReturn(CompositeBidderResponse.builder().bids(bids).build()); - - final BidderRequest bidderRequest = BidderRequest.builder() - .bidder("bidder") - .bidRequest(BidRequest.builder().build()) - .build(); - - // when - final BidderSeatBid bidderSeatBid = - target - .requestBids( - bidder, - bidderRequest, - bidRejectionTracker, - timeout, - CaseInsensitiveMultiMap.empty(), - bidderAliases, - false) - .result(); - - // then - assertThat(bidderSeatBid.getBids()).hasSameElementsAs(bids); - - verify(bidRejectionTracker, never()).reject(any(Rejection.class)); - verify(bidRejectionTracker, never()).rejectImps(anyList(), any()); - } - - @Test - public void shouldReturnFledgeCreatedByBidder() { - // given - givenSuccessfulBidderMakeHttpRequests(); - - final List fledgeAuctionConfigs = List.of( - givenFledgeAuctionConfig("imp-1"), - givenFledgeAuctionConfig("imp-2")); - final List bids = emptyList(); - - given(bidder.makeBidderResponse(any(), any())).willReturn( - CompositeBidderResponse.builder() - .bids(bids) - .fledgeAuctionConfigs(fledgeAuctionConfigs) - .build()); - - final BidderRequest bidderRequest = BidderRequest.builder() - .bidder("bidder") - .bidRequest(BidRequest.builder().build()) - .build(); - - // when - final BidderSeatBid bidderSeatBid = - target - .requestBids( - bidder, - bidderRequest, - bidRejectionTracker, - timeout, - CaseInsensitiveMultiMap.empty(), - bidderAliases, - false) - .result(); - - // then - assertThat(bidderSeatBid.getBids()).hasSameElementsAs(bids); - assertThat(bidderSeatBid.getFledgeAuctionConfigs()).hasSameElementsAs(fledgeAuctionConfigs); - - verify(bidRejectionTracker, never()).reject(any(Rejection.class)); - verify(bidRejectionTracker, never()).rejectImps(anyList(), any()); - } - - @Test - public void shouldReturnExtIgiCreatedByBidder() { - // given - givenSuccessfulBidderMakeHttpRequests(); - - final List igi = List.of( - ExtIgi.builder() - .impid("impId") - .igs(singletonList(ExtIgiIgs.builder() - .config(mapper.createObjectNode()) - .build())) - .build()); - - final List bids = emptyList(); - - given(bidder.makeBidderResponse(any(), any())).willReturn( - CompositeBidderResponse.builder() - .bids(bids) - .igi(igi) - .build()); + given(bidder.makeBids(any(), any())).willReturn(Result.withValues(bids)); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -492,7 +394,6 @@ public void shouldReturnExtIgiCreatedByBidder() { // then assertThat(bidderSeatBid.getBids()).hasSameElementsAs(bids); - assertThat(bidderSeatBid.getIgi()).containsExactlyElementsOf(igi); verify(bidRejectionTracker, never()).reject(any(Rejection.class)); verify(bidRejectionTracker, never()).rejectImps(anyList(), any()); @@ -503,9 +404,7 @@ public void shouldCompressRequestBodyIfContentEncodingHeaderIsGzip() { // given final MultiMap headers = MultiMap.caseInsensitiveMultiMap() .add(HttpUtil.CONTENT_ENCODING_HEADER, HttpHeaderValues.GZIP); - given(bidder.makeHttpRequests(any())).willReturn(Result.of( - singletonList(givenSimpleHttpRequest(identity())), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValue(givenSimpleHttpRequest(identity()))); given(requestEnricher.enrichHeaders(anyString(), any(), any(), any(), any())).willReturn(headers); givenHttpClientResponse(200, "responseBody"); @@ -575,20 +474,19 @@ public void processBids(List bids) { final BidRequest forthRequest = givenBidRequest(bidRequestBuilder -> bidRequestBuilder.id("r4")); final byte[] forthRequestBody = mapper.writeValueAsBytes(forthRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(Arrays.asList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .body(firstRequestBody) - .payload(bidRequestWithDeals("deal1"))), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .body(secondRequestBody) - .payload(bidRequestWithDeals("deal1"))), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .body(thirdRequestBody) - .payload(bidRequestWithDeals("deal2"))), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .body(forthRequestBody) - .payload(bidRequestWithDeals("deal1")))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValues(asList( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .body(firstRequestBody) + .payload(bidRequestWithDeals("deal1"))), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .body(secondRequestBody) + .payload(bidRequestWithDeals("deal1"))), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .body(thirdRequestBody) + .payload(bidRequestWithDeals("deal2"))), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .body(forthRequestBody) + .payload(bidRequestWithDeals("deal1")))))); final HttpClientResponse respWithDeal1 = HttpClientResponse.of(200, null, "{\"seatbid\":[{\"bid\":[{\"dealid\":\"deal1\"}]}]}"); @@ -606,9 +504,9 @@ public void processBids(List bids) { final BidderBid bidderBidDeal1 = BidderBid.of(Bid.builder().impid("deal1").dealid("deal1").build(), null, null); final BidderBid bidderBidDeal2 = BidderBid.of(Bid.builder().impid("deal2").dealid("deal2").build(), null, null); - given(bidder.makeBidderResponse(any(), any())).willReturn( - CompositeBidderResponse.builder().bids(singletonList(bidderBidDeal1)).build(), - CompositeBidderResponse.builder().bids(singletonList(bidderBidDeal2)).build()); + given(bidder.makeBids(any(), any())).willReturn( + Result.withValue(bidderBidDeal1), + Result.withValue(bidderBidDeal2)); // when final BidderSeatBid bidderSeatBid = target.requestBids( @@ -624,7 +522,7 @@ public void processBids(List bids) { // then verify(bidder).makeHttpRequests(any()); verify(httpClient, times(4)).request(any(), any(), any(), any(byte[].class), anyLong()); - verify(bidder, times(2)).makeBidderResponse(any(), any()); + verify(bidder, times(2)).makeBids(any(), any()); assertThat(bidderSeatBid.getBids()).containsOnly(bidderBidDeal1, bidderBidDeal2); @@ -641,22 +539,20 @@ public void shouldFinishWhenAllDealRequestsAreFinishedAndNoDealsProvided() { .bidRequest(bidRequest) .build(); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(Arrays.asList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .payload(bidRequestWithDeals("deal1"))), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .payload(bidRequestWithDeals("deal2"))), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .payload(bidRequestWithDeals("deal2"))), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .payload(bidRequestWithDeals("deal2")))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValues(asList( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .payload(bidRequestWithDeals("deal1"))), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .payload(bidRequestWithDeals("deal2"))), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .payload(bidRequestWithDeals("deal2"))), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .payload(bidRequestWithDeals("deal2")))))); givenHttpClientResponse(200, "responseBody"); final BidderBid bidderBid = BidderBid.of(Bid.builder().dealid("deal2").build(), null, null); - given(bidder.makeBidderResponse(any(), any())).willReturn( - CompositeBidderResponse.builder().bids(singletonList(bidderBid)).build()); + given(bidder.makeBids(any(), any())).willReturn(Result.withValue(bidderBid)); // when final BidderSeatBid bidderSeatBid = @@ -673,7 +569,7 @@ public void shouldFinishWhenAllDealRequestsAreFinishedAndNoDealsProvided() { // then verify(bidder).makeHttpRequests(any()); verify(httpClient, times(4)).request(any(), any(), any(), any(byte[].class), anyLong()); - verify(bidder, times(4)).makeBidderResponse(any(), any()); + verify(bidder, times(4)).makeBids(any(), any()); assertThat(bidderSeatBid.getBids()).contains(bidderBid, bidderBid, bidderBid, bidderBid); @@ -689,18 +585,17 @@ public void shouldReturnFullDebugInfoIfDebugEnabled() throws JsonProcessingExcep final BidRequest secondBidRequest = givenBidRequest(bidRequestBuilder -> bidRequestBuilder.id("secondId")); final byte[] firstRequestBody = mapper.writeValueAsBytes(firstBidRequest); final byte[] secondRequestBody = mapper.writeValueAsBytes(secondBidRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(asList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri1") - .body(firstRequestBody) - .payload(firstBidRequest) - .headers(headers)), - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri2") - .body(secondRequestBody) - .payload(secondBidRequest) - .headers(headers))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValues(asList( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri1") + .body(firstRequestBody) + .payload(firstBidRequest) + .headers(headers)), + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri2") + .body(secondRequestBody) + .payload(secondBidRequest) + .headers(headers))))); given(requestEnricher.enrichHeaders(anyString(), any(), any(), any(), any())).willReturn(headers); @@ -708,7 +603,7 @@ public void shouldReturnFullDebugInfoIfDebugEnabled() throws JsonProcessingExcep HttpClientResponse.of(200, null, "responseBody1"), HttpClientResponse.of(200, null, "responseBody2")); - given(bidder.makeBidderResponse(any(), any())).willReturn(CompositeBidderResponse.empty()); + given(bidder.makeBids(any(), any())).willReturn(Result.empty()); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -788,8 +683,7 @@ public void shouldReturnRecordBidRejections() throws JsonProcessingException { final List secondRequestBids = singletonList(BidderBid.builder() .bid(Bid.builder().impid("2").build()) .build()); - given(bidder.makeBidderResponse(any(), any())) - .willReturn(CompositeBidderResponse.builder().bids(secondRequestBids).build()); + given(bidder.makeBids(any(), any())).willReturn(Result.withValues(secondRequestBids)); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -822,13 +716,12 @@ public void shouldNotReturnSensitiveHeadersInFullDebugInfo() headers.add("Authorization", "authorizationValue"); final BidRequest givenBidRequest = givenBidRequest(identity()); final byte[] requestBody = mapper.writeValueAsBytes(givenBidRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(singletonList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri1") - .headers(headers) - .payload(givenBidRequest) - .body(requestBody))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValue( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri1") + .headers(headers) + .payload(givenBidRequest) + .body(requestBody)))); given(requestEnricher.enrichHeaders(anyString(), any(), any(), any(), any())).willReturn(headers); @@ -865,15 +758,14 @@ public void shouldReturnPartialDebugInfoIfDebugEnabledAndGlobalTimeoutAlreadyExp final MultiMap headers = MultiMap.caseInsensitiveMultiMap().add("headerKey", "headerValue"); final BidRequest givenBidRequest = givenBidRequest(identity()); final byte[] requestBody = mapper.writeValueAsBytes(givenBidRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(singletonList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri1") - .headers(headers) - .payload(givenBidRequest) - .body(requestBody) - .impIds(givenBidRequest.getImp().stream().map(Imp::getId) - .collect(Collectors.toSet())))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValue( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri1") + .headers(headers) + .payload(givenBidRequest) + .body(requestBody) + .impIds(givenBidRequest.getImp().stream().map(Imp::getId) + .collect(Collectors.toSet()))))); given(requestEnricher.enrichHeaders(anyString(), any(), any(), any(), any())).willReturn(headers); @@ -911,14 +803,13 @@ public void shouldReturnPartialDebugInfoIfDebugEnabledAndHttpErrorOccurs() throw final MultiMap headers = MultiMap.caseInsensitiveMultiMap().add("headerKey", "headerValue"); final BidRequest givenBidRequest = givenBidRequest(identity()); final byte[] requestBody = mapper.writeValueAsBytes(givenBidRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(singletonList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri1") - .headers(headers) - .payload(givenBidRequest) - .impIds(givenBidRequest.getImp().stream().map(Imp::getId).collect(Collectors.toSet())) - .body(requestBody))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValue( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri1") + .headers(headers) + .payload(givenBidRequest) + .impIds(givenBidRequest.getImp().stream().map(Imp::getId).collect(Collectors.toSet())) + .body(requestBody)))); given(requestEnricher.enrichHeaders(anyString(), any(), any(), any(), any())).willReturn(headers); @@ -959,14 +850,13 @@ public void shouldReturnFullDebugInfoIfDebugEnabledAndErrorStatus() throws JsonP final MultiMap headers = MultiMap.caseInsensitiveMultiMap().add("headerKey", "headerValue"); final BidRequest givenBidRequest = givenBidRequest(identity()); final byte[] requestBody = mapper.writeValueAsBytes(givenBidRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(singletonList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri1") - .headers(headers) - .payload(givenBidRequest) - .impIds(givenBidRequest.getImp().stream().map(Imp::getId).collect(Collectors.toSet())) - .body(requestBody))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValue( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri1") + .headers(headers) + .payload(givenBidRequest) + .impIds(givenBidRequest.getImp().stream().map(Imp::getId).collect(Collectors.toSet())) + .body(requestBody)))); given(requestEnricher.enrichHeaders(anyString(), any(), any(), any(), any())).willReturn(headers); @@ -1012,14 +902,13 @@ public void shouldReturnFullDebugInfoIfDebugEnabledAndBidderIsUnreachable() thro final MultiMap headers = MultiMap.caseInsensitiveMultiMap().add("headerKey", "headerValue"); final BidRequest givenBidRequest = givenBidRequest(identity()); final byte[] requestBody = mapper.writeValueAsBytes(givenBidRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(singletonList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri1") - .headers(headers) - .payload(givenBidRequest) - .impIds(givenBidRequest.getImp().stream().map(Imp::getId).collect(Collectors.toSet())) - .body(requestBody))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValue( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri1") + .headers(headers) + .payload(givenBidRequest) + .impIds(givenBidRequest.getImp().stream().map(Imp::getId).collect(Collectors.toSet())) + .body(requestBody)))); given(requestEnricher.enrichHeaders(anyString(), any(), any(), any(), any())).willReturn(headers); @@ -1064,13 +953,12 @@ public void shouldTolerateAlreadyExpiredGlobalTimeout() throws JsonProcessingExc // given final BidRequest givenBidRequest = givenBidRequest(identity()); final byte[] requestBody = mapper.writeValueAsBytes(givenBidRequest); - given(bidder.makeHttpRequests(any())).willReturn(Result.of(singletonList( - givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder - .uri("uri1") - .payload(givenBidRequest) - .impIds(givenBidRequest.getImp().stream().map(Imp::getId).collect(Collectors.toSet())) - .body(requestBody))), - emptyList())); + given(bidder.makeHttpRequests(any())).willReturn(Result.withValue( + givenSimpleHttpRequest(httpRequestBuilder -> httpRequestBuilder + .uri("uri1") + .payload(givenBidRequest) + .impIds(givenBidRequest.getImp().stream().map(Imp::getId).collect(Collectors.toSet())) + .body(requestBody)))); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") .bidRequest(BidRequest.builder().build()) @@ -1164,11 +1052,9 @@ public void shouldTolerateMultipleErrors() { // simulate 200 status .willReturn(Future.succeededFuture(HttpClientResponse.of(200, null, EMPTY))); - given(bidder.makeBidderResponse(any(), any())).willReturn( - CompositeBidderResponse.builder() - .bids(singletonList(BidderBid.of(Bid.builder().impid("123").build(), null, null))) - .errors(singletonList(BidderError.badServerResponse("makeBidsError"))) - .build()); + given(bidder.makeBids(any(), any())).willReturn(Result.of( + singletonList(BidderBid.of(Bid.builder().impid("123").build(), null, null)), + singletonList(BidderError.badServerResponse("makeBidsError")))); final BidderRequest bidderRequest = BidderRequest.builder() .bidder("bidder") @@ -1189,7 +1075,7 @@ public void shouldTolerateMultipleErrors() { // then // only one calls is expected (200) since other requests have failed with errors. - verify(bidder).makeBidderResponse(any(), any()); + verify(bidder).makeBids(any(), any()); assertThat(bidderSeatBid.getBids()).hasSize(1); assertThat(bidderSeatBid.getErrors()).containsOnly( BidderError.badInput("makeHttpRequestsError"), @@ -1236,7 +1122,7 @@ public void shouldNotMakeBidsIfResponseStatusIs204() { false); // then - verify(bidder, never()).makeBidderResponse(any(), any()); + verify(bidder, never()).makeBids(any(), any()); verify(bidder, never()).makeBids(any(), any()); verify(bidRejectionTracker, never()).reject(any(Rejection.class)); @@ -1269,13 +1155,6 @@ private static Imp impWithDeal(String dealId) { .build(); } - private static FledgeAuctionConfig givenFledgeAuctionConfig(String impId) { - return FledgeAuctionConfig.builder() - .impId(impId) - .config(mapper.createObjectNode().put("references", impId)) - .build(); - } - private static HttpRequest givenSimpleHttpRequest( UnaryOperator> customizer) { return customizer.apply(HttpRequest.builder() diff --git a/src/test/java/org/prebid/server/bidder/consumable/ConsumableBidderTest.java b/src/test/java/org/prebid/server/bidder/consumable/ConsumableBidderTest.java index 4687d5adfc3..97075bd4492 100644 --- a/src/test/java/org/prebid/server/bidder/consumable/ConsumableBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/consumable/ConsumableBidderTest.java @@ -16,13 +16,11 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.prebid.server.VertxTest; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; @@ -32,7 +30,6 @@ import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; import org.prebid.server.util.HttpUtil; -import org.prebid.server.version.PrebidVersionProvider; import java.util.List; import java.util.Map; @@ -49,9 +46,6 @@ public class ConsumableBidderTest extends VertxTest { private static final String ENDPOINT_URL = "http://exchange.org/"; - @Mock - private PrebidVersionProvider prebidVersionProvider; - private ConsumableBidder target; @BeforeEach @@ -111,18 +105,18 @@ public void makeHttpRequestsShouldHaveCorrectURIForAppRequest() { } @Test - public void makeBidderResponseShouldReturnBidderBidWithNoErrors() throws JsonProcessingException { + public void makeBidsShouldReturnBidderBidWithNoErrors() throws JsonProcessingException { // given final BidRequest bidRequest = givenSiteBidRequest(identity()); final BidderCall httpCall = givenHttpCall(bidRequest, givenBidResponse(bidBuilder -> bidBuilder.impid("123"))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isNotEmpty(); + assertThat(result.getValue()).isNotEmpty(); } @Test @@ -169,51 +163,51 @@ public void makeHttpRequestsShouldReturnEmptyListIfRequiredAppParametersAreNotPr } @Test - public void makeBidderResponseShouldReturnErrorIfResponseBodyCouldNotBeParsed() { + public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { // given final BidderCall httpCall = givenHttpCall(null, "invalid"); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).hasSize(1).first().satisfies(error -> { assertThat(error.getMessage()).startsWith("Failed to decode: Unrecognized token"); assertThat(error.getType()).isEqualTo(BidderError.Type.bad_server_response); }); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(null, mapper.writeValueAsString(null)); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(null, mapper.writeValueAsString(BidResponse.builder().build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnBannerBidIfBannerIsPresent() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBidIfBannerIsPresent() throws JsonProcessingException { // given final BidRequest bidRequest = BidRequest.builder() .imp(singletonList(Imp.builder().id("123").banner(Banner.builder().build()).build())) @@ -223,17 +217,17 @@ public void makeBidderResponseShouldReturnBannerBidIfBannerIsPresent() throws Js givenBidResponse(bidBuilder -> bidBuilder.impid("123"))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.banner); } @Test - public void makeBidderResponseShouldReturnAudioBidIfAudioIsPresent() throws JsonProcessingException { + public void makeBidsShouldReturnAudioBidIfAudioIsPresent() throws JsonProcessingException { // given final BidRequest bidRequest = BidRequest.builder() .imp(singletonList(Imp.builder().id("123").audio(Audio.builder().build()).build())) @@ -243,17 +237,17 @@ public void makeBidderResponseShouldReturnAudioBidIfAudioIsPresent() throws Json givenBidResponse(bidBuilder -> bidBuilder.impid("123"))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.audio); } @Test - public void makeBidderResponseShouldReturnErrorIfImpNotMatched() throws JsonProcessingException { + public void makeBidsShouldReturnErrorIfImpNotMatched() throws JsonProcessingException { // given final BidRequest bidRequest = BidRequest.builder() .imp(singletonList(Imp.builder().id("123").build())) @@ -263,15 +257,15 @@ public void makeBidderResponseShouldReturnErrorIfImpNotMatched() throws JsonProc givenBidResponse(bidBuilder -> bidBuilder.impid("489"))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); assertThat(result.getErrors()).containsExactly(BidderError.badServerResponse("Unmatched impression id 489")); } @Test - public void makeBidderResponseShouldReturnBidWithVideoExt() throws JsonProcessingException { + public void makeBidsShouldReturnBidWithVideoExt() throws JsonProcessingException { // given final Video video = Video.builder().build(); final BidRequest bidRequest = BidRequest.builder() @@ -286,18 +280,18 @@ public void makeBidderResponseShouldReturnBidWithVideoExt() throws JsonProcessin .mtype(2))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getVideoInfo) .extracting(ExtBidPrebidVideo::getDuration) .containsExactly(1); } @Test - public void makeBidderResponseShouldReturnBannerBidIfMTypeIsOne() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBidIfMTypeIsOne() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -315,17 +309,17 @@ public void makeBidderResponseShouldReturnBannerBidIfMTypeIsOne() throws JsonPro .mtype(1))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.banner); } @Test - public void makeBidderResponseShouldReturnVideoBidIfMTypeIsTwo() throws JsonProcessingException { + public void makeBidsShouldReturnVideoBidIfMTypeIsTwo() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -343,17 +337,17 @@ public void makeBidderResponseShouldReturnVideoBidIfMTypeIsTwo() throws JsonProc .mtype(2))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.video); } @Test - public void makeBidderResponseShouldReturnAudioBidIfMTypeIsThree() throws JsonProcessingException { + public void makeBidsShouldReturnAudioBidIfMTypeIsThree() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -371,17 +365,17 @@ public void makeBidderResponseShouldReturnAudioBidIfMTypeIsThree() throws JsonPr .mtype(3))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.audio); } @Test - public void makeBidderResponseShouldReturnCorrectTypeExtPrebidTypeInResponse() throws JsonProcessingException { + public void makeBidsShouldReturnCorrectTypeExtPrebidTypeInResponse() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -400,11 +394,11 @@ public void makeBidderResponseShouldReturnCorrectTypeExtPrebidTypeInResponse() t .set("prebid", mapper.createObjectNode().put("type", "video"))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.video); } diff --git a/src/test/java/org/prebid/server/bidder/criteo/CriteoBidderTest.java b/src/test/java/org/prebid/server/bidder/criteo/CriteoBidderTest.java index 291dd35d415..99bb9d671d1 100644 --- a/src/test/java/org/prebid/server/bidder/criteo/CriteoBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/criteo/CriteoBidderTest.java @@ -15,13 +15,10 @@ import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; import org.prebid.server.proto.openrtb.ext.response.BidType; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import java.util.List; import java.util.Set; @@ -76,12 +73,12 @@ public void makeHttpRequestsShouldEncodePassedBidRequest() { } @Test - public void makeBidderResponseShouldReturnErrorIfResponseBodyCouldNotBeParsed() { + public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { // given final BidderCall httpCall = givenHttpCall("invalid"); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).hasSize(1) @@ -89,114 +86,114 @@ public void makeBidderResponseShouldReturnErrorIfResponseBodyCouldNotBeParsed() assertThat(error.getType()).isEqualTo(BidderError.Type.bad_server_response); assertThat(error.getMessage()).startsWith("Failed to decode: Unrecognized token"); }); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(null)); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(BidResponse.builder().build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseSeatBidIsEmpty() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsEmpty() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString(BidResponse.builder().seatbid(emptyList()).build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnErrorWhenBidExtPrebidTypeIsNotPresent() throws JsonProcessingException { + public void makeBidsShouldReturnErrorWhenBidExtPrebidTypeIsNotPresent() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.impid("123"))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()) .containsExactly(BidderError.badServerResponse("Missing ext.prebid.type in bid for impression : 123.")); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnBannerBid() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.ext(givenBidExt(BidType.banner)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.banner); } @Test - public void makeBidderResponseShouldReturnVideoBid() throws JsonProcessingException { + public void makeBidsShouldReturnVideoBid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.ext(givenBidExt(BidType.video)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.video); } @Test - public void makeBidderResponseShouldReturnBidWithCurFromResponse() throws JsonProcessingException { + public void makeBidsShouldReturnBidWithCurFromResponse() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.ext(givenBidExt(BidType.banner)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBidCurrency) .containsExactly("CUR"); } @Test - public void makeBidderResponseShouldReturnBidWithNetworkNameFromExtPrebid() throws JsonProcessingException { + public void makeBidsShouldReturnBidWithNetworkNameFromExtPrebid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid @@ -204,11 +201,11 @@ public void makeBidderResponseShouldReturnBidWithNetworkNameFromExtPrebid() thro .ext(givenBidExtWithNetwork("anyNetworkName")))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getExt) .extracting(ext -> ext.get("meta")) @@ -216,64 +213,24 @@ public void makeBidderResponseShouldReturnBidWithNetworkNameFromExtPrebid() thro } @Test - public void makeBidderResponseShouldReturnEmptyNetworkNameWhenBidExtPrebidNotContainNetworkName() + public void makeBidsShouldReturnEmptyNetworkNameWhenBidExtPrebidNotContainNetworkName() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.ext(givenBidExtWithNetwork(null)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getExt) .extracting(ext -> ext.get("meta")) .doesNotContain(mapper.createObjectNode().put("networkName", "anyNetworkName")); } - @Test - public void makeBidderResponseShouldReturnFledgeConfigs() throws JsonProcessingException { - // given - final List igs = List.of( - ExtIgiIgs.builder().config(mapper.createObjectNode().put("proterty1", "value1")).build(), - ExtIgiIgs.builder().config(mapper.createObjectNode().put("proterty2", "value2")).build()); - - final CriteoBidResponse bidResponseWithFledge = CriteoBidResponse.builder() - .ext(CriteoExtBidResponse.of(List.of( - ExtIgi.builder() - .impid("imp_id1") - .igs(igs) - .build()))) - .build(); - final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(bidResponseWithFledge)); - - // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); - - // then - final List expectedIgs = List.of( - ExtIgiIgs.builder().config(mapper.createObjectNode().put("proterty1", "value1")).build(), - ExtIgiIgs.builder().config(mapper.createObjectNode().put("proterty2", "value2")).build()); - - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getIgi()).containsExactly(ExtIgi.builder().impid("imp_id1").igs(expectedIgs).build()); - } - - @Test - public void makeBidsShouldFail() throws JsonProcessingException { - //given - final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(BidResponse.builder().build())); - - // when - final Result> result = target.makeBids(httpCall, null); - - // then - assertThat(result.getErrors()).containsExactly(BidderError.generic("Deprecated adapter method invoked")); - } - private static String givenBidResponse(UnaryOperator bidCustomizer) throws JsonProcessingException { @@ -305,5 +262,4 @@ private static ObjectNode givenBidExtWithNetwork(String networkNameValue) { prebid.put("networkName", networkNameValue); return ext; } - } diff --git a/src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java b/src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java index eeb1a1ce621..ca3f2dfc300 100644 --- a/src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java @@ -22,7 +22,6 @@ import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; @@ -795,25 +794,25 @@ public void makeBidsShouldReturnResultForNativeBidsWithExpectedFields() throws J final BidderCall httpCall = givenHttpCall(bidRequest, mapper.writeValueAsString(BidResponse.builder() - .seatbid(singletonList(SeatBid.builder() - .bid(singletonList(Bid.builder() - .price(BigDecimal.ONE) - .impid("impid-0") - .adm(nativeResponseString) - .mtype(4) - .cat(singletonList("IAB3")) + .seatbid(singletonList(SeatBid.builder() + .bid(singletonList(Bid.builder() + .price(BigDecimal.ONE) + .impid("impid-0") + .adm(nativeResponseString) + .mtype(4) + .cat(singletonList("IAB3")) + .build())) .build())) - .build())) - .cur("USD") - .ext(ExtBidResponse.builder().build()) - .build())); + .cur("USD") + .ext(ExtBidResponse.builder().build()) + .build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .containsOnly(BidderBid.of( Bid.builder() .impid("impid-0") diff --git a/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java b/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java index f1138e83133..b152785844e 100644 --- a/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java @@ -26,14 +26,10 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.prebid.server.VertxTest; -import org.prebid.server.bidder.ix.model.response.AuctionConfigExtBidResponse; -import org.prebid.server.bidder.ix.model.response.IxBidResponse; -import org.prebid.server.bidder.ix.model.response.IxExtBidResponse; import org.prebid.server.bidder.ix.model.response.NativeV11Wrapper; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; @@ -45,8 +41,6 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import org.prebid.server.version.PrebidVersionProvider; import java.util.List; @@ -62,7 +56,6 @@ import static org.assertj.core.api.Assertions.tuple; import static org.mockito.BDDMockito.given; import static org.mockito.Mock.Strictness.LENIENT; -import static org.prebid.server.proto.openrtb.ext.response.BidType.banner; @ExtendWith(MockitoExtension.class) public class IxBidderTest extends VertxTest { @@ -382,50 +375,50 @@ public void makeHttpRequestsShouldNotCreateRequestAppWhenImpExtSiteIdPresentAndS } @Test - public void makeBidderResponseShouldReturnErrorIfResponseBodyCouldNotBeParsed() { + public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { // given final BidderCall httpCall = givenHttpCall(null, "invalid"); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).hasSize(1); assertThat(result.getErrors().getFirst().getMessage()).startsWith("Failed to decode: Unrecognized token"); assertThat(result.getErrors().getFirst().getType()).isEqualTo(BidderError.Type.bad_server_response); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(null, mapper.writeValueAsString(null)); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(null, mapper.writeValueAsString(BidResponse.builder().build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnBannerBidIfBannerIsPresent() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBidIfBannerIsPresent() throws JsonProcessingException { // given final BidRequest bidRequest = BidRequest.builder() .imp(singletonList(Imp.builder().id("123").banner(Banner.builder().build()).build())) @@ -436,16 +429,16 @@ public void makeBidderResponseShouldReturnBannerBidIfBannerIsPresent() throws Js givenBidResponse(bidBuilder -> bidBuilder.impid("123")))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .containsOnly(BidderBid.of(Bid.builder().impid("123").build(), BidType.banner, "EUR")); } @Test - public void makeBidderResponseShouldReturnNativeBidIfNativeIsPresent() throws JsonProcessingException { + public void makeBidsShouldReturnNativeBidIfNativeIsPresent() throws JsonProcessingException { // given final BidRequest bidRequest = BidRequest.builder() .imp(singletonList(Imp.builder().id("123").xNative(Native.builder().build()).build())) @@ -456,16 +449,16 @@ public void makeBidderResponseShouldReturnNativeBidIfNativeIsPresent() throws Js givenBidResponse(bidBuilder -> bidBuilder.impid("123")))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .containsOnly(BidderBid.of(Bid.builder().impid("123").build(), BidType.xNative, "EUR")); } @Test - public void makeBidderResponseShouldReturnAudioBidIfAudioIsPresent() throws JsonProcessingException { + public void makeBidsShouldReturnAudioBidIfAudioIsPresent() throws JsonProcessingException { // given final BidRequest bidRequest = BidRequest.builder() .imp(singletonList(Imp.builder().id("123").audio(Audio.builder().build()).build())) @@ -476,16 +469,16 @@ public void makeBidderResponseShouldReturnAudioBidIfAudioIsPresent() throws Json givenBidResponse(bidBuilder -> bidBuilder.impid("123")))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .containsOnly(BidderBid.of(Bid.builder().impid("123").build(), BidType.audio, "EUR")); } @Test - public void makeBidderResponseShouldReturnErrorIfImpNotMatched() throws JsonProcessingException { + public void makeBidsShouldReturnErrorIfImpNotMatched() throws JsonProcessingException { // given final BidRequest bidRequest = BidRequest.builder() .imp(singletonList(Imp.builder().id("123").build())) @@ -496,15 +489,15 @@ public void makeBidderResponseShouldReturnErrorIfImpNotMatched() throws JsonProc givenBidResponse(bidBuilder -> bidBuilder.impid("489")))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); assertThat(result.getErrors()).containsExactly(BidderError.badServerResponse("Unmatched impression id 489")); } @Test - public void makeBidderResponseShouldReturnBidWithVideoInfo() throws JsonProcessingException { + public void makeBidsShouldReturnBidWithVideoInfo() throws JsonProcessingException { // given final Video video = Video.builder().build(); final BidRequest bidRequest = BidRequest.builder() @@ -521,18 +514,18 @@ public void makeBidderResponseShouldReturnBidWithVideoInfo() throws JsonProcessi .build()))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getVideoInfo) .extracting(ExtBidPrebidVideo::getDuration, ExtBidPrebidVideo::getPrimaryCategory) .containsExactly(tuple(1, null)); } @Test - public void makeBidderResponseShouldReturnAdmContainingImageTrackersUrls() throws JsonProcessingException { + public void makeBidsShouldReturnAdmContainingImageTrackersUrls() throws JsonProcessingException { // given final String adm = mapper.writeValueAsString( Response.builder() @@ -553,7 +546,7 @@ public void makeBidderResponseShouldReturnAdmContainingImageTrackersUrls() throw .adm(adm)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then final Response expectedNativeResponse = Response.builder() @@ -565,14 +558,14 @@ public void makeBidderResponseShouldReturnAdmContainingImageTrackersUrls() throw .build(); assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) .containsExactly(mapper.writeValueAsString(expectedNativeResponse)); } @Test - public void makeBidderResponseShouldReturnAdmContainingImpTrackersAndEventImpTrackersUrls() + public void makeBidsShouldReturnAdmContainingImpTrackersAndEventImpTrackersUrls() throws JsonProcessingException { // given final String adm = mapper.writeValueAsString( @@ -594,7 +587,7 @@ public void makeBidderResponseShouldReturnAdmContainingImpTrackersAndEventImpTra .adm(adm)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then final Response expectedNativeResponse = Response.builder() @@ -606,14 +599,14 @@ public void makeBidderResponseShouldReturnAdmContainingImpTrackersAndEventImpTra .build(); assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) .containsExactly(mapper.writeValueAsString(expectedNativeResponse)); } @Test - public void makeBidderResponseShouldReturnAdmContainingEventImpTrackersUrlsWhenImpTrackersAreNull() + public void makeBidsShouldReturnAdmContainingEventImpTrackersUrlsWhenImpTrackersAreNull() throws JsonProcessingException { // given final String adm = mapper.writeValueAsString( @@ -634,11 +627,11 @@ public void makeBidderResponseShouldReturnAdmContainingEventImpTrackersUrlsWhenI .adm(adm)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then final Response expectedNativeResponse = Response.builder() - .imptrackers(asList("eventUrl")) + .imptrackers(singletonList("eventUrl")) .eventtrackers(singletonList(EventTracker.builder() .event(EventType.IMPRESSION.getValue()) .url("eventUrl") @@ -646,14 +639,14 @@ public void makeBidderResponseShouldReturnAdmContainingEventImpTrackersUrlsWhenI .build(); assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) .containsExactly(mapper.writeValueAsString(expectedNativeResponse)); } @Test - public void makeBidderResponseShouldReturnAdmWithoutImpTrackers() + public void makeBidsShouldReturnAdmWithoutImpTrackers() throws JsonProcessingException { // given final String adm = mapper.writeValueAsString( @@ -674,7 +667,7 @@ public void makeBidderResponseShouldReturnAdmWithoutImpTrackers() .adm(adm)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then final Response expectedNativeResponse = Response.builder() @@ -686,14 +679,14 @@ public void makeBidderResponseShouldReturnAdmWithoutImpTrackers() .build(); assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) .containsExactly(mapper.writeValueAsString(expectedNativeResponse)); } @Test - public void makeBidderResponseShouldReturnAdmContainingOnlyUniqueImpTrackersUrls() throws JsonProcessingException { + public void makeBidsShouldReturnAdmContainingOnlyUniqueImpTrackersUrls() throws JsonProcessingException { // given final String adm = mapper.writeValueAsString( Response.builder() @@ -718,11 +711,11 @@ public void makeBidderResponseShouldReturnAdmContainingOnlyUniqueImpTrackersUrls .adm(adm)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) .extracting(bidAdm -> mapper.readValue(bidAdm, Response.class)) @@ -731,7 +724,7 @@ public void makeBidderResponseShouldReturnAdmContainingOnlyUniqueImpTrackersUrls } @Test - public void makeBidderResponseShouldReturnValidAdmIfNativeIsPresentInImpAndAdm12() throws JsonProcessingException { + public void makeBidsShouldReturnValidAdmIfNativeIsPresentInImpAndAdm12() throws JsonProcessingException { // given final String adm = mapper.writeValueAsString(NativeV11Wrapper.of( Response.builder() @@ -753,7 +746,7 @@ public void makeBidderResponseShouldReturnValidAdmIfNativeIsPresentInImpAndAdm12 .adm(adm)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then final NativeV11Wrapper expectedNativeResponse = NativeV11Wrapper.of(Response.builder() @@ -766,14 +759,14 @@ public void makeBidderResponseShouldReturnValidAdmIfNativeIsPresentInImpAndAdm12 .build()); assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) .containsExactly(mapper.writeValueAsString(expectedNativeResponse)); } @Test - public void makeBidderResponseShouldReturnBannerBidIfMTypeIsOne() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBidIfMTypeIsOne() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -792,17 +785,17 @@ public void makeBidderResponseShouldReturnBannerBidIfMTypeIsOne() throws JsonPro .mtype(1)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.banner); } @Test - public void makeBidderResponseShouldReturnVideoBidIfMTypeIsTwo() throws JsonProcessingException { + public void makeBidsShouldReturnVideoBidIfMTypeIsTwo() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -822,17 +815,17 @@ public void makeBidderResponseShouldReturnVideoBidIfMTypeIsTwo() throws JsonProc .mtype(2)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.video); } @Test - public void makeBidderResponseShouldReturnAudioBidIfMTypeIsThree() throws JsonProcessingException { + public void makeBidsShouldReturnAudioBidIfMTypeIsThree() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -851,17 +844,17 @@ public void makeBidderResponseShouldReturnAudioBidIfMTypeIsThree() throws JsonPr .mtype(3)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.audio); } @Test - public void makeBidderResponseShouldReturnNativeBidIfMTypeIsFour() throws JsonProcessingException { + public void makeBidsShouldReturnNativeBidIfMTypeIsFour() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -880,17 +873,17 @@ public void makeBidderResponseShouldReturnNativeBidIfMTypeIsFour() throws JsonPr .mtype(4)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.xNative); } @Test - public void makeBidderResponseShouldReturnCorrectTypeExtPrebidTypeInResponse() throws JsonProcessingException { + public void makeBidsShouldReturnCorrectTypeExtPrebidTypeInResponse() throws JsonProcessingException { // given final Banner banner = Banner.builder().w(300).h(200).build(); final Video video = Video.builder().build(); @@ -910,47 +903,15 @@ public void makeBidderResponseShouldReturnCorrectTypeExtPrebidTypeInResponse() t .set("prebid", mapper.createObjectNode().put("type", "video")))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.video); } - @Test - public void makeBidderResponseShouldReturnFledgeAuctionConfig() throws JsonProcessingException { - // given - final String impId = "imp_id"; - final BidResponse bidResponse = givenBidResponse(bidBuilder -> bidBuilder.impid(impId).mtype(1)); - final ObjectNode auctionConfig = mapper.createObjectNode(); - final BidRequest bidRequest = BidRequest.builder() - .imp(List.of(Imp.builder().id(impId).build())) - .build(); - final IxBidResponse bidResponseWithFledge = IxBidResponse.builder() - .cur(bidResponse.getCur()) - .seatbid(bidResponse.getSeatbid()) - .ext(IxExtBidResponse.of(List.of(AuctionConfigExtBidResponse.of(impId, auctionConfig)))) - .build(); - final BidderCall httpCall = - givenHttpCall(bidRequest, mapper.writeValueAsString(bidResponseWithFledge)); - - // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); - - // then - final ExtIgiIgs igs = ExtIgiIgs.builder() - .impId(impId) - .config(auctionConfig) - .build(); - - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) - .containsOnly(BidderBid.of(Bid.builder().impid(impId).mtype(1).build(), banner, bidResponse.getCur())); - assertThat(result.getIgi()).containsExactly(ExtIgi.builder().igs(singletonList(igs)).build()); - } - private static ExtRequest givenExtRequest(String pbjsv) { return ExtRequest.of(ExtRequestPrebid.builder() .channel(ExtRequestPrebidChannel.of("pbjs", pbjsv)) diff --git a/src/test/java/org/prebid/server/bidder/medianet/MedianetBidderTest.java b/src/test/java/org/prebid/server/bidder/medianet/MedianetBidderTest.java index 03a3cba66f8..18be44dabbb 100644 --- a/src/test/java/org/prebid/server/bidder/medianet/MedianetBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/medianet/MedianetBidderTest.java @@ -9,26 +9,18 @@ import com.iab.openrtb.response.SeatBid; import org.junit.jupiter.api.Test; import org.prebid.server.VertxTest; -import org.prebid.server.bidder.medianet.model.response.InterestGroupAuctionIntent; -import org.prebid.server.bidder.medianet.model.response.InterestGroupAuctionSeller; -import org.prebid.server.bidder.medianet.model.response.MedianetBidResponse; -import org.prebid.server.bidder.medianet.model.response.MedianetBidResponseExt; import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; import org.prebid.server.proto.openrtb.ext.ExtPrebid; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import java.util.ArrayList; import java.util.List; import java.util.function.Function; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; @@ -71,7 +63,7 @@ public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { final BidderCall httpCall = sampleHttpCall(givenBidRequest(), "invalid response"); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).hasSize(1) @@ -86,10 +78,10 @@ public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProces httpCall = sampleHttpCall(givenBidRequest(), mapper.writeValueAsString(null)); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); assertThat(result.getErrors()).isEmpty(); } @@ -100,10 +92,10 @@ public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws Jso httpCall = sampleHttpCall(null, mapper.writeValueAsString(BidResponse.builder().build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); assertThat(result.getErrors()).isEmpty(); } @@ -115,10 +107,10 @@ public void makeBidsShouldReturnBannerBidIfBannerIsPresent() throws JsonProcessi mapper.writeValueAsString(sampleBidResponse(bidBuilder -> bidBuilder.impid("123")))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getBids()) + assertThat(result.getValue()) .containsExactly(BidderBid.of(Bid.builder().impid("123").build(), banner, "USD")); assertThat(result.getErrors()).isEmpty(); } @@ -141,16 +133,16 @@ public void makeBidsShouldReturnCorrespondingMtypesAndAdTypes() throws JsonProce mapper.writeValueAsString(sampleMultiFormatBidResponse(bids))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getBids()).hasSize(4); + assertThat(result.getValue()).hasSize(4); assertThat(result.getErrors()).isEmpty(); final BidderBid bannerBid = BidderBid.of(bid1, banner, "USD"); final BidderBid videoBid = BidderBid.of(bid2, video, "USD"); final BidderBid audioBid = BidderBid.of(bid3, audio, "USD"); final BidderBid xNativeBid = BidderBid.of(bid4, xNative, "USD"); - assertThat(result.getBids()).containsExactlyInAnyOrder(bannerBid, videoBid, audioBid, xNativeBid); + assertThat(result.getValue()).containsExactlyInAnyOrder(bannerBid, videoBid, audioBid, xNativeBid); } @Test @@ -161,13 +153,13 @@ public void makeBidsShouldReturnAdTypeAccordingToImpressionIfMtypeIsAbsent() thr mapper.writeValueAsString(sampleBidResponse(bidBuilder -> bidBuilder.impid("imp_id")))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getBids()).hasSize(1); + assertThat(result.getValue()).hasSize(1); assertThat(result.getErrors()).isEmpty(); final BidderBid videoBid = BidderBid.of(Bid.builder().impid("imp_id").build(), video, "USD"); - assertThat(result.getBids()).containsExactly(videoBid); + assertThat(result.getValue()).containsExactly(videoBid); } @Test @@ -179,13 +171,13 @@ public void makeBidsShouldReturnBannerAdTypeIfMtypeIsAbsentAndIfNoImpressionIdMa mapper.writeValueAsString(sampleBidResponse(bidBuilder -> bidBuilder.impid("imp_id2")))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getBids()).hasSize(1); + assertThat(result.getValue()).hasSize(1); assertThat(result.getErrors()).isEmpty(); final BidderBid bannerBid = BidderBid.of(Bid.builder().impid("imp_id2").build(), banner, "USD"); - assertThat(result.getBids()).containsExactly(bannerBid); + assertThat(result.getValue()).containsExactly(bannerBid); } @Test @@ -196,60 +188,18 @@ public void makeBidsShouldReturnErrorIfMtypeIsWrong() throws JsonProcessingExcep mapper.writeValueAsString(sampleBidResponse(bidBuilder -> bidBuilder.impid("imp_id").mtype(5)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); assertThat(result.getErrors()).hasSize(1); final BidderError error = BidderError.badServerResponse("Unable to fetch mediaType: imp_id"); assertThat(result.getErrors()).containsExactly(error); } - @Test - public void makeBidsShouldReturnFledgeConfigIfBidIsPresent() throws JsonProcessingException { - // given - final BidderCall httpCall = sampleHttpCall( - givenBidRequest(), - mapper.writeValueAsString(sampleBidResponseWithFledgeConfig(bidBuilder -> bidBuilder.impid("imp_id")))); - - // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); - - // then - final ExtIgiIgs igs = ExtIgiIgs.builder() - .impId("imp_id") - .config(mapper.createObjectNode().put("someKey", "someValue")) - .build(); - - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1); - assertThat(result.getIgi()).containsExactly(ExtIgi.builder().igs(singletonList(igs)).build()); - } - - @Test - public void makeBidsShouldReturnFledgeConfigIfBidIsAbsent() throws JsonProcessingException { - // given - final BidderCall httpCall = sampleHttpCall( - givenBidRequest(), - mapper.writeValueAsString(sampleBidResponseWithoutBidAndWithFledgeConfig("imp_id"))); - - // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); - - // then - final ExtIgiIgs igs = ExtIgiIgs.builder() - .impId("imp_id") - .config(mapper.createObjectNode().put("someKey", "someValue")) - .build(); - - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); - assertThat(result.getIgi()).containsExactly(ExtIgi.builder().igs(singletonList(igs)).build()); - } - - private static MedianetBidResponse sampleBidResponse(Function bidCustomizer) { - return MedianetBidResponse.builder() + return BidResponse.builder() .cur("USD") .seatbid(singletonList(SeatBid.builder() .bid(singletonList(bidCustomizer.apply(Bid.builder()).build())) @@ -257,38 +207,8 @@ private static MedianetBidResponse sampleBidResponse(Function bidCustomizer) { - final Bid bid = bidCustomizer.apply(Bid.builder()).build(); - return MedianetBidResponse.builder() - .cur("USD") - .seatbid(singletonList(SeatBid.builder() - .bid(singletonList(bid)) - .build())) - .ext(MedianetBidResponseExt.of(List.of(InterestGroupAuctionIntent.builder() - .igs(List.of(InterestGroupAuctionSeller.builder() - .impId(bid.getImpid()) - .config(mapper.createObjectNode().put("someKey", "someValue")) - .build())) - .build()))) - .build(); - } - - private static MedianetBidResponse sampleBidResponseWithoutBidAndWithFledgeConfig(String impId) { - return MedianetBidResponse.builder() - .cur("USD") - .seatbid(emptyList()) - .ext(MedianetBidResponseExt.of(List.of(InterestGroupAuctionIntent.builder() - .igs(List.of(InterestGroupAuctionSeller.builder() - .impId(impId) - .config(mapper.createObjectNode().put("someKey", "someValue")) - .build())) - .build()))) - .build(); - } - - private static MedianetBidResponse sampleMultiFormatBidResponse(List bids) { - return MedianetBidResponse.builder() + private static BidResponse sampleMultiFormatBidResponse(List bids) { + return BidResponse.builder() .cur("USD") .seatbid(singletonList(SeatBid.builder() .bid(bids) diff --git a/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java b/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java index d8f26170ccb..31c043a4fc9 100644 --- a/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/ogury/OguryBidderTest.java @@ -21,7 +21,6 @@ import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; @@ -406,12 +405,12 @@ public void makeHttpRequestsShouldNotConvertPriceIfFloorIsAbsent() { } @Test - public void makeBidderResponseShouldReturnErrorIfResponseBodyCouldNotBeParsed() { + public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { // given final BidderCall httpCall = givenHttpCall("invalid"); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).hasSize(1) @@ -419,155 +418,155 @@ public void makeBidderResponseShouldReturnErrorIfResponseBodyCouldNotBeParsed() assertThat(error.getType()).isEqualTo(BidderError.Type.bad_server_response); assertThat(error.getMessage()).startsWith("Failed to decode: Unrecognized token"); }); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldNotReturnErrorWhenResponseBodyIsEmpty() throws JsonProcessingException { + public void makeBidsShouldNotReturnErrorWhenResponseBodyIsEmpty() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(null)); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(BidResponse.builder().build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseSeatBidIsEmpty() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsEmpty() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString(BidResponse.builder().seatbid(emptyList()).build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnErrorWhenBidMTypeIsNotPresent() throws JsonProcessingException { + public void makeBidsShouldReturnErrorWhenBidMTypeIsNotPresent() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.impid("123"))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()) .containsExactly(BidderError.badServerResponse("Missing MType for impression: `123`")); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnErrorWhenBidMTypeIsNotSupported() throws JsonProcessingException { + public void makeBidsShouldReturnErrorWhenBidMTypeIsNotSupported() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.impid("123").mtype(10))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()) .containsExactly(BidderError.badServerResponse("Unsupported MType '10', for impression '123'")); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnBannerBid() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.mtype(1))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.banner); } @Test - public void makeBidderResponseShouldReturnVideoBid() throws JsonProcessingException { + public void makeBidsShouldReturnVideoBid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.mtype(2))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.video); } @Test - public void makeBidderResponseShouldReturnAudioBid() throws JsonProcessingException { + public void makeBidsShouldReturnAudioBid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.mtype(3))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.audio); } @Test - public void makeBidderResponseShouldReturnNativeBid() throws JsonProcessingException { + public void makeBidsShouldReturnNativeBid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.mtype(4))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getType) .containsExactly(BidType.xNative); } @Test - public void makeBidderResponseShouldReturnBidWithCurFromResponse() throws JsonProcessingException { + public void makeBidsShouldReturnBidWithCurFromResponse() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( givenBidResponse(bid -> bid.mtype(1))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBidCurrency) .containsExactly("CUR"); } diff --git a/src/test/java/org/prebid/server/bidder/openx/OpenxBidderTest.java b/src/test/java/org/prebid/server/bidder/openx/OpenxBidderTest.java index fab9bedceb7..f5ba6094c17 100644 --- a/src/test/java/org/prebid/server/bidder/openx/OpenxBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/openx/OpenxBidderTest.java @@ -19,13 +19,10 @@ import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; import org.prebid.server.bidder.openx.proto.OpenxBidExt; -import org.prebid.server.bidder.openx.proto.OpenxBidResponse; -import org.prebid.server.bidder.openx.proto.OpenxBidResponseExt; import org.prebid.server.bidder.openx.proto.OpenxRequestExt; import org.prebid.server.bidder.openx.proto.OpenxVideoExt; import org.prebid.server.proto.openrtb.ext.ExtPrebid; @@ -36,8 +33,6 @@ import org.prebid.server.proto.openrtb.ext.request.openx.ExtImpOpenx; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import java.math.BigDecimal; import java.util.Collections; @@ -487,7 +482,6 @@ public void makeHttpRequestsShouldPassThroughImpExt() { .banner(Banner.builder().build()) .ext(mapper.valueToTree( Map.of( - "ae", 1, "bidder", Map.of("customParams", Map.of("param1", "value1")), "data", Map.of("pbadslot", "adslotvalue"), "gpid", "gpidvalue", @@ -502,7 +496,6 @@ public void makeHttpRequestsShouldPassThroughImpExt() { final ObjectNode expectedImpExt = mapper.valueToTree( Map.of( - "ae", 1, "customParams", Map.of("param1", "value1"), "data", Map.of("pbadslot", "adslotvalue"), "gpid", "gpidvalue", @@ -546,30 +539,6 @@ public void makeHttpRequestShouldReturnResultWithCustomBidFloorIfImpBidFloorIsZe .containsExactly(BigDecimal.valueOf(123)); } - @Test - public void makeHttpRequestShouldReturnResultWithAuctionEnvironment() { - // given - final BidRequest bidRequest = BidRequest.builder() - .imp(singletonList( - Imp.builder() - .id("impId2") - .banner(Banner.builder().build()) - .tagid("555555") - .ext(mapper.valueToTree(Map.of("ae", 1, "bidder", Map.of()))) - .build())) - .build(); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - assertThat(result.getValue()).hasSize(1) - .extracting(HttpRequest::getPayload) - .flatExtracting(BidRequest::getImp) - .extracting(Imp::getExt) - .contains(mapper.valueToTree(Map.of("ae", 1))); - } - @Test public void makeHttpRequestShouldReturnResultWithCustomBidFloorIfImpBidFloorIsNegative() { // given @@ -599,19 +568,19 @@ public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { final BidderCall httpCall = givenHttpCall("invalid"); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, BidRequest.builder().build()); + final Result> result = target.makeBids(httpCall, BidRequest.builder().build()); // then assertThat(result.getErrors()).hasSize(1) .allMatch(error -> error.getType() == BidderError.Type.bad_server_response && error.getMessage().startsWith("Failed to decode: Unrecognized token 'invalid'")); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test public void makeBidsShouldReturnResultForBannerBidsWithExpectedFields() throws JsonProcessingException { // given - final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(OpenxBidResponse.builder() + final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(BidResponse.builder() .seatbid(singletonList(SeatBid.builder() .bid(singletonList(Bid.builder() .w(200) @@ -624,7 +593,6 @@ public void makeBidsShouldReturnResultForBannerBidsWithExpectedFields() throws J .build())) .build())) .cur("UAH") - .ext(OpenxBidResponseExt.of(Map.of("impId1", mapper.createObjectNode().put("somevalue", 1)))) .build())); final BidRequest bidRequest = BidRequest.builder() @@ -636,18 +604,11 @@ public void makeBidsShouldReturnResultForBannerBidsWithExpectedFields() throws J .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then - final ExtIgi igi = ExtIgi.builder() - .igs(singletonList(ExtIgiIgs.builder() - .impId("impId1") - .config(mapper.createObjectNode().put("somevalue", 1)) - .build())) - .build(); - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .containsOnly(BidderBid.of( Bid.builder() .impid("impId1") @@ -659,13 +620,12 @@ public void makeBidsShouldReturnResultForBannerBidsWithExpectedFields() throws J .mtype(1) .build(), BidType.banner, "UAH")); - assertThat(result.getIgi()).containsExactly(igi); } @Test public void makeBidsShouldReturnResultForNativeBidsWithExpectedFields() throws JsonProcessingException { // given - final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(OpenxBidResponse.builder() + final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(BidResponse.builder() .seatbid(singletonList(SeatBid.builder() .bid(singletonList(Bid.builder() .w(200) @@ -677,7 +637,6 @@ public void makeBidsShouldReturnResultForNativeBidsWithExpectedFields() throws J .build())) .build())) .cur("UAH") - .ext(OpenxBidResponseExt.of(Map.of("impId1", mapper.createObjectNode().put("somevalue", 1)))) .build())); final BidRequest bidRequest = BidRequest.builder() @@ -689,11 +648,11 @@ public void makeBidsShouldReturnResultForNativeBidsWithExpectedFields() throws J .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .containsOnly(BidderBid.of( Bid.builder() .impid("impId1") @@ -734,11 +693,11 @@ public void makeBidsShouldReturnVideoInfoWhenAvailable() throws JsonProcessingEx .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .extracting(BidderBid::getVideoInfo) .containsExactly(ExtBidPrebidVideo.of(30, "category1")); } @@ -746,7 +705,7 @@ public void makeBidsShouldReturnVideoInfoWhenAvailable() throws JsonProcessingEx @Test public void makeBidsShouldReturnBidsWithTypeFromImpWhenNoMtype() throws JsonProcessingException { // given - final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(OpenxBidResponse.builder() + final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(BidResponse.builder() .seatbid(List.of( SeatBid.builder() .bid(singletonList(Bid.builder() @@ -797,11 +756,11 @@ public void makeBidsShouldReturnBidsWithTypeFromImpWhenNoMtype() throws JsonProc .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(3) + assertThat(result.getValue()).hasSize(3) .contains(BidderBid.builder() .bid(Bid.builder() .impid("impId1-banner") @@ -839,38 +798,6 @@ public void makeBidsShouldReturnBidsWithTypeFromImpWhenNoMtype() throws JsonProc .build()); } - @Test - public void makeBidsShouldReturnFledgeConfigEvenIfNoBids() throws JsonProcessingException { - // given - final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(OpenxBidResponse.builder() - .seatbid(emptyList()) - .ext(OpenxBidResponseExt.of(Map.of("impId1", mapper.createObjectNode().put("somevalue", 1)))) - .build())); - - final BidRequest bidRequest = BidRequest.builder() - .id("bidRequestId") - .imp(singletonList(Imp.builder() - .id("impId1") - .banner(Banner.builder().build()) - .build())) - .build(); - - // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); - - // then - final ExtIgi igi = ExtIgi.builder() - .igs(singletonList(ExtIgiIgs.builder() - .impId("impId1") - .config(mapper.createObjectNode().put("somevalue", 1)) - .build())) - .build(); - - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); - assertThat(result.getIgi()).containsExactly(igi); - } - @Test public void makeBidsShouldRespectMtypeWhenBothBannerAndVideoImpWithSameIdExist() throws JsonProcessingException { // given @@ -900,11 +827,11 @@ public void makeBidsShouldRespectMtypeWhenBothBannerAndVideoImpWithSameIdExist() .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .containsOnly( BidderBid.builder() .bid(Bid.builder() @@ -950,11 +877,11 @@ public void makeBidsShouldRespectBannerImpWhenBothBannerAndVideoImpWithSameIdExi .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .containsOnly(BidderBid.of( Bid.builder() .impid("impId1") @@ -975,12 +902,12 @@ public void makeBidsShouldReturnResultContainingEmptyValueAndErrorsWhenSeatBidEm mapper.writeValueAsString(BidResponse.builder().build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, BidRequest.builder().build()); + final Result> result = target.makeBids(httpCall, BidRequest.builder().build()); // then assertThat(result.getErrors()).isEmpty(); assertThat(result).isNotNull() - .extracting(CompositeBidderResponse::getBids, CompositeBidderResponse::getErrors) + .extracting(Result::getValue, Result::getErrors) .containsOnly(Collections.emptyList(), Collections.emptyList()); } @@ -1018,7 +945,7 @@ public void makeBidShouldReturnBidWithExtPrebidMetaContainingAllFieldsFromBidExt .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then final ObjectNode expectedExtWithBidMeta = mapper.createObjectNode() @@ -1031,7 +958,7 @@ public void makeBidShouldReturnBidWithExtPrebidMetaContainingAllFieldsFromBidExt .put("brandId", 3) .put("networkId", 1))); assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .extracting(BidderBid::getBid) .extracting(Bid::getExt) .containsExactly(expectedExtWithBidMeta); @@ -1069,7 +996,7 @@ public void makeBidShouldReturnBidWithExtPrebidMetaContainingBrandIdFieldOnly() .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then final ObjectNode expectedExtWithBidMeta = mapper.createObjectNode() @@ -1078,7 +1005,7 @@ public void makeBidShouldReturnBidWithExtPrebidMetaContainingBrandIdFieldOnly() .set("meta", mapper.createObjectNode() .put("brandId", 4))); assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .extracting(BidderBid::getBid) .extracting(Bid::getExt) .containsExactly(expectedExtWithBidMeta); @@ -1119,7 +1046,7 @@ public void makeBidShouldReturnBidWithExtPrebidMetaNotContainingFieldsWithInvali .build(); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, bidRequest); + final Result> result = target.makeBids(httpCall, bidRequest); // then final ObjectNode expectedExtWithBidMeta = mapper.createObjectNode() @@ -1127,7 +1054,7 @@ public void makeBidShouldReturnBidWithExtPrebidMetaNotContainingFieldsWithInvali .put("buyer_id", "xyz") .put("brand_id", "cba"); assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).hasSize(1) + assertThat(result.getValue()).hasSize(1) .extracting(BidderBid::getBid) .extracting(Bid::getExt) .containsExactly(expectedExtWithBidMeta); diff --git a/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java b/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java index bc4568396c6..e5211193ed9 100644 --- a/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java @@ -25,7 +25,6 @@ import org.prebid.server.bidder.model.BidderBid; import org.prebid.server.bidder.model.BidderCall; import org.prebid.server.bidder.model.BidderError; -import org.prebid.server.bidder.model.CompositeBidderResponse; import org.prebid.server.bidder.model.HttpRequest; import org.prebid.server.bidder.model.HttpResponse; import org.prebid.server.bidder.model.Result; @@ -33,8 +32,6 @@ import org.prebid.server.bidder.pubmatic.model.request.PubmaticExtDataAdServer; import org.prebid.server.bidder.pubmatic.model.request.PubmaticWrapper; import org.prebid.server.bidder.pubmatic.model.response.PubmaticBidExt; -import org.prebid.server.bidder.pubmatic.model.response.PubmaticBidResponse; -import org.prebid.server.bidder.pubmatic.model.response.PubmaticExtBidResponse; import org.prebid.server.bidder.pubmatic.model.response.VideoCreativeInfo; import org.prebid.server.proto.openrtb.ext.ExtPrebid; import org.prebid.server.proto.openrtb.ext.request.ExtApp; @@ -48,8 +45,6 @@ import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta; import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo; -import org.prebid.server.proto.openrtb.ext.response.ExtIgi; -import org.prebid.server.proto.openrtb.ext.response.ExtIgiIgs; import org.prebid.server.util.HttpUtil; import java.math.BigDecimal; @@ -719,7 +714,6 @@ public void makeHttpRequestsShouldAddImpExtAddUnitKeyKeyWordFromDataAdSlotIfAdSe ExtImpPubmatic.builder().build(), extData, null, - null, null ))) .build())) @@ -753,7 +747,6 @@ public void makeHttpRequestsShouldAddImpExtAddUnitKeyKeyWordFromAdServerAdSlotIf ExtImpPubmatic.builder().build(), extData, null, - null, null ))) .build())) @@ -788,7 +781,6 @@ public void makeHttpRequestsShouldAddImpExtWithKeyValWithDctrAndExtDataExceptFor ExtImpPubmatic.builder().dctr("dctr").build(), extData, null, - null, null ))) .build())) @@ -826,7 +818,6 @@ public void makeHttpRequestsShouldAddImpExtWithKeyValWithExtDataWhenDctrIsAbsent ExtImpPubmatic.builder().dctr(null).build(), extData, null, - null, null ))) .build())) @@ -846,31 +837,6 @@ public void makeHttpRequestsShouldAddImpExtWithKeyValWithExtDataWhenDctrIsAbsent .containsExactly(expectedImpExt); } - @Test - public void makeHttpRequestsShouldAddImpExtAddAE() { - // given - final BidRequest bidRequest = BidRequest.builder() - .imp(singletonList(Imp.builder() - .id("123") - .banner(Banner.builder().build()) - .ext(mapper.valueToTree(PubmaticBidderImpExt.of( - ExtImpPubmatic.builder().build(), null, 1, null, null))) - .build())) - .build(); - - // when - final Result>> result = target.makeHttpRequests(bidRequest); - - // then - final ObjectNode expectedImpExt = mapper.createObjectNode().put("ae", 1); - assertThat(result.getErrors()).isEmpty(); - assertThat(result.getValue()) - .extracting(HttpRequest::getPayload) - .flatExtracting(BidRequest::getImp) - .extracting(Imp::getExt) - .containsExactly(expectedImpExt); - } - @Test public void makeHttpRequestsShouldAddImpExtAddGpId() { // given @@ -879,7 +845,7 @@ public void makeHttpRequestsShouldAddImpExtAddGpId() { .id("123") .banner(Banner.builder().build()) .ext(mapper.valueToTree(PubmaticBidderImpExt.of( - ExtImpPubmatic.builder().build(), null, null, "gpId", null))) + ExtImpPubmatic.builder().build(), null, "gpId", null))) .build())) .build(); @@ -907,7 +873,7 @@ public void makeHttpRequestsShouldAddImpExtAddSkadn() { .id("123") .banner(Banner.builder().build()) .ext(mapper.valueToTree(PubmaticBidderImpExt.of( - ExtImpPubmatic.builder().build(), null, null, null, skadn))) + ExtImpPubmatic.builder().build(), null, null, skadn))) .build())) .build(); @@ -1249,56 +1215,56 @@ public void makeHttpRequestsShouldReplacePmZoneIDOldKeyNameWithNew() { } @Test - public void makeBidderResponseShouldReturnErrorIfResponseBodyCouldNotBeParsed() { + public void makeBidsShouldReturnErrorIfResponseBodyCouldNotBeParsed() { // given final BidderCall httpCall = givenHttpCall("invalid"); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).hasSize(1); assertThat(result.getErrors().getFirst().getMessage()).startsWith("Failed to decode: Unrecognized token"); assertThat(result.getErrors().getFirst().getType()).isEqualTo(BidderError.Type.bad_server_response); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString(null)); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { + public void makeBidsShouldReturnEmptyListIfBidResponseSeatBidIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString(BidResponse.builder().build())); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()).isEmpty(); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldReturnBannerBid() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBid() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder.impid("123").mtype(1)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); @@ -1306,12 +1272,12 @@ public void makeBidderResponseShouldReturnBannerBid() throws JsonProcessingExcep final ObjectNode expectedBidExt = mapper.createObjectNode().set("prebid", mapper.createObjectNode() .set("meta", mapper.createObjectNode().put("mediaType", "banner"))); - assertThat(result.getBids()).containsExactly(BidderBid.of( + assertThat(result.getValue()).containsExactly(BidderBid.of( Bid.builder().impid("123").mtype(1).ext(expectedBidExt).build(), banner, "USD")); } @Test - public void makeBidderResponseShouldReturnVideoBidWhenInBannerVideoIsTrue() throws JsonProcessingException { + public void makeBidsShouldReturnVideoBidWhenInBannerVideoIsTrue() throws JsonProcessingException { // given final ObjectNode givenBidExt = mapper.createObjectNode().put("ibv", true); final BidderCall httpCall = givenHttpCall( @@ -1319,7 +1285,7 @@ public void makeBidderResponseShouldReturnVideoBidWhenInBannerVideoIsTrue() thro bidBuilder -> bidBuilder.impid("123").mtype(1).ext(givenBidExt)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); @@ -1329,19 +1295,19 @@ public void makeBidderResponseShouldReturnVideoBidWhenInBannerVideoIsTrue() thro .set("prebid", mapper.createObjectNode() .set("meta", mapper.createObjectNode().put("mediaType", "video"))); - assertThat(result.getBids()).containsExactly(BidderBid.of( + assertThat(result.getValue()).containsExactly(BidderBid.of( Bid.builder().impid("123").mtype(1).ext(expectedBidExt).build(), banner, "USD")); } @Test - public void makeBidderResponseShouldReturnVideoBidIfExtBidContainsMtypeTwo() throws JsonProcessingException { + public void makeBidsShouldReturnVideoBidIfExtBidContainsMtypeTwo() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString( givenBidResponse(bidBuilder -> bidBuilder.impid("123").mtype(2)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); @@ -1349,19 +1315,19 @@ public void makeBidderResponseShouldReturnVideoBidIfExtBidContainsMtypeTwo() thr final ObjectNode expectedBidExt = mapper.createObjectNode().set("prebid", mapper.createObjectNode() .set("meta", mapper.createObjectNode().put("mediaType", "video"))); - assertThat(result.getBids()).containsExactly( + assertThat(result.getValue()).containsExactly( BidderBid.of(Bid.builder().impid("123").mtype(2).ext(expectedBidExt).build(), video, "USD")); } @Test - public void makeBidderResponseShouldReturnAudioBidIfExtBidContainsMtype3() throws JsonProcessingException { + public void makeBidsShouldReturnAudioBidIfExtBidContainsMtype3() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString( givenBidResponse(bidBuilder -> bidBuilder.impid("123").mtype(3)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); @@ -1369,18 +1335,18 @@ public void makeBidderResponseShouldReturnAudioBidIfExtBidContainsMtype3() throw final ObjectNode expectedBidExt = mapper.createObjectNode().set("prebid", mapper.createObjectNode() .set("meta", mapper.createObjectNode().put("mediaType", "audio"))); - assertThat(result.getBids()).containsExactly( + assertThat(result.getValue()).containsExactly( BidderBid.of(Bid.builder().impid("123").mtype(3).ext(expectedBidExt).build(), audio, "USD")); } @Test - public void makeBidderResponseShouldReturnXNativeBidIfExtBidContainsMtypeFour() throws JsonProcessingException { + public void makeBidsShouldReturnXNativeBidIfExtBidContainsMtypeFour() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder.impid("123").mtype(4)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); @@ -1388,12 +1354,12 @@ public void makeBidderResponseShouldReturnXNativeBidIfExtBidContainsMtypeFour() final ObjectNode expectedBidExt = mapper.createObjectNode().set("prebid", mapper.createObjectNode() .set("meta", mapper.createObjectNode().put("mediaType", "native"))); - assertThat(result.getBids()).containsExactly( + assertThat(result.getValue()).containsExactly( BidderBid.of(Bid.builder().impid("123").mtype(4).ext(expectedBidExt).build(), xNative, "USD")); } @Test - public void makeBidderResponseShouldFillExtBidPrebidVideoDurationIfDurationIsNotNull() + public void makeBidsShouldFillExtBidPrebidVideoDurationIfDurationIsNotNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( @@ -1403,7 +1369,7 @@ public void makeBidderResponseShouldFillExtBidPrebidVideoDurationIfDurationIsNot PubmaticBidExt.of(VideoCreativeInfo.of(1), null, null, null)))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); @@ -1414,12 +1380,12 @@ public void makeBidderResponseShouldFillExtBidPrebidVideoDurationIfDurationIsNot .meta(ExtBidPrebidMeta.builder().mediaType("video").build()) .video(ExtBidPrebidVideo.of(1, null)) .build())); - assertThat(result.getBids()).containsExactly( + assertThat(result.getValue()).containsExactly( BidderBid.of(Bid.builder().mtype(2).impid("123").ext(bidExt).build(), video, "USD")); } @Test - public void makeBidderResponseShouldNotFillExtBidPrebidVideoDurationIfDurationIsNull() + public void makeBidsShouldNotFillExtBidPrebidVideoDurationIfDurationIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( @@ -1429,7 +1395,7 @@ public void makeBidderResponseShouldNotFillExtBidPrebidVideoDurationIfDurationIs PubmaticBidExt.of(VideoCreativeInfo.of(null), null, null, null)))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); @@ -1439,12 +1405,12 @@ public void makeBidderResponseShouldNotFillExtBidPrebidVideoDurationIfDurationIs .meta(ExtBidPrebidMeta.builder().mediaType("banner").build()) .build())); - assertThat(result.getBids()).containsExactly( + assertThat(result.getValue()).containsExactly( BidderBid.of(Bid.builder().impid("123").mtype(1).ext(bidExt).build(), banner, "USD")); } @Test - public void makeBidderResponseShouldNotFillExtBidPrebidVideoDurationIfVideoIsNull() throws JsonProcessingException { + public void makeBidsShouldNotFillExtBidPrebidVideoDurationIfVideoIsNull() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString( @@ -1453,19 +1419,19 @@ public void makeBidderResponseShouldNotFillExtBidPrebidVideoDurationIfVideoIsNul PubmaticBidExt.of(null, null, null, null)))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); final ObjectNode expectedBidExt = mapper.createObjectNode().set("prebid", mapper.createObjectNode() .set("meta", mapper.createObjectNode().put("mediaType", "banner"))); - assertThat(result.getBids()).containsExactly(BidderBid.of( + assertThat(result.getValue()).containsExactly(BidderBid.of( Bid.builder().impid("123").mtype(1).ext(expectedBidExt).build(), banner, "USD")); } @Test - public void makeBidderResponseShouldFillDealPriorityData() throws JsonProcessingException { + public void makeBidsShouldFillDealPriorityData() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString( @@ -1474,17 +1440,17 @@ public void makeBidderResponseShouldFillDealPriorityData() throws JsonProcessing PubmaticBidExt.of(null, 12, null, null)))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getDealPriority) .containsExactly(12); } @Test - public void makeBidderResponseShouldFillSeat() throws JsonProcessingException { + public void makeBidsShouldFillSeat() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString( @@ -1493,17 +1459,17 @@ public void makeBidderResponseShouldFillSeat() throws JsonProcessingException { PubmaticBidExt.of(null, 12, "marketplace", null)))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getSeat) .containsExactly("marketplace"); } @Test - public void makeBidderResponseShouldParseNativeAdmData() throws JsonProcessingException { + public void makeBidsShouldParseNativeAdmData() throws JsonProcessingException { // given final ObjectNode admNode = mapper.createObjectNode(); final ObjectNode nativeNode = mapper.createObjectNode(); @@ -1517,18 +1483,18 @@ public void makeBidderResponseShouldParseNativeAdmData() throws JsonProcessingEx PubmaticBidExt.of(null, 12, null, null)))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) .containsExactly("{\"property1\":\"value1\"}"); } @Test - public void makeBidderResponseShouldTakeOnlyFirstCatElement() throws JsonProcessingException { + public void makeBidsShouldTakeOnlyFirstCatElement() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString( @@ -1536,14 +1502,14 @@ public void makeBidderResponseShouldTakeOnlyFirstCatElement() throws JsonProcess .cat(asList("cat1", "cat2"))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); final ObjectNode expectedBidExt = mapper.createObjectNode().set("prebid", mapper.createObjectNode() .set("meta", mapper.createObjectNode().put("mediaType", "banner"))); - assertThat(result.getBids()).containsExactly(BidderBid.of( + assertThat(result.getValue()).containsExactly(BidderBid.of( Bid.builder() .impid("123") .mtype(1) @@ -1554,52 +1520,22 @@ public void makeBidderResponseShouldTakeOnlyFirstCatElement() throws JsonProcess } @Test - public void makeBidderResponseShouldReturnBannerBidIfExtBidContainsIllegalBidType() throws JsonProcessingException { + public void makeBidsShouldReturnBannerBidIfExtBidContainsIllegalBidType() throws JsonProcessingException { // given final BidderCall httpCall = givenHttpCall( mapper.writeValueAsString(givenBidResponse(bidBuilder -> bidBuilder.impid("123").mtype(100)))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).containsExactly( BidderError.badServerResponse("failed to parse bid mtype (100) for impression id 123")); - assertThat(result.getBids()).isEmpty(); - } - - @Test - public void makeBidderResponseShouldReturnFledgeAuctionConfig() throws JsonProcessingException { - // given - final BidResponse bidResponse = givenBidResponse(bidBuilder -> bidBuilder.impid("imp_id")); - final ObjectNode auctionConfig = mapper.createObjectNode(); - final PubmaticBidResponse bidResponseWithFledge = PubmaticBidResponse.builder() - .cur(bidResponse.getCur()) - .seatbid(bidResponse.getSeatbid()) - .ext(PubmaticExtBidResponse.of(Map.of("imp_id", auctionConfig))) - .build(); - final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(bidResponseWithFledge)); - - // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); - - // then - assertThat(result.getErrors()).isEmpty(); - final ObjectNode expectedBidExt = mapper.createObjectNode().set("prebid", mapper.createObjectNode() - .set("meta", mapper.createObjectNode().put("mediaType", "banner"))); - - assertThat(result.getBids()).containsExactly(BidderBid.of( - Bid.builder().impid("imp_id").mtype(1).ext(expectedBidExt).build(), banner, "USD")); - - final ExtIgi igi = ExtIgi.builder() - .igs(singletonList(ExtIgiIgs.builder().impId("imp_id").config(auctionConfig).build())) - .build(); - - assertThat(result.getIgi()).containsExactly(igi); + assertThat(result.getValue()).isEmpty(); } @Test - public void makeBidderResponseShouldNotModifyAdmWhenNativeNodeIsNull() throws JsonProcessingException { + public void makeBidsShouldNotModifyAdmWhenNativeNodeIsNull() throws JsonProcessingException { // given final ObjectNode admNode = mapper.createObjectNode().put("otherField", "value"); final BidderCall httpCall = givenHttpCall( @@ -1610,28 +1546,16 @@ public void makeBidderResponseShouldNotModifyAdmWhenNativeNodeIsNull() throws Js PubmaticBidExt.of(null, 12, null, null)))))); // when - final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + final Result> result = target.makeBids(httpCall, null); // then assertThat(result.getErrors()).isEmpty(); - assertThat(result.getBids()) + assertThat(result.getValue()) .extracting(BidderBid::getBid) .extracting(Bid::getAdm) .containsExactly(admNode.toString()); } - @Test - public void makeBidsShouldFail() throws JsonProcessingException { - //given - final BidderCall httpCall = givenHttpCall(mapper.writeValueAsString(BidResponse.builder().build())); - - // when - final Result> result = target.makeBids(httpCall, null); - - // then - assertThat(result.getErrors()).containsExactly(BidderError.generic("Deprecated adapter method invoked")); - } - private ObjectNode givenExtImpWithKadfloor(String kadfloor) { return mapper.valueToTree(ExtPrebid.of(null, ExtImpPubmatic.builder().kadfloor(kadfloor).build())); } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-request.json b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-request.json index 6d99b8b6278..4e01ea521fa 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-auction-ix-request.json @@ -8,7 +8,6 @@ "h": 250 }, "ext": { - "ae": 1, "ix": { "siteId": "10002" } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-request.json index 0b9d5fb0aaf..14a887a39c4 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/ix/test-ix-bid-request.json @@ -15,10 +15,6 @@ "h": 250 }, "ext": { - "ae": 1, - "igs": { - "ae": 1 - }, "tid": "${json-unit.any-string}", "bidder": { "siteId": "10002" diff --git a/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-auction-pubmatic-request.json b/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-auction-pubmatic-request.json index 3a20b08ce67..c669ad1c3c5 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-auction-pubmatic-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-auction-pubmatic-request.json @@ -11,7 +11,6 @@ "h": 600 }, "ext": { - "ae": 1, "pubmatic": { "adSlot": "slot9@300x250:zzz", "publisherId": " publisherId ", diff --git a/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-pubmatic-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-pubmatic-bid-request.json index a34e904ffe5..b2429422810 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-pubmatic-bid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/pubmatic/test-pubmatic-bid-request.json @@ -14,7 +14,6 @@ "tagid": "slot9", "bidfloor": 0.12, "ext": { - "ae": 1, "pmZoneId": "Zone1,Zone2", "preference": "sports,movies", "dfp_ad_unit_code": "thirdPbAdSlot"