From b0d9418c76fd88a785fecb9b190d9963e5530479 Mon Sep 17 00:00:00 2001 From: Danylo Date: Tue, 23 Dec 2025 20:36:13 +0100 Subject: [PATCH 1/4] Remove not expected fields from bidder request --- .../BidderRequestCleaner.java | 183 ++++++++++++++++-- 1 file changed, 172 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java b/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java index e470fcbbdd0..7a705975176 100644 --- a/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java +++ b/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java @@ -1,37 +1,198 @@ package org.prebid.server.auction.bidderrequestpostprocessor; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.BidRequest; import io.vertx.core.Future; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.prebid.server.auction.aliases.BidderAliases; import org.prebid.server.auction.model.AuctionContext; import org.prebid.server.auction.model.BidderRequest; +import org.prebid.server.bidder.model.Result; +import org.prebid.server.model.UpdateResult; import org.prebid.server.proto.openrtb.ext.request.ExtRequest; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestBidAdjustmentFactors; import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidAlternateBidderCodes; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidAlternateBidderCodesBidder; +import org.prebid.server.proto.openrtb.ext.request.ImpMediaType; + +import java.math.BigDecimal; +import java.util.Collections; +import java.util.EnumMap; +import java.util.Iterator; +import java.util.Map; public class BidderRequestCleaner implements BidderRequestPostProcessor { @Override - public Future process(BidderRequest bidderRequest, - BidderAliases aliases, - AuctionContext auctionContext) { + public Future> process(BidderRequest bidderRequest, + BidderAliases aliases, + AuctionContext auctionContext) { final BidRequest bidRequest = bidderRequest.getBidRequest(); - final ExtRequest ext = bidRequest.getExt(); + final UpdateResult cleanedExt = cleanExt(bidRequest.getExt(), bidderRequest.getBidder()); + + final BidderRequest cleanedBidderRequest = cleanedExt.isUpdated() + ? bidderRequest.with(bidRequest.toBuilder().ext(cleanedExt.getValue()).build()) + : bidderRequest; + + return Future.succeededFuture(Result.of(cleanedBidderRequest, Collections.emptyList())); + } + + private UpdateResult cleanExt(ExtRequest ext, String bidder) { final ExtRequestPrebid extPrebid = ext != null ? ext.getPrebid() : null; - final ObjectNode bidderControls = extPrebid != null ? extPrebid.getBiddercontrols() : null; + if (extPrebid == null) { + return UpdateResult.unaltered(ext); + } - if (bidderControls == null) { - return resultOf(bidderRequest); + final UpdateResult cleanedBidAdjustmentFactors = + cleanBidAdjustmentFactors(extPrebid.getBidadjustmentfactors(), bidder); + final UpdateResult cleanedBidAdjustments = + cleanBidAdjustments(extPrebid.getBidadjustments(), bidder); + final UpdateResult cleanedAlternateCodes = + cleanAlternateCodes(extPrebid.getAlternateBidderCodes(), bidder); + + if (!cleanedBidAdjustmentFactors.isUpdated() + && !cleanedBidAdjustments.isUpdated() + && !cleanedAlternateCodes.isUpdated() + && ObjectUtils.allNull( + extPrebid.getReturnallbidstatus(), + extPrebid.getAliasgvlids(), + extPrebid.getAdservertargeting(), + extPrebid.getCache(), + extPrebid.getEvents(), + extPrebid.getNosale(), + extPrebid.getBiddercontrols(), + extPrebid.getAnalytics(), + extPrebid.getPassthrough(), + extPrebid.getKvps())) { + + return UpdateResult.unaltered(ext); } - final ExtRequest cleanedExt = ExtRequest.of(extPrebid.toBuilder().biddercontrols(null).build()); + final ExtRequest cleanedExt = ExtRequest.of(extPrebid.toBuilder() + .returnallbidstatus(null) + .aliasgvlids(null) + .bidadjustmentfactors(cleanedBidAdjustmentFactors.getValue()) + .bidadjustments(cleanedBidAdjustments.getValue()) + .adservertargeting(null) + .cache(null) + .events(null) + .nosale(null) + .biddercontrols(null) + .analytics(null) + .passthrough(null) + .kvps(null) + .alternateBidderCodes(cleanedAlternateCodes.getValue()) + .build()); cleanedExt.addProperties(ext.getProperties()); - return resultOf(bidderRequest.with(bidRequest.toBuilder().ext(cleanedExt).build())); + return UpdateResult.updated(cleanedExt); + } + + private static UpdateResult cleanBidAdjustmentFactors( + ExtRequestBidAdjustmentFactors bidAdjustmentFactors, + String bidder) { + + if (bidAdjustmentFactors == null) { + return UpdateResult.unaltered(null); + } + + final Map cleanedAdjustments = + cleanBidderMap(bidAdjustmentFactors.getAdjustments(), bidder); + final EnumMap> cleanedMediaTypes = + cleanMediaTypes(bidAdjustmentFactors.getMediatypes(), bidder); + + if (cleanedAdjustments == null && cleanedMediaTypes == null) { + return UpdateResult.updated(null); + } + + final ExtRequestBidAdjustmentFactors cleanedBidAdjustmentFactors = ExtRequestBidAdjustmentFactors.builder() + .mediatypes(cleanedMediaTypes) + .build(); + if (cleanedAdjustments != null) { + cleanedAdjustments.forEach(cleanedBidAdjustmentFactors::addFactor); + } + + return UpdateResult.updated(cleanedBidAdjustmentFactors); + } + + private static Map cleanBidderMap(Map map, String bidder) { + if (map == null) { + return null; + } + + for (Map.Entry entry : map.entrySet()) { + if (StringUtils.equalsIgnoreCase(entry.getKey(), bidder)) { + return Collections.singletonMap(entry.getKey(), entry.getValue()); + } + } + + return null; } - private static Future resultOf(BidderRequest bidderRequest) { - return Future.succeededFuture(BidderRequestPostProcessingResult.withValue(bidderRequest)); + private static EnumMap> cleanMediaTypes( + EnumMap> mediaTypes, + String bidder) { + + if (mediaTypes == null) { + return null; + } + + final EnumMap> cleanedMediaTypes = new EnumMap<>(ImpMediaType.class); + for (Map.Entry> entry : mediaTypes.entrySet()) { + final Map cleanedMap = cleanBidderMap(entry.getValue(), bidder); + if (cleanedMap != null) { + cleanedMediaTypes.put(entry.getKey(), cleanedMap); + } + } + + return !cleanedMediaTypes.isEmpty() ? cleanedMediaTypes : null; + } + + private static UpdateResult cleanBidAdjustments(ObjectNode bidAdjustments, String bidder) { + if (bidAdjustments == null) { + return UpdateResult.unaltered(null); + } + + final ObjectNode cleanedBidAdjustments = bidAdjustments.deepCopy(); + for (Iterator maps = cleanedBidAdjustments.elements(); maps.hasNext(); ) { + final JsonNode bidderMap = maps.next(); + if (!bidderMap.isObject()) { + continue; + } + + for (Iterator bidders = bidderMap.fieldNames(); bidders.hasNext(); ) { + if (!StringUtils.equalsIgnoreCase(bidders.next(), bidder)) { + bidders.remove(); + } + } + + if (bidderMap.isEmpty()) { + maps.remove(); + } + } + + return !cleanedBidAdjustments.isEmpty() + ? UpdateResult.updated(cleanedBidAdjustments) + : UpdateResult.updated(null); + } + + private static UpdateResult cleanAlternateCodes( + ExtRequestPrebidAlternateBidderCodes alternateBidderCodes, + String bidder) { + + final Map bidders = alternateBidderCodes != null + ? alternateBidderCodes.getBidders() + : null; + if (bidders == null) { + return UpdateResult.unaltered(alternateBidderCodes); + } + + return UpdateResult.updated(ExtRequestPrebidAlternateBidderCodes.of( + alternateBidderCodes.getEnabled(), + cleanBidderMap(bidders, bidder))); } } From e139a998b6b7c2f30f5333d2c2345e65b894e266 Mon Sep 17 00:00:00 2001 From: Danylo Date: Mon, 5 Jan 2026 15:32:01 +0100 Subject: [PATCH 2/4] Add units --- .../BidderRequestCleanerTest.java | 319 +++++++++++++++++- .../org/prebid/server/it/ApplicationTest.java | 8 +- .../it/amp/test-generic-bid-request.json | 10 - .../it/amp/test-genericAlias-bid-request.json | 10 - .../test-video-appnexus-bid-request-1.json | 3 - .../test-video-appnexus-bid-request-2.json | 3 - .../test-generic-bid-request.json | 3 - .../multi_bid/test-generic-bid-request-1.json | 9 - .../test-genericAlias-bid-request-1.json | 8 - 9 files changed, 314 insertions(+), 59 deletions(-) diff --git a/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java b/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java index 62e50c146bf..ab0cc806e0b 100644 --- a/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java +++ b/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java @@ -9,8 +9,22 @@ import org.prebid.server.VertxTest; import org.prebid.server.auction.model.BidderRequest; import org.prebid.server.proto.openrtb.ext.request.ExtRequest; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestBidAdjustmentFactors; import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidAlternateBidderCodes; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidAlternateBidderCodesBidder; +import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidCache; +import org.prebid.server.proto.openrtb.ext.request.ImpMediaType; +import java.math.BigDecimal; +import java.util.EnumMap; +import java.util.Map; +import java.util.function.UnaryOperator; + +import static java.util.Collections.emptyList; +import static java.util.Collections.emptyMap; +import static java.util.Collections.singleton; +import static java.util.function.UnaryOperator.identity; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(MockitoExtension.class) @@ -28,7 +42,7 @@ public void setUp() { @Test public void processShouldReturnSameRequest() { // given - final BidderRequest bidderRequest = givenBidderRequest(null); + final BidderRequest bidderRequest = givenBidderRequest(identity()); // when final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); @@ -39,9 +53,243 @@ public void processShouldReturnSameRequest() { } @Test - public void processShouldReturnCleanedRequest() { + public void processShouldCleanBidAdjustmentFactors() { + // given + final EnumMap> mediaTypes = new EnumMap<>(ImpMediaType.class); + mediaTypes.put(ImpMediaType.banner, Map.of("other", BigDecimal.ONE)); + mediaTypes.put(ImpMediaType.video, Map.of( + "other", BigDecimal.ONE, + "biddEr", BigDecimal.ONE)); + final ExtRequestBidAdjustmentFactors factors = ExtRequestBidAdjustmentFactors.builder() + .mediatypes(mediaTypes) + .build(); + factors.addFactor("bIdder", BigDecimal.ONE); + + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustmentfactors(factors)); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getBidadjustmentfactors) + .satisfies(factorsResult -> { + assertThat(factorsResult.getAdjustments()).containsExactly(Map.entry("bIdder", BigDecimal.ONE)); + assertThat(factorsResult.getMediatypes()).containsExactly( + Map.entry(ImpMediaType.video, Map.of("biddEr", BigDecimal.ONE))); + }); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveBidAdjustmentFactors() { + // given + final EnumMap> mediaTypes = new EnumMap<>(ImpMediaType.class); + mediaTypes.put(ImpMediaType.banner, Map.of("other", BigDecimal.ONE)); + final ExtRequestBidAdjustmentFactors factors = ExtRequestBidAdjustmentFactors.builder() + .mediatypes(mediaTypes) + .build(); + factors.addFactor("other", BigDecimal.ONE); + + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustmentfactors(factors)); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getBidadjustmentfactors) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldCleanBidAdjustments() { + // given + final ObjectNode bidAdjustments = mapper.valueToTree(Map.of( + "banner", Map.of("other", 1), + "video", Map.of("other", 1, "biddEr", 1))); + + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustments(bidAdjustments)); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getBidadjustments) + .isEqualTo(mapper.valueToTree(Map.of("video", Map.of("biddEr", 1)))); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveBidAdjustments() { + // given + final ObjectNode bidAdjustments = mapper.valueToTree(Map.of("banner", Map.of("other", 1))); + + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustments(bidAdjustments)); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getBidadjustments) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldCleanAlternateBidderCodes() { + // given + final ExtRequestPrebidAlternateBidderCodes codes = ExtRequestPrebidAlternateBidderCodes.of( + true, Map.of( + "other", ExtRequestPrebidAlternateBidderCodesBidder.of(true, singleton("otherV")), + "biddEr", ExtRequestPrebidAlternateBidderCodesBidder.of(true, singleton("bidderV")))); + + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.alternateBidderCodes(codes)); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getAlternateBidderCodes) + .isEqualTo(ExtRequestPrebidAlternateBidderCodes.of(true, Map.of( + "biddEr", ExtRequestPrebidAlternateBidderCodesBidder.of(true, singleton("bidderV"))))); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveReturnAllBidStatus() { + // given + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.returnallbidstatus(true)); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getReturnallbidstatus) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveAliasGvlIds() { + // given + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.aliasgvlids(emptyMap())); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getAliasgvlids) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveAdServerTargeting() { + // given + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.adservertargeting(emptyList())); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getAdservertargeting) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveCache() { // given - final BidderRequest bidderRequest = givenBidderRequest(mapper.createObjectNode()); + final BidderRequest bidderRequest = givenBidderRequest( + extPrebid -> extPrebid.cache(ExtRequestPrebidCache.EMPTY)); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getCache) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveEvents() { + // given + final BidderRequest bidderRequest = givenBidderRequest( + extPrebid -> extPrebid.events(mapper.createObjectNode())); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getEvents) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveNoSale() { + // given + final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.nosale(emptyList())); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getNosale) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveBidderControls() { + // given + final BidderRequest bidderRequest = givenBidderRequest( + extPrebid -> extPrebid.biddercontrols(mapper.createObjectNode())); // when final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); @@ -56,12 +304,69 @@ public void processShouldReturnCleanedRequest() { assertThat(result.getErrors()).isEmpty(); } - private static BidderRequest givenBidderRequest(ObjectNode bidderControls) { + @Test + public void processShouldRemoveAnalytics() { + // given + final BidderRequest bidderRequest = givenBidderRequest( + extPrebid -> extPrebid.analytics(mapper.createObjectNode())); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getAnalytics) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemovePassthrough() { + // given + final BidderRequest bidderRequest = givenBidderRequest( + extPrebid -> extPrebid.passthrough(mapper.createObjectNode())); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getPassthrough) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + @Test + public void processShouldRemoveKvps() { + // given + final BidderRequest bidderRequest = givenBidderRequest( + extPrebid -> extPrebid.kvps(mapper.createObjectNode())); + + // when + final Result result = target.process(bidderRequest, null, null).result(); + + // then + assertThat(result.getValue()) + .extracting(BidderRequest::getBidRequest) + .extracting(BidRequest::getExt) + .extracting(ExtRequest::getPrebid) + .extracting(ExtRequestPrebid::getKvps) + .isNull(); + assertThat(result.getErrors()).isEmpty(); + } + + private static BidderRequest givenBidderRequest( + UnaryOperator extPrebidCustomizer) { + return BidderRequest.builder() .bidRequest(BidRequest.builder() - .ext(ExtRequest.of(ExtRequestPrebid.builder() - .biddercontrols(bidderControls) - .build())) + .ext(ExtRequest.of(extPrebidCustomizer.apply(ExtRequestPrebid.builder()).build())) .build()) .bidder(BIDDER) .build(); diff --git a/src/test/java/org/prebid/server/it/ApplicationTest.java b/src/test/java/org/prebid/server/it/ApplicationTest.java index 3a3710c6e6e..f28c7d28939 100644 --- a/src/test/java/org/prebid/server/it/ApplicationTest.java +++ b/src/test/java/org/prebid/server/it/ApplicationTest.java @@ -130,18 +130,14 @@ public void openrtb2MultiBidAuctionShouldRespondWithMoreThanOneBid() throws IOEx WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/genericAlias-exchange")) .withRequestBody(equalToJson( - jsonFrom( - "openrtb2/multi_bid/test-genericAlias-bid-request-1.json" - ))) + jsonFrom("openrtb2/multi_bid/test-genericAlias-bid-request-1.json"))) .willReturn(aResponse().withBody(jsonFrom( "openrtb2/multi_bid/test-genericAlias-bid-response-1.json")))); // pre-bid cache WIRE_MOCK_RULE.stubFor(post(urlPathEqualTo("/cache")) .withRequestBody(equalToBidCacheRequest( - jsonFrom( - "openrtb2/multi_bid/test-cache-generic-genericAlias-request.json" - ))) + jsonFrom("openrtb2/multi_bid/test-cache-generic-genericAlias-request.json"))) .willReturn(aResponse() .withTransformers("cache-response-transformer") .withTransformerParameter("matcherName", diff --git a/src/test/resources/org/prebid/server/it/amp/test-generic-bid-request.json b/src/test/resources/org/prebid/server/it/amp/test-generic-bid-request.json index 4d45a82bbc0..fdba46fb7d2 100644 --- a/src/test/resources/org/prebid/server/it/amp/test-generic-bid-request.json +++ b/src/test/resources/org/prebid/server/it/amp/test-generic-bid-request.json @@ -104,9 +104,6 @@ "storedrequest": { "id": "test-amp-stored-request" }, - "cache": { - "bids": {} - }, "auctiontimestamp": 0, "amp": { "data": { @@ -124,13 +121,6 @@ "account": "accountId" } }, - "adservertargeting": [ - { - "key": "static_keyword1", - "source": "static", - "value": "static_value1" - } - ], "channel": { "name": "amp" }, diff --git a/src/test/resources/org/prebid/server/it/amp/test-genericAlias-bid-request.json b/src/test/resources/org/prebid/server/it/amp/test-genericAlias-bid-request.json index 65febdb9a16..afccf4ce628 100644 --- a/src/test/resources/org/prebid/server/it/amp/test-genericAlias-bid-request.json +++ b/src/test/resources/org/prebid/server/it/amp/test-genericAlias-bid-request.json @@ -102,9 +102,6 @@ "storedrequest": { "id": "test-amp-stored-request" }, - "cache": { - "bids": {} - }, "auctiontimestamp": 0, "amp": { "data": { @@ -122,13 +119,6 @@ "timeout": "10000000" } }, - "adservertargeting": [ - { - "key": "static_keyword1", - "source": "static", - "value": "static_value1" - } - ], "channel": { "name": "amp" }, diff --git a/src/test/resources/org/prebid/server/it/openrtb2/appnexus/test-video-appnexus-bid-request-1.json b/src/test/resources/org/prebid/server/it/openrtb2/appnexus/test-video-appnexus-bid-request-1.json index 5e19435fdc2..1d07d919797 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/appnexus/test-video-appnexus-bid-request-1.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/appnexus/test-video-appnexus-bid-request-1.json @@ -303,9 +303,6 @@ "translatecategories": false } }, - "cache": { - "vastxml": {} - }, "channel": { "name": "web" } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/appnexus/test-video-appnexus-bid-request-2.json b/src/test/resources/org/prebid/server/it/openrtb2/appnexus/test-video-appnexus-bid-request-2.json index 1b09479f3ea..43d91e2e81c 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/appnexus/test-video-appnexus-bid-request-2.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/appnexus/test-video-appnexus-bid-request-2.json @@ -96,9 +96,6 @@ "translatecategories": false } }, - "cache": { - "vastxml": {} - }, "channel": { "name": "web" } diff --git a/src/test/resources/org/prebid/server/it/openrtb2/generic_core_functionality/test-generic-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/generic_core_functionality/test-generic-bid-request.json index 754ed9ddfff..da6529ee46c 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/generic_core_functionality/test-generic-bid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/generic_core_functionality/test-generic-bid-request.json @@ -94,9 +94,6 @@ "includewinners" : true, "includebidderkeys" : true }, - "cache" : { - "bids" : { } - }, "auctiontimestamp" : 0, "server" : { "externalurl" : "http://localhost:8080", diff --git a/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-generic-bid-request-1.json b/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-generic-bid-request-1.json index 0c72e7ce2a4..19637b681f7 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-generic-bid-request-1.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-generic-bid-request-1.json @@ -22,13 +22,6 @@ "ext": { "prebid": { "auctiontimestamp": 1000, - "cache": { - "bids": { - }, - "vastxml": { - "ttlseconds": 120 - } - }, "channel": { "name": "web" }, @@ -44,8 +37,6 @@ "usepbsrates": false }, "debug": 0, - "events": { - }, "multibid": [ { "bidder": "generic", diff --git a/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-genericAlias-bid-request-1.json b/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-genericAlias-bid-request-1.json index f44b91769f3..c4deb7877af 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-genericAlias-bid-request-1.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/multi_bid/test-genericAlias-bid-request-1.json @@ -104,14 +104,6 @@ "includewinners": true, "includebidderkeys": true }, - "cache": { - "bids": { - }, - "vastxml": { - "ttlseconds": 120 - } - }, - "events": {}, "auctiontimestamp": 1000, "channel": { "name": "web" From 92de9191a819c601b540c88a2a5a423763d50432 Mon Sep 17 00:00:00 2001 From: Danylo Date: Thu, 8 Jan 2026 16:09:49 +0100 Subject: [PATCH 3/4] Fix bug --- .../BidderRequestCleaner.java | 5 +++-- .../BidderRequestCleanerTest.java | 10 ++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java b/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java index 7a705975176..fff39f2090c 100644 --- a/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java +++ b/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java @@ -158,7 +158,8 @@ private static UpdateResult cleanBidAdjustments(ObjectNode bidAdjust } final ObjectNode cleanedBidAdjustments = bidAdjustments.deepCopy(); - for (Iterator maps = cleanedBidAdjustments.elements(); maps.hasNext(); ) { + final JsonNode mediaTypeToBidAdjustments = cleanedBidAdjustments.path("mediatype"); + for (Iterator maps = mediaTypeToBidAdjustments.elements(); maps.hasNext(); ) { final JsonNode bidderMap = maps.next(); if (!bidderMap.isObject()) { continue; @@ -175,7 +176,7 @@ private static UpdateResult cleanBidAdjustments(ObjectNode bidAdjust } } - return !cleanedBidAdjustments.isEmpty() + return !mediaTypeToBidAdjustments.isEmpty() ? UpdateResult.updated(cleanedBidAdjustments) : UpdateResult.updated(null); } diff --git a/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java b/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java index ab0cc806e0b..8f02173f6b4 100644 --- a/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java +++ b/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java @@ -113,8 +113,9 @@ public void processShouldRemoveBidAdjustmentFactors() { public void processShouldCleanBidAdjustments() { // given final ObjectNode bidAdjustments = mapper.valueToTree(Map.of( - "banner", Map.of("other", 1), - "video", Map.of("other", 1, "biddEr", 1))); + "mediatype", Map.of( + "banner", Map.of("other", 1), + "video", Map.of("other", 1, "biddEr", 1)))); final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustments(bidAdjustments)); @@ -127,14 +128,15 @@ public void processShouldCleanBidAdjustments() { .extracting(BidRequest::getExt) .extracting(ExtRequest::getPrebid) .extracting(ExtRequestPrebid::getBidadjustments) - .isEqualTo(mapper.valueToTree(Map.of("video", Map.of("biddEr", 1)))); + .isEqualTo(mapper.valueToTree(Map.of("mediatype", Map.of("video", Map.of("biddEr", 1))))); assertThat(result.getErrors()).isEmpty(); } @Test public void processShouldRemoveBidAdjustments() { // given - final ObjectNode bidAdjustments = mapper.valueToTree(Map.of("banner", Map.of("other", 1))); + final ObjectNode bidAdjustments = mapper.valueToTree(Map.of( + "mediatype", Map.of("banner", Map.of("other", 1)))); final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustments(bidAdjustments)); From ea8225a1d74a2567636f745371d1d21973e20fbc Mon Sep 17 00:00:00 2001 From: Danylo Date: Thu, 15 Jan 2026 13:54:45 +0100 Subject: [PATCH 4/4] Resolve conflicts --- .../BidderRequestCleaner.java | 9 +++--- .../BidderRequestCleanerTest.java | 28 +++++++++---------- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java b/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java index fff39f2090c..6b311f878d1 100644 --- a/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java +++ b/src/main/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleaner.java @@ -9,7 +9,6 @@ import org.prebid.server.auction.aliases.BidderAliases; import org.prebid.server.auction.model.AuctionContext; import org.prebid.server.auction.model.BidderRequest; -import org.prebid.server.bidder.model.Result; import org.prebid.server.model.UpdateResult; import org.prebid.server.proto.openrtb.ext.request.ExtRequest; import org.prebid.server.proto.openrtb.ext.request.ExtRequestBidAdjustmentFactors; @@ -27,9 +26,9 @@ public class BidderRequestCleaner implements BidderRequestPostProcessor { @Override - public Future> process(BidderRequest bidderRequest, - BidderAliases aliases, - AuctionContext auctionContext) { + public Future process(BidderRequest bidderRequest, + BidderAliases aliases, + AuctionContext auctionContext) { final BidRequest bidRequest = bidderRequest.getBidRequest(); final UpdateResult cleanedExt = cleanExt(bidRequest.getExt(), bidderRequest.getBidder()); @@ -38,7 +37,7 @@ public Future> process(BidderRequest bidderRequest, ? bidderRequest.with(bidRequest.toBuilder().ext(cleanedExt.getValue()).build()) : bidderRequest; - return Future.succeededFuture(Result.of(cleanedBidderRequest, Collections.emptyList())); + return Future.succeededFuture(BidderRequestPostProcessingResult.withValue(cleanedBidderRequest)); } private UpdateResult cleanExt(ExtRequest ext, String bidder) { diff --git a/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java b/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java index 8f02173f6b4..8e3781c469b 100644 --- a/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java +++ b/src/test/java/org/prebid/server/auction/bidderrequestpostprocessor/BidderRequestCleanerTest.java @@ -68,7 +68,7 @@ public void processShouldCleanBidAdjustmentFactors() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustmentfactors(factors)); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -97,7 +97,7 @@ public void processShouldRemoveBidAdjustmentFactors() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustmentfactors(factors)); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -120,7 +120,7 @@ public void processShouldCleanBidAdjustments() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustments(bidAdjustments)); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -141,7 +141,7 @@ public void processShouldRemoveBidAdjustments() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.bidadjustments(bidAdjustments)); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -164,7 +164,7 @@ public void processShouldCleanAlternateBidderCodes() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.alternateBidderCodes(codes)); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -183,7 +183,7 @@ public void processShouldRemoveReturnAllBidStatus() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.returnallbidstatus(true)); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -201,7 +201,7 @@ public void processShouldRemoveAliasGvlIds() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.aliasgvlids(emptyMap())); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -219,7 +219,7 @@ public void processShouldRemoveAdServerTargeting() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.adservertargeting(emptyList())); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -238,7 +238,7 @@ public void processShouldRemoveCache() { extPrebid -> extPrebid.cache(ExtRequestPrebidCache.EMPTY)); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -257,7 +257,7 @@ public void processShouldRemoveEvents() { extPrebid -> extPrebid.events(mapper.createObjectNode())); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -275,7 +275,7 @@ public void processShouldRemoveNoSale() { final BidderRequest bidderRequest = givenBidderRequest(extPrebid -> extPrebid.nosale(emptyList())); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -313,7 +313,7 @@ public void processShouldRemoveAnalytics() { extPrebid -> extPrebid.analytics(mapper.createObjectNode())); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -332,7 +332,7 @@ public void processShouldRemovePassthrough() { extPrebid -> extPrebid.passthrough(mapper.createObjectNode())); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue()) @@ -351,7 +351,7 @@ public void processShouldRemoveKvps() { extPrebid -> extPrebid.kvps(mapper.createObjectNode())); // when - final Result result = target.process(bidderRequest, null, null).result(); + final BidderRequestPostProcessingResult result = target.process(bidderRequest, null, null).result(); // then assertThat(result.getValue())