diff --git a/src/main/java/org/prebid/server/auction/ExchangeService.java b/src/main/java/org/prebid/server/auction/ExchangeService.java index 04191d0839d..bcab527e649 100644 --- a/src/main/java/org/prebid/server/auction/ExchangeService.java +++ b/src/main/java/org/prebid/server/auction/ExchangeService.java @@ -754,7 +754,6 @@ private AuctionParticipation createAuctionParticipation( bidderToMultiBid, biddersToConfigs, bidderToPrebidBidders, - bidderAliases, context); final Map originalPriceFloors = enrichedWithPriceFloors.getImp().stream() @@ -787,7 +786,6 @@ private BidRequest prepareBidRequest(BidderPrivacyResult bidderPrivacyResult, Map bidderToMultiBid, Map biddersToConfigs, Map bidderToPrebidBidders, - BidderAliases bidderAliases, AuctionContext context) { final String bidder = bidderPrivacyResult.getRequestBidder(); @@ -841,7 +839,6 @@ private BidRequest prepareBidRequest(BidderPrivacyResult bidderPrivacyResult, transmitTid, useFirstPartyData, context.getAccount(), - bidderAliases, context.getDebugWarnings()); return bidRequest.toBuilder() @@ -879,13 +876,12 @@ private List prepareImps(String bidder, boolean transmitTid, boolean useFirstPartyData, Account account, - BidderAliases bidderAliases, List debugWarnings) { return bidRequest.getImp().stream() .filter(imp -> bidderParamsFromImpExt(imp.getExt()).hasNonNull(bidder)) .map(imp -> imp.toBuilder().ext(imp.getExt().deepCopy()).build()) - .map(imp -> impAdjuster.adjust(imp, bidder, bidderAliases, debugWarnings)) + .map(imp -> impAdjuster.adjust(imp, bidder, debugWarnings)) .map(imp -> prepareImp(imp, bidder, bidRequest, transmitTid, useFirstPartyData, account, debugWarnings)) .toList(); } diff --git a/src/main/java/org/prebid/server/auction/ImpAdjuster.java b/src/main/java/org/prebid/server/auction/ImpAdjuster.java index 2d8be424fea..738622e6a86 100644 --- a/src/main/java/org/prebid/server/auction/ImpAdjuster.java +++ b/src/main/java/org/prebid/server/auction/ImpAdjuster.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.node.IntNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.iab.openrtb.request.Imp; -import org.prebid.server.auction.aliases.BidderAliases; +import org.apache.commons.lang3.StringUtils; import org.prebid.server.json.JacksonMapper; import org.prebid.server.json.JsonMerger; import org.prebid.server.validation.ImpValidator; @@ -36,7 +36,7 @@ public ImpAdjuster(JacksonMapper jacksonMapper, this.jsonMerger = Objects.requireNonNull(jsonMerger); } - public Imp adjust(Imp originalImp, String bidder, BidderAliases bidderAliases, List debugMessages) { + public Imp adjust(Imp originalImp, String bidder, List debugMessages) { setAeParams(originalImp.getExt()); final JsonNode impExtPrebidImp = bidderParamsFromImpExtPrebidImp(originalImp.getExt()); @@ -44,7 +44,7 @@ public Imp adjust(Imp originalImp, String bidder, BidderAliases bidderAliases, L return originalImp; } - final JsonNode bidderNode = getBidderNode(bidder, bidderAliases, impExtPrebidImp); + final JsonNode bidderNode = getBidderNode(bidder, impExtPrebidImp); if (bidderNode == null || bidderNode.isEmpty()) { removeImpExtPrebidImp(originalImp.getExt()); @@ -98,11 +98,11 @@ private static JsonNode bidderParamsFromImpExtPrebidImp(ObjectNode ext) { .orElse(null); } - private static JsonNode getBidderNode(String bidderName, BidderAliases bidderAliases, JsonNode node) { + private static JsonNode getBidderNode(String bidderName, JsonNode node) { final Iterator fieldNames = node.fieldNames(); while (fieldNames.hasNext()) { final String fieldName = fieldNames.next(); - if (bidderAliases.isSame(fieldName, bidderName)) { + if (StringUtils.equalsIgnoreCase(fieldName, bidderName)) { return node.get(fieldName); } } diff --git a/src/test/groovy/org/prebid/server/functional/tests/ImpRequestSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/ImpRequestSpec.groovy index 4cc3b728449..7a2f5923d56 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/ImpRequestSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/ImpRequestSpec.groovy @@ -19,6 +19,7 @@ import static org.prebid.server.functional.model.bidder.BidderName.OPENX import static org.prebid.server.functional.model.bidder.BidderName.RUBICON import static org.prebid.server.functional.model.bidder.BidderName.UNKNOWN import static org.prebid.server.functional.model.bidder.BidderName.WILDCARD +import static org.prebid.server.functional.model.bidder.BidderName.GENER_X import static org.prebid.server.functional.model.response.auction.ErrorType.PREBID import static org.prebid.server.functional.testcontainers.Dependencies.getNetworkServiceContainer @@ -131,6 +132,42 @@ class ImpRequestSpec extends BaseSpec { ALIAS_CAMEL_CASE | GENERIC_CAMEL_CASE } + def "PBS should update imp fields only for specific alias when request has multiple aliases"() { + given: "Default basic BidRequest" + def storedPmp = Pmp.defaultPmp + def originalPmp = Pmp.defaultPmp + def bidRequest = BidRequest.defaultBidRequest.tap { + imp.first.tap { + pmp = originalPmp + ext.prebid.imp = [(aliasName): new Imp(pmp: storedPmp)] + ext.prebid.bidder.generic = null + ext.prebid.bidder.generX = new Generic() + ext.prebid.bidder.alias = new Generic() + } + ext.prebid.aliases = [(GENER_X.value) : bidderName, + (aliasName.value): bidderName, + ] + } + + when: "Requesting PBS auction" + def response = defaultPbsService.sendAuctionRequest(bidRequest) + + then: "BidderRequest should update imp information for specific alias" + def bidderRequests = getRequests(response) + assert bidderRequests.size() == 2 + assert bidderRequests[ALIAS.value].imp.pmp.flatten() == [storedPmp] + + and: "Left original information for other" + assert bidderRequests[GENER_X.value].imp.pmp.flatten() == [originalPmp] + + where: + aliasName | bidderName + ALIAS | GENERIC + ALIAS_CAMEL_CASE | GENERIC + ALIAS | GENERIC_CAMEL_CASE + ALIAS_CAMEL_CASE | GENERIC_CAMEL_CASE + } + def "PBS shouldn't update imp fields when imp.ext.prebid.imp contain only bidder with invalid name"() { given: "Default basic BidRequest" def impPmp = Pmp.defaultPmp diff --git a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprSetUidSpec.groovy b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprSetUidSpec.groovy index fa4c833baf2..df46f493775 100644 --- a/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprSetUidSpec.groovy +++ b/src/test/groovy/org/prebid/server/functional/tests/privacy/GdprSetUidSpec.groovy @@ -58,7 +58,7 @@ class GdprSetUidSpec extends PrivacyBaseSpec { .build() } - and: "Default uids cookie with gener_x bidder" + and: "Default uids cookie with generic bidder" def uidsCookie = UidsCookie.defaultUidsCookie.tap { it.tempUIDs = [(GENERIC): defaultUidWithExpiry] } diff --git a/src/test/java/org/prebid/server/auction/ExchangeServiceTest.java b/src/test/java/org/prebid/server/auction/ExchangeServiceTest.java index 7f3642cb8b0..7dc84bb1f54 100644 --- a/src/test/java/org/prebid/server/auction/ExchangeServiceTest.java +++ b/src/test/java/org/prebid/server/auction/ExchangeServiceTest.java @@ -342,7 +342,7 @@ public void setUp() { given(fpdResolver.resolveImpExt(any(), anyBoolean())) .willAnswer(invocation -> invocation.getArgument(0)); - given(impAdjuster.adjust(any(), any(), any(), any())).willAnswer(invocation -> invocation.getArgument(0)); + given(impAdjuster.adjust(any(), any(), any())).willAnswer(invocation -> invocation.getArgument(0)); given(supplyChainResolver.resolveForBidder(anyString(), any())).willReturn(null); @@ -498,7 +498,7 @@ public void shouldExtractRequestWithBidderSpecificExtension() { final ObjectNode adjustedExt = givenImp.getExt().deepCopy(); final Imp adjustedImp = givenImp.toBuilder().ext(adjustedExt).build(); - given(impAdjuster.adjust(any(), any(), any(), any())).willReturn(adjustedImp); + given(impAdjuster.adjust(any(), any(), any())).willReturn(adjustedImp); // when target.holdAuction(givenRequestContext(bidRequest)); @@ -519,7 +519,7 @@ public void shouldExtractRequestWithBidderSpecificExtension() { .build()); final ArgumentCaptor impCaptor = forClass(Imp.class); - verify(impAdjuster).adjust(impCaptor.capture(), eq("someBidder"), any(), any()); + verify(impAdjuster).adjust(impCaptor.capture(), eq("someBidder"), any()); final Imp actualImp = impCaptor.getValue(); assertThat(actualImp).isNotSameAs(givenImp); diff --git a/src/test/java/org/prebid/server/auction/ImpAdjusterTest.java b/src/test/java/org/prebid/server/auction/ImpAdjusterTest.java index 9dc196f7884..e69a6169d77 100644 --- a/src/test/java/org/prebid/server/auction/ImpAdjusterTest.java +++ b/src/test/java/org/prebid/server/auction/ImpAdjusterTest.java @@ -12,8 +12,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.prebid.server.VertxTest; -import org.prebid.server.auction.aliases.BidderAliases; -import org.prebid.server.bidder.BidderCatalog; import org.prebid.server.json.JsonMerger; import org.prebid.server.validation.ImpValidator; import org.prebid.server.validation.ValidationException; @@ -22,7 +20,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -35,18 +32,11 @@ public class ImpAdjusterTest extends VertxTest { @Mock private ImpValidator impValidator; - @Mock - private BidderCatalog bidderCatalog; - private ImpAdjuster target; - private BidderAliases bidderAliases; - @BeforeEach public void setUp() { target = new ImpAdjuster(jacksonMapper, new JsonMerger(jacksonMapper), impValidator); - bidderAliases = BidderAliases.of( - Map.of("someBidderAlias", "someBidder"), Collections.emptyMap(), bidderCatalog); } @Test @@ -56,7 +46,7 @@ public void adjustShouldReturnOriginalImpWhenImpExtPrebidImpIsNull() { final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then assertThat(result).isSameAs(givenImp); @@ -72,7 +62,7 @@ public void adjustShouldReturnOriginalImpWhenImpExtPrebidImpIsAbsent() { final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then assertThat(result).isSameAs(givenImp); @@ -90,7 +80,7 @@ public void adjustShouldSetImpExtIgsAeWhenImpExtAeIsZero() { final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(0)); @@ -108,7 +98,7 @@ public void adjustShouldSetImpExtIgsAeWhenImpExtAeIsOne() { final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(1)); @@ -126,7 +116,7 @@ public void adjustShouldNotSetImpExtIgsAeWhenImpExtAeIsNotZeroOrOne() { final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then assertThat(result.getExt().get("igs")).isNull(); @@ -145,7 +135,7 @@ public void adjustShouldNotModifyImpExtIgsAeWhenImpExtIgsAePresent() { final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then assertThat(result.getExt().get("igs").get("ae")).isEqualTo(IntNode.valueOf(123)); @@ -162,7 +152,7 @@ public void adjustShouldRemoveExpImpFromOriginalImpWhenImpExtPrebidImpHasEmptyBi final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then final Imp expectedImp = givenImp.toBuilder() @@ -186,7 +176,7 @@ public void resolveImpShouldMergeBidderSpecificImpIntoOriginalImp() throws Valid final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then final Imp expectedImp = givenImp.toBuilder() @@ -214,7 +204,7 @@ public void resolveImpShouldMergeBidderSpecificImpIntoOriginalImpCaseInsensitive final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "SOMEbiDDer", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "SOMEbiDDer", debugMessages); // then final Imp expectedImp = givenImp.toBuilder() @@ -238,11 +228,11 @@ public void resolveImpShouldMergeBidderSpecificImpIntoOriginalImpCaseAliasBidder .set("deals", mapper.createArrayNode() .add(mapper.createObjectNode().put("id", "dealId2")))); - final Imp givenImp = givenImp("someBidderAlias", givenBidderImp); + final Imp givenImp = givenImp("someBidder", givenBidderImp); final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "SOMEbiDDer", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "SOMEbiDDer", debugMessages); // then final Imp expectedImp = givenImp.toBuilder() @@ -272,7 +262,7 @@ public void resolveImpShouldReturnImpWithoutExpImpWhenResultingImpValidationFail final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then final Imp expectedImp = givenImp.toBuilder() @@ -297,7 +287,7 @@ public void resolveImpShouldReturnImpWithoutExpWhenMergingFailed() { final List debugMessages = new ArrayList<>(); // when - final Imp result = target.adjust(givenImp, "someBidder", bidderAliases, debugMessages); + final Imp result = target.adjust(givenImp, "someBidder", debugMessages); // then final Imp expectedImp = givenImp.toBuilder()