From 408e42801badecdbc4d86eff62146c75c6f97393 Mon Sep 17 00:00:00 2001 From: antonbabak Date: Wed, 27 Aug 2025 11:35:21 +0200 Subject: [PATCH] Pass ext.ixdiag fields through --- .../org/prebid/server/bidder/ix/IxBidder.java | 25 +++++-- .../bidder/ix/model/request/IxDiag.java | 15 ----- .../prebid/server/bidder/ix/IxBidderTest.java | 65 +++++++++++++++++-- .../openrtb2/ix/test-auction-ix-request.json | 9 +++ .../it/openrtb2/ix/test-ix-bid-request.json | 8 ++- 5 files changed, 95 insertions(+), 27 deletions(-) delete mode 100644 src/main/java/org/prebid/server/bidder/ix/model/request/IxDiag.java 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 12916afd6e7..5770772c1bd 100644 --- a/src/main/java/org/prebid/server/bidder/ix/IxBidder.java +++ b/src/main/java/org/prebid/server/bidder/ix/IxBidder.java @@ -21,7 +21,6 @@ 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.request.IxDiag; 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; @@ -65,6 +64,8 @@ public class IxBidder implements Bidder { private static final TypeReference> IX_EXT_TYPE_REFERENCE = new TypeReference<>() { }; + private static final String PBSP_JAVA = "java"; + private static final String PBS_VERSION_UNKNOWN = "unknown"; private final String endpointUrl; private final PrebidVersionProvider prebidVersionProvider; @@ -204,11 +205,11 @@ private ExtRequest modifyRequestExt(ExtRequest extRequest, Set siteIds) modifiedExt = ExtRequest.empty(); } - modifiedExt.addProperty("ixdiag", mapper.mapper().valueToTree(makeDiagData(extRequest, siteIds))); + modifiedExt.addProperty("ixdiag", makeDiagData(extRequest, siteIds)); return modifiedExt; } - private IxDiag makeDiagData(ExtRequest extRequest, Set siteIds) { + private ObjectNode makeDiagData(ExtRequest extRequest, Set siteIds) { final String pbjsv = Optional.ofNullable(extRequest) .map(ExtRequest::getPrebid) .map(ExtRequestPrebid::getChannel) @@ -221,7 +222,23 @@ private IxDiag makeDiagData(ExtRequest extRequest, Set siteIds) { ? siteIds.stream().sorted().collect(Collectors.joining(", ")) : null; - return IxDiag.of(pbsv, pbjsv, multipleSiteIds); + final ObjectNode ixdiag = Optional.ofNullable(extRequest) + .map(ext -> ext.getProperty("ixdiag")) + .filter(JsonNode::isObject) + .map(ObjectNode.class::cast) + .orElse(mapper.mapper().createObjectNode()) + .put("pbsv", pbsv == null ? PBS_VERSION_UNKNOWN : pbsv) + .put("pbsp", PBSP_JAVA); + + if (multipleSiteIds != null) { + ixdiag.put("multipleSiteIds", multipleSiteIds); + } + + if (pbjsv != null) { + ixdiag.put("pbjsv", pbjsv); + } + + return ixdiag; } @Override diff --git a/src/main/java/org/prebid/server/bidder/ix/model/request/IxDiag.java b/src/main/java/org/prebid/server/bidder/ix/model/request/IxDiag.java deleted file mode 100644 index b3323edb849..00000000000 --- a/src/main/java/org/prebid/server/bidder/ix/model/request/IxDiag.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.prebid.server.bidder.ix.model.request; - -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Value; - -@Value(staticConstructor = "of") -public class IxDiag { - - String pbsv; - - String pbjsv; - - @JsonProperty("multipleSiteIds") - String multipleSiteIds; -} 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 ee0fdfa3368..051077ab03e 100644 --- a/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/ix/IxBidderTest.java @@ -26,7 +26,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.prebid.server.VertxTest; -import org.prebid.server.bidder.ix.model.request.IxDiag; 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; @@ -191,8 +190,10 @@ public void makeHttpRequestsShouldReturnIxDiagWithPbjsVersionIfRequestExtPrebidC .extracting(HttpRequest::getPayload) .extracting(BidRequest::getExt) .extracting(ext -> ext.getProperty("ixdiag")) - .extracting(diagNode -> mapper.treeToValue(diagNode, IxDiag.class)) - .containsExactly(IxDiag.of(null, "pbjsv", null)); + .containsExactly(mapper.createObjectNode() + .put("pbsv", "unknown") + .put("pbjsv", "pbjsv") + .put("pbsp", "java")); } @Test @@ -210,8 +211,9 @@ public void makeHttpRequestsShouldReturnIxDiagWithPbsVersion() { .extracting(HttpRequest::getPayload) .extracting(BidRequest::getExt) .extracting(ext -> ext.getProperty("ixdiag")) - .extracting(diagNode -> mapper.treeToValue(diagNode, IxDiag.class)) - .containsExactly(IxDiag.of("pbsv", null, null)); + .containsExactly(mapper.createObjectNode() + .put("pbsv", "pbsv") + .put("pbsp", "java")); } @Test @@ -230,8 +232,51 @@ public void makeHttpRequestsShouldReturnIxDiagWithMultipleSiteIdsWhenMultipleImp .extracting(HttpRequest::getPayload) .extracting(BidRequest::getExt) .extracting(ext -> ext.getProperty("ixdiag")) - .extracting(diagNode -> mapper.treeToValue(diagNode, IxDiag.class)) - .containsExactly(IxDiag.of(null, null, "site1, site2")); + .containsExactly(mapper.createObjectNode() + .put("pbsv", "unknown") + .put("pbsp", "java") + .put("multipleSiteIds", "site1, site2")); + } + + @Test + public void makeHttpRequestsShouldPassThroughProvidedIxDiagFields() { + // given + given(prebidVersionProvider.getNameVersionRecord()).willReturn("pbsv1"); + final ObjectNode givenIxDiag = mapper.createObjectNode(); + givenIxDiag.put("pbsv", "pbsv2"); + givenIxDiag.put("pbjsv", "pbjsv2"); + givenIxDiag.put("pbsp", "go"); + givenIxDiag.put("multipleSiteIds", "site1"); + givenIxDiag.put("property1", "value"); + givenIxDiag.put("property2", 1); + + final BidRequest bidRequest = givenBidRequest( + bidRequestBuilder -> bidRequestBuilder.ext(givenExtRequestWithIxDiag( + "pbjsv1", + givenIxDiag)), + List.of( + impBuilder -> impBuilder.ext(givenImpExt("site1", null)), + impBuilder -> impBuilder.ext(givenImpExt("site2", null)))); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + + final ObjectNode expectedIxDiag = mapper.createObjectNode(); + expectedIxDiag.put("pbsv", "pbsv1"); + expectedIxDiag.put("pbjsv", "pbjsv1"); + expectedIxDiag.put("pbsp", "java"); + expectedIxDiag.put("multipleSiteIds", "site1, site2"); + expectedIxDiag.put("property1", "value"); + expectedIxDiag.put("property2", 1); + + assertThat(result.getValue()) + .extracting(HttpRequest::getPayload) + .extracting(BidRequest::getExt) + .extracting(ext -> ext.getProperty("ixdiag")) + .containsExactly(expectedIxDiag); } @Test @@ -886,6 +931,12 @@ private static ExtRequest givenExtRequest(String pbjsv) { .build()); } + private static ExtRequest givenExtRequestWithIxDiag(String pbjsv, ObjectNode ixDiag) { + final ExtRequest extRequest = givenExtRequest(pbjsv); + extRequest.addProperty("ixdiag", ixDiag); + return extRequest; + } + private static ObjectNode givenImpExt(String siteId, String sid) { return mapper.valueToTree(ExtPrebid.of(null, ExtImpIx.of(siteId, null, sid))); } 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 1fc85c3cd79..6d99b8b6278 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 @@ -20,5 +20,14 @@ "ext": { "gdpr": 0 } + }, + "ext": { + "ixdiag": { + "msd": 2, + "msi": 2, + "mfu": 0, + "ren": false, + "version": "6.29.1" + } } } 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 d27e2ec709c..0b9d5fb0aaf 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 @@ -62,7 +62,13 @@ } }, "ixdiag": { - "pbsv": "{{ pbs.java.version }}" + "pbsv": "{{ pbs.java.version }}", + "pbsp": "java", + "msd": 2, + "msi": 2, + "mfu": 0, + "ren": false, + "version": "6.29.1" } } }