From 5c3c1ba464e4ef709543ce6bd60fe5f83169ce39 Mon Sep 17 00:00:00 2001 From: pkaczmarek Date: Thu, 6 Feb 2025 14:39:13 +0100 Subject: [PATCH 1/2] Admatic: Add headers #3707 --- .../server/bidder/admatic/AdmaticBidder.java | 19 +++++++++++- .../bidder/admatic/AdmaticBidderTest.java | 29 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java b/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java index 9f564a7275a..b52db9c8d72 100644 --- a/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java @@ -2,10 +2,12 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.iab.openrtb.request.BidRequest; +import com.iab.openrtb.request.Device; 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 io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -55,7 +57,10 @@ public Result>> makeHttpRequests(BidRequest request try { final AdmaticImpExt impExt = parseImpExt(imp); final BidRequest modifiedBidRequest = request.toBuilder().imp(Collections.singletonList(imp)).build(); - requests.add(BidderUtil.defaultRequest(modifiedBidRequest, resolveEndpoint(impExt), mapper)); + requests.add(BidderUtil.defaultRequest( + modifiedBidRequest, + headers(modifiedBidRequest.getDevice()), + resolveEndpoint(impExt), mapper)); } catch (PreBidException e) { errors.add(BidderError.badInput(e.getMessage())); } @@ -76,6 +81,18 @@ private String resolveEndpoint(AdmaticImpExt impExt) { return endpointUrl.replace(HOST_MACRO, HttpUtil.encodeUrl(impExt.getHost())); } + private MultiMap headers(Device device) { + final MultiMap headers = HttpUtil.headers(); + + if (device != null) { + HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.X_FORWARDED_FOR_HEADER, device.getIp()); + HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.X_FORWARDED_FOR_HEADER, device.getIpv6()); + HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.USER_AGENT_HEADER, device.getUa()); + } + + return headers; + } + @Override public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { try { diff --git a/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java b/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java index 00e4b785853..6bba63936f0 100644 --- a/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java @@ -4,6 +4,7 @@ import com.iab.openrtb.request.Audio; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; +import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Native; import com.iab.openrtb.request.Video; @@ -36,6 +37,8 @@ import static org.prebid.server.util.HttpUtil.ACCEPT_HEADER; import static org.prebid.server.util.HttpUtil.APPLICATION_JSON_CONTENT_TYPE; import static org.prebid.server.util.HttpUtil.CONTENT_TYPE_HEADER; +import static org.prebid.server.util.HttpUtil.USER_AGENT_HEADER; +import static org.prebid.server.util.HttpUtil.X_FORWARDED_FOR_HEADER; import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE; public class AdmaticBidderTest extends VertxTest { @@ -102,6 +105,32 @@ public void makeHttpRequestsShouldReturnExpectedHeaders() { assertThat(result.getErrors()).isEmpty(); } + @Test + public void makeHttpRequestsShouldReturnRequestsWithHeadersIfDeviceIsPresent() { + // given + final BidRequest bidRequest = givenBidRequest(identity()) + .toBuilder() + .device(Device.builder().ua("ua").ip("ip").ipv6("ipv6").build()) + .build(); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1).first() + .extracting(HttpRequest::getHeaders) + .satisfies(headers -> assertThat(headers.get(CONTENT_TYPE_HEADER)) + .isEqualTo(APPLICATION_JSON_CONTENT_TYPE)) + .satisfies(headers -> assertThat(headers.get(ACCEPT_HEADER)) + .isEqualTo(APPLICATION_JSON_VALUE)) + .satisfies(headers -> assertThat(headers.get(USER_AGENT_HEADER)) + .isEqualTo("ua")) + .satisfies(headers -> assertThat(headers.get(X_FORWARDED_FOR_HEADER)) + .isEqualTo("ip")); + assertThat(result.getErrors()).isEmpty(); + } + @Test public void shouldMakeOneRequestWhenOneImpIsValidAndAnotherIsNot() { // given From 7b60dee529b9fd3d48bd3e65bb023ed5f414c8a7 Mon Sep 17 00:00:00 2001 From: pkaczmarek Date: Mon, 17 Feb 2025 12:52:21 +0100 Subject: [PATCH 2/2] fix comments --- .../server/bidder/admatic/AdmaticBidder.java | 5 +++-- .../bidder/admatic/AdmaticBidderTest.java | 22 +++++++++---------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java b/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java index b52db9c8d72..08ed6c64903 100644 --- a/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java @@ -60,7 +60,8 @@ public Result>> makeHttpRequests(BidRequest request requests.add(BidderUtil.defaultRequest( modifiedBidRequest, headers(modifiedBidRequest.getDevice()), - resolveEndpoint(impExt), mapper)); + resolveEndpoint(impExt), + mapper)); } catch (PreBidException e) { errors.add(BidderError.badInput(e.getMessage())); } @@ -85,8 +86,8 @@ private MultiMap headers(Device device) { final MultiMap headers = HttpUtil.headers(); if (device != null) { - HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.X_FORWARDED_FOR_HEADER, device.getIp()); HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.X_FORWARDED_FOR_HEADER, device.getIpv6()); + HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.X_FORWARDED_FOR_HEADER, device.getIp()); HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.USER_AGENT_HEADER, device.getUa()); } diff --git a/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java b/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java index 6bba63936f0..87922f6e7ca 100644 --- a/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java @@ -98,10 +98,10 @@ public void makeHttpRequestsShouldReturnExpectedHeaders() { // then assertThat(result.getValue()).hasSize(1).first() .extracting(HttpRequest::getHeaders) - .satisfies(headers -> assertThat(headers.get(CONTENT_TYPE_HEADER)) - .isEqualTo(APPLICATION_JSON_CONTENT_TYPE)) - .satisfies(headers -> assertThat(headers.get(ACCEPT_HEADER)) - .isEqualTo(APPLICATION_JSON_VALUE)); + .satisfies(headers -> { + assertThat(headers.get(CONTENT_TYPE_HEADER)).isEqualTo(APPLICATION_JSON_CONTENT_TYPE); + assertThat(headers.get(ACCEPT_HEADER)).isEqualTo(APPLICATION_JSON_VALUE); + }); assertThat(result.getErrors()).isEmpty(); } @@ -120,14 +120,12 @@ public void makeHttpRequestsShouldReturnRequestsWithHeadersIfDeviceIsPresent() { assertThat(result.getErrors()).isEmpty(); assertThat(result.getValue()).hasSize(1).first() .extracting(HttpRequest::getHeaders) - .satisfies(headers -> assertThat(headers.get(CONTENT_TYPE_HEADER)) - .isEqualTo(APPLICATION_JSON_CONTENT_TYPE)) - .satisfies(headers -> assertThat(headers.get(ACCEPT_HEADER)) - .isEqualTo(APPLICATION_JSON_VALUE)) - .satisfies(headers -> assertThat(headers.get(USER_AGENT_HEADER)) - .isEqualTo("ua")) - .satisfies(headers -> assertThat(headers.get(X_FORWARDED_FOR_HEADER)) - .isEqualTo("ip")); + .satisfies(headers -> { + assertThat(headers.get(CONTENT_TYPE_HEADER)).isEqualTo(APPLICATION_JSON_CONTENT_TYPE); + assertThat(headers.get(ACCEPT_HEADER)).isEqualTo(APPLICATION_JSON_VALUE); + assertThat(headers.get(USER_AGENT_HEADER)).isEqualTo("ua"); + assertThat(headers.get(X_FORWARDED_FOR_HEADER)).isEqualTo("ipv6"); + }); assertThat(result.getErrors()).isEmpty(); }