Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions src/main/java/org/prebid/server/auction/ExchangeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -754,7 +754,6 @@ private AuctionParticipation createAuctionParticipation(
bidderToMultiBid,
biddersToConfigs,
bidderToPrebidBidders,
bidderAliases,
context);

final Map<String, Price> originalPriceFloors = enrichedWithPriceFloors.getImp().stream()
Expand Down Expand Up @@ -787,7 +786,6 @@ private BidRequest prepareBidRequest(BidderPrivacyResult bidderPrivacyResult,
Map<String, MultiBidConfig> bidderToMultiBid,
Map<String, ExtBidderConfigOrtb> biddersToConfigs,
Map<String, JsonNode> bidderToPrebidBidders,
BidderAliases bidderAliases,
AuctionContext context) {

final String bidder = bidderPrivacyResult.getRequestBidder();
Expand Down Expand Up @@ -841,7 +839,6 @@ private BidRequest prepareBidRequest(BidderPrivacyResult bidderPrivacyResult,
transmitTid,
useFirstPartyData,
context.getAccount(),
bidderAliases,
context.getDebugWarnings());

return bidRequest.toBuilder()
Expand Down Expand Up @@ -879,13 +876,12 @@ private List<Imp> prepareImps(String bidder,
boolean transmitTid,
boolean useFirstPartyData,
Account account,
BidderAliases bidderAliases,
List<String> 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();
}
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/org/prebid/server/auction/ImpAdjuster.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -36,15 +36,15 @@ public ImpAdjuster(JacksonMapper jacksonMapper,
this.jsonMerger = Objects.requireNonNull(jsonMerger);
}

public Imp adjust(Imp originalImp, String bidder, BidderAliases bidderAliases, List<String> debugMessages) {
public Imp adjust(Imp originalImp, String bidder, List<String> debugMessages) {
setAeParams(originalImp.getExt());

final JsonNode impExtPrebidImp = bidderParamsFromImpExtPrebidImp(originalImp.getExt());
if (impExtPrebidImp == null) {
return originalImp;
}

final JsonNode bidderNode = getBidderNode(bidder, bidderAliases, impExtPrebidImp);
final JsonNode bidderNode = getBidderNode(bidder, impExtPrebidImp);

if (bidderNode == null || bidderNode.isEmpty()) {
removeImpExtPrebidImp(originalImp.getExt());
Expand Down Expand Up @@ -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<String> 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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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));
Expand All @@ -519,7 +519,7 @@ public void shouldExtractRequestWithBidderSpecificExtension() {
.build());

final ArgumentCaptor<Imp> 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);
Expand Down
36 changes: 13 additions & 23 deletions src/test/java/org/prebid/server/auction/ImpAdjusterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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
Expand All @@ -56,7 +46,7 @@ public void adjustShouldReturnOriginalImpWhenImpExtPrebidImpIsNull() {
final List<String> 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);
Expand All @@ -72,7 +62,7 @@ public void adjustShouldReturnOriginalImpWhenImpExtPrebidImpIsAbsent() {
final List<String> 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);
Expand All @@ -90,7 +80,7 @@ public void adjustShouldSetImpExtIgsAeWhenImpExtAeIsZero() {
final List<String> 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));
Expand All @@ -108,7 +98,7 @@ public void adjustShouldSetImpExtIgsAeWhenImpExtAeIsOne() {
final List<String> 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));
Expand All @@ -126,7 +116,7 @@ public void adjustShouldNotSetImpExtIgsAeWhenImpExtAeIsNotZeroOrOne() {
final List<String> 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();
Expand All @@ -145,7 +135,7 @@ public void adjustShouldNotModifyImpExtIgsAeWhenImpExtIgsAePresent() {
final List<String> 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));
Expand All @@ -162,7 +152,7 @@ public void adjustShouldRemoveExpImpFromOriginalImpWhenImpExtPrebidImpHasEmptyBi
final List<String> 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()
Expand All @@ -186,7 +176,7 @@ public void resolveImpShouldMergeBidderSpecificImpIntoOriginalImp() throws Valid
final List<String> 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()
Expand Down Expand Up @@ -214,7 +204,7 @@ public void resolveImpShouldMergeBidderSpecificImpIntoOriginalImpCaseInsensitive
final List<String> 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()
Expand All @@ -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<String> 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()
Expand Down Expand Up @@ -272,7 +262,7 @@ public void resolveImpShouldReturnImpWithoutExpImpWhenResultingImpValidationFail
final List<String> 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()
Expand All @@ -297,7 +287,7 @@ public void resolveImpShouldReturnImpWithoutExpWhenMergingFailed() {
final List<String> 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()
Expand Down
Loading