From fe7175064fedc14f91e1b55c4ecae0ed76c972d4 Mon Sep 17 00:00:00 2001 From: johwier Date: Wed, 7 Jan 2026 10:42:38 -0800 Subject: [PATCH 1/2] Epsilon: pass prebid server version --- .../server/bidder/epsilon/EpsilonBidder.java | 13 ++-- .../config/bidder/EpsilonConfiguration.java | 3 + .../bidder/epsilon/EpsilonBidderTest.java | 67 +++++++++++++++++-- .../alias/test-epsilon-bid-request.json | 4 +- .../epsilon/test-epsilon-bid-request.json | 4 +- 5 files changed, 76 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java b/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java index 4be70d935fc..8ff166e59ff 100644 --- a/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java +++ b/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java @@ -57,21 +57,24 @@ public class EpsilonBidder implements Bidder { // Position of the ad as a relative measure of visibility or prominence private static final Set AD_POSITIONS = IntStream.range(0, 8).boxed().collect(Collectors.toSet()); - private static final String DISPLAY_MANAGER = "prebid-s2s"; - private static final String DISPLAY_MANAGER_VER = "2.0.0"; + private static final String DISPLAY_MANAGER = "prebid-s2s-java"; + private static final String VERSION_UNDEFINED = "undefined"; private final String endpointUrl; private final boolean generateBidId; private final JacksonMapper mapper; + private final String displayManagerVersion; public EpsilonBidder(String endpointUrl, boolean generateBidId, + String pbsVersion, JacksonMapper mapper, CurrencyConversionService currencyConversionService) { this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl)); this.generateBidId = generateBidId; this.mapper = Objects.requireNonNull(mapper); this.currencyConversionService = Objects.requireNonNull(currencyConversionService); + this.displayManagerVersion = VERSION_UNDEFINED.equals(pbsVersion) ? null : pbsVersion; } @Override @@ -96,7 +99,7 @@ private BidRequest createOutgoingRequest(BidRequest bidRequest) { final BigDecimal bidFloor = resolveBidFloor(bidRequest, imp.getBidfloorcur(), getBidFloor(imp.getBidfloor(), impExt.getBidfloor())); - modifiedImps.add(modifyImp(imp, impExt, bidFloor)); + modifiedImps.add(modifyImp(imp, impExt, bidFloor, displayManagerVersion)); } final Imp firstImp = requestImps.getFirst(); @@ -143,13 +146,13 @@ private static App updateApp(App app, String siteId) { return app == null ? null : app.toBuilder().id(siteId).build(); } - private static Imp modifyImp(Imp imp, ExtImpEpsilon impExt, BigDecimal bidfloor) { + private static Imp modifyImp(Imp imp, ExtImpEpsilon impExt, BigDecimal bidfloor, String displayManagerVersion) { final Banner banner = imp.getBanner(); final Video video = imp.getVideo(); return imp.toBuilder() .displaymanager(DISPLAY_MANAGER) - .displaymanagerver(DISPLAY_MANAGER_VER) + .displaymanagerver(displayManagerVersion) .bidfloor(bidfloor) .bidfloorcur(BIDDER_CURRENCY) .tagid(getTagId(imp.getTagid(), impExt.getTagId())) diff --git a/src/main/java/org/prebid/server/spring/config/bidder/EpsilonConfiguration.java b/src/main/java/org/prebid/server/spring/config/bidder/EpsilonConfiguration.java index f4daeba000a..555028584bb 100644 --- a/src/main/java/org/prebid/server/spring/config/bidder/EpsilonConfiguration.java +++ b/src/main/java/org/prebid/server/spring/config/bidder/EpsilonConfiguration.java @@ -11,6 +11,7 @@ import org.prebid.server.spring.config.bidder.util.BidderDepsAssembler; import org.prebid.server.spring.config.bidder.util.UsersyncerCreator; import org.prebid.server.spring.env.YamlPropertySourceFactory; +import org.prebid.server.util.VersionInfo; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -36,6 +37,7 @@ EpsilonConfigurationProperties configurationProperties() { @Bean BidderDeps epsilonBidderDeps(EpsilonConfigurationProperties epsilonConfigurationProperties, @NotBlank @Value("${external-url}") String externalUrl, + VersionInfo versionInfo, JacksonMapper mapper, CurrencyConversionService currencyConversionService) { @@ -46,6 +48,7 @@ BidderDeps epsilonBidderDeps(EpsilonConfigurationProperties epsilonConfiguration new EpsilonBidder( config.getEndpoint(), epsilonConfigurationProperties.getGenerateBidId(), + versionInfo.getVersion(), mapper, currencyConversionService)) .assemble(); 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 f69fb0f5415..5e2ae110639 100644 --- a/src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java @@ -64,13 +64,14 @@ public class EpsilonBidderTest extends VertxTest { @BeforeEach public void setUp() { - target = new EpsilonBidder(ENDPOINT_URL, false, jacksonMapper, currencyConversionService); + target = new EpsilonBidder(ENDPOINT_URL, false, null, jacksonMapper, currencyConversionService); } @Test public void creationShouldFailOnInvalidEndpointUrl() { assertThatIllegalArgumentException() - .isThrownBy(() -> new EpsilonBidder("invalid_url", false, jacksonMapper, currencyConversionService)); + .isThrownBy(() -> new EpsilonBidder( + "invalid_url", false, null, jacksonMapper, currencyConversionService)); } @Test @@ -186,7 +187,7 @@ public void makeHttpRequestsShouldSetSiteIdFromExtSiteIdIfSiteIdIsNullOrEmpty() } @Test - public void makeHttpRequestsShouldSetImpDisplayManagerAndDisplayManagerVer() { + public void makeHttpRequestsShouldSetImpDisplayManager() { // given final BidRequest bidRequest = givenBidRequest(identity()); @@ -198,8 +199,62 @@ public void makeHttpRequestsShouldSetImpDisplayManagerAndDisplayManagerVer() { assertThat(result.getValue()).hasSize(1) .extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class)) .flatExtracting(BidRequest::getImp) - .extracting(Imp::getDisplaymanager, Imp::getDisplaymanagerver) - .containsExactly(tuple("prebid-s2s", "2.0.0")); + .extracting(Imp::getDisplaymanager) + .containsExactly("prebid-s2s-java"); + } + + @Test + public void makeHttpRequestsShouldNotSetDisplayManagerVerWhenVersionIsNull() { + // given + target = new EpsilonBidder(ENDPOINT_URL, false, null, jacksonMapper, currencyConversionService); + final BidRequest bidRequest = givenBidRequest(identity()); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1) + .extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class)) + .flatExtracting(BidRequest::getImp) + .extracting(Imp::getDisplaymanagerver) + .containsOnlyNulls(); + } + + @Test + public void makeHttpRequestsShouldNotSetDisplayManagerVerWhenVersionIsUndefined() { + // given + target = new EpsilonBidder(ENDPOINT_URL, false, "undefined", jacksonMapper, currencyConversionService); + final BidRequest bidRequest = givenBidRequest(identity()); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1) + .extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class)) + .flatExtracting(BidRequest::getImp) + .extracting(Imp::getDisplaymanagerver) + .containsOnlyNulls(); + } + + @Test + public void makeHttpRequestsShouldSetDisplayManagerVerWhenVersionIsProvided() { + // given + target = new EpsilonBidder(ENDPOINT_URL, false, "1.2.3", jacksonMapper, currencyConversionService); + final BidRequest bidRequest = givenBidRequest(identity()); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1) + .extracting(httpRequest -> mapper.readValue(httpRequest.getBody(), BidRequest.class)) + .flatExtracting(BidRequest::getImp) + .extracting(Imp::getDisplaymanagerver) + .containsExactly("1.2.3"); } @Test @@ -697,7 +752,7 @@ public void makeBidsShouldReturnAudioBidIfRequestImpHasAudio() throws JsonProces @Test public void makeBidsShouldUpdateBidWithUUIDIfGenerateBidIdIsTrue() throws JsonProcessingException { // given - target = new EpsilonBidder(ENDPOINT_URL, true, jacksonMapper, currencyConversionService); + target = new EpsilonBidder(ENDPOINT_URL, true, null, jacksonMapper, currencyConversionService); final BidderCall httpCall = givenHttpCall( givenBidRequest(builder -> builder.id("123") .banner(Banner.builder().build())), diff --git a/src/test/resources/org/prebid/server/it/openrtb2/epsilon/alias/test-epsilon-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/epsilon/alias/test-epsilon-bid-request.json index 2361f71fef6..3194ea7ef95 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/epsilon/alias/test-epsilon-bid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/epsilon/alias/test-epsilon-bid-request.json @@ -9,8 +9,8 @@ "h": 600 }, "bidfloorcur": "USD", - "displaymanager": "prebid-s2s", - "displaymanagerver": "2.0.0", + "displaymanager": "prebid-s2s-java", + "displaymanagerver": "${json-unit.ignore}", "ext": { "tid": "${json-unit.any-string}", "bidder": { diff --git a/src/test/resources/org/prebid/server/it/openrtb2/epsilon/test-epsilon-bid-request.json b/src/test/resources/org/prebid/server/it/openrtb2/epsilon/test-epsilon-bid-request.json index 875ab261bbb..783946c68e4 100644 --- a/src/test/resources/org/prebid/server/it/openrtb2/epsilon/test-epsilon-bid-request.json +++ b/src/test/resources/org/prebid/server/it/openrtb2/epsilon/test-epsilon-bid-request.json @@ -9,8 +9,8 @@ "h": 600 }, "bidfloorcur": "USD", - "displaymanager": "prebid-s2s", - "displaymanagerver": "2.0.0", + "displaymanager": "prebid-s2s-java", + "displaymanagerver": "${json-unit.ignore}", "ext": { "tid": "${json-unit.any-string}", "bidder": { From 9033c82b6941a62ebbfc5033e50aefca0fe54fae Mon Sep 17 00:00:00 2001 From: John Wier Date: Thu, 19 Feb 2026 11:04:45 -0800 Subject: [PATCH 2/2] Epsilon: use versioninfo --- .../java/org/prebid/server/bidder/epsilon/EpsilonBidder.java | 4 ++-- src/main/java/org/prebid/server/util/VersionInfo.java | 2 +- .../org/prebid/server/bidder/epsilon/EpsilonBidderTest.java | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java b/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java index 8ff166e59ff..eff6e5e3093 100644 --- a/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java +++ b/src/main/java/org/prebid/server/bidder/epsilon/EpsilonBidder.java @@ -27,6 +27,7 @@ import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.util.BidderUtil; import org.prebid.server.util.HttpUtil; +import org.prebid.server.util.VersionInfo; import java.math.BigDecimal; import java.util.ArrayList; @@ -58,7 +59,6 @@ public class EpsilonBidder implements Bidder { private static final Set AD_POSITIONS = IntStream.range(0, 8).boxed().collect(Collectors.toSet()); private static final String DISPLAY_MANAGER = "prebid-s2s-java"; - private static final String VERSION_UNDEFINED = "undefined"; private final String endpointUrl; private final boolean generateBidId; @@ -74,7 +74,7 @@ public EpsilonBidder(String endpointUrl, this.generateBidId = generateBidId; this.mapper = Objects.requireNonNull(mapper); this.currencyConversionService = Objects.requireNonNull(currencyConversionService); - this.displayManagerVersion = VERSION_UNDEFINED.equals(pbsVersion) ? null : pbsVersion; + this.displayManagerVersion = VersionInfo.UNDEFINED.equals(pbsVersion) ? null : pbsVersion; } @Override diff --git a/src/main/java/org/prebid/server/util/VersionInfo.java b/src/main/java/org/prebid/server/util/VersionInfo.java index 3ddc9b52b74..dd2bfb23251 100644 --- a/src/main/java/org/prebid/server/util/VersionInfo.java +++ b/src/main/java/org/prebid/server/util/VersionInfo.java @@ -14,7 +14,7 @@ public class VersionInfo { private static final Logger logger = LoggerFactory.getLogger(VersionInfo.class); - private static final String UNDEFINED = "undefined"; + public static final String UNDEFINED = "undefined"; String version; String commitHash; 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 5e2ae110639..eeb1a1ce621 100644 --- a/src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/epsilon/EpsilonBidderTest.java @@ -31,6 +31,7 @@ import org.prebid.server.proto.openrtb.ext.request.epsilon.ExtImpEpsilon; import org.prebid.server.proto.openrtb.ext.response.BidType; import org.prebid.server.proto.openrtb.ext.response.ExtBidResponse; +import org.prebid.server.util.VersionInfo; import java.math.BigDecimal; import java.util.Collections; @@ -224,7 +225,8 @@ public void makeHttpRequestsShouldNotSetDisplayManagerVerWhenVersionIsNull() { @Test public void makeHttpRequestsShouldNotSetDisplayManagerVerWhenVersionIsUndefined() { // given - target = new EpsilonBidder(ENDPOINT_URL, false, "undefined", jacksonMapper, currencyConversionService); + target = new EpsilonBidder( + ENDPOINT_URL, false, VersionInfo.UNDEFINED, jacksonMapper, currencyConversionService); final BidRequest bidRequest = givenBidRequest(identity()); // when