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..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; @@ -57,21 +58,23 @@ 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 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 = VersionInfo.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/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 f69fb0f5415..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; @@ -64,13 +65,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 +188,7 @@ public void makeHttpRequestsShouldSetSiteIdFromExtSiteIdIfSiteIdIsNullOrEmpty() } @Test - public void makeHttpRequestsShouldSetImpDisplayManagerAndDisplayManagerVer() { + public void makeHttpRequestsShouldSetImpDisplayManager() { // given final BidRequest bidRequest = givenBidRequest(identity()); @@ -198,8 +200,63 @@ 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, VersionInfo.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 +754,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": {