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
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import com.networknt.schema.SpecVersion;
import com.networknt.schema.ValidationMessage;
import org.apache.commons.collections4.map.CaseInsensitiveMap;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.prebid.server.bidder.BidderCatalog;
import org.prebid.server.json.EncodeException;
Expand Down Expand Up @@ -88,7 +87,7 @@ public static BidderParamValidator create(BidderCatalog bidderCatalog,
final Map<String, JsonNode> bidderRawSchemas = new LinkedHashMap<>();

bidderCatalog.names().forEach(bidder -> bidderRawSchemas.put(
bidder, createSchemaNode(schemaDirectory, maybeResolveAlias(bidderCatalog, bidder), mapper)));
bidder, createSchemaNode(bidderCatalog, schemaDirectory, bidder, mapper)));

return new BidderParamValidator(toBidderSchemas(bidderRawSchemas), toSchemas(bidderRawSchemas, mapper));
}
Expand Down Expand Up @@ -120,8 +119,20 @@ private static JsonSchema toBidderSchema(JsonNode schema, String bidder) {
return result;
}

private static String maybeResolveAlias(BidderCatalog bidderCatalog, String bidder) {
return ObjectUtils.defaultIfNull(bidderCatalog.bidderInfoByName(bidder).getAliasOf(), bidder);
private static JsonNode createSchemaNode(BidderCatalog bidderCatalog,
String schemaDirectory,
String bidder,
JacksonMapper mapper) {

try {
return createSchemaNode(schemaDirectory, bidder, mapper);
} catch (IllegalArgumentException e) {
final String parentBidder = bidderCatalog.bidderInfoByName(bidder).getAliasOf();
if (parentBidder != null) {
return createSchemaNode(schemaDirectory, parentBidder, mapper);
}
throw e;
}
}

private static JsonNode createSchemaNode(String schemaDirectory, String bidder, JacksonMapper mapper) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import org.prebid.server.bidder.model.HttpResponse;
import org.prebid.server.bidder.model.Result;
import org.prebid.server.proto.openrtb.ext.ExtPrebid;
import org.prebid.server.proto.openrtb.ext.request.adrino.ExtImpAdrino;
import org.prebid.server.proto.openrtb.ext.request.adtrgtme.ExtImpAdtrgtme;
import org.prebid.server.util.HttpUtil;

Expand Down Expand Up @@ -129,9 +128,9 @@ public void makeHttpRequestsShouldSplitRequestIntoMultipleRequests() {
// given
final BidRequest bidRequest = BidRequest.builder().site(Site.builder().id("site_id").build())
.imp(asList(givenImp(impBuilder -> impBuilder.xNative(Native.builder().build())
.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpAdrino.of("test"))))),
.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpAdtrgtme.of(1))))),
givenImp(impBuilder -> impBuilder.xNative(Native.builder().build())
.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpAdrino.of("test"))))))).build();
.ext(mapper.valueToTree(ExtPrebid.of(null, ExtImpAdtrgtme.of(1))))))).build();

// when
final Result<List<HttpRequest<BidRequest>>> result = target.makeHttpRequests(bidRequest);
Expand Down
10 changes: 9 additions & 1 deletion src/test/java/org/prebid/server/it/ApplicationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,7 @@ public void biddersParamsShouldReturnBidderSchemas() throws JSONException, IOExc
final Map<String, JsonNode> expectedMap = CollectionUtils.union(bidders, aliases.keySet()).stream()
.collect(Collectors.toMap(
Function.identity(),
bidderName -> jsonSchemaToJsonNode(aliases.getOrDefault(bidderName, bidderName))));
bidderName -> jsonSchemaToJsonNode(bidderName, aliases)));

assertThat(responseAsMap.keySet()).hasSameElementsAs(expectedMap.keySet());
assertThat(responseAsMap).containsAllEntriesOf(expectedMap);
Expand Down Expand Up @@ -693,6 +693,14 @@ private static Map<String, String> getBidderAliasesFromConfigFiles() throws IOEx
return Collections.emptyMap();
}

private static JsonNode jsonSchemaToJsonNode(String bidderName, Map<String, String> aliases) {
try {
return jsonSchemaToJsonNode(bidderName);
} catch (IllegalArgumentException e) {
return jsonSchemaToJsonNode(aliases.getOrDefault(bidderName, bidderName));
}
}

private static JsonNode jsonSchemaToJsonNode(String bidderName) {
final String path = "static/bidder-params/" + bidderName + ".json";
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.prebid.server.VertxTest;
import org.prebid.server.bidder.BidderCatalog;
import org.prebid.server.bidder.BidderInfo;
import org.prebid.server.proto.openrtb.ext.request.adrino.ExtImpAdrino;
import org.prebid.server.proto.openrtb.ext.request.adtelligent.ExtImpAdtelligent;
import org.prebid.server.proto.openrtb.ext.request.appnexus.ExtImpAppnexus;
import org.prebid.server.proto.openrtb.ext.request.audiencenetwork.ExtImpAudienceNetwork;
Expand All @@ -33,6 +34,7 @@
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mock.Strictness.LENIENT;

@ExtendWith(MockitoExtension.class)
public class BidderParamValidatorTest extends VertxTest {
Expand All @@ -47,8 +49,9 @@ public class BidderParamValidatorTest extends VertxTest {
private static final String EPLANNING = "eplanning";
private static final String BEACHFRONT = "beachfront";
private static final String VISX = "visx";
private static final String ADRINO = "adrino";

@Mock
@Mock(strictness = LENIENT)
private BidderCatalog bidderCatalog;

private BidderParamValidator bidderParamValidator;
Expand All @@ -65,7 +68,8 @@ public void setUp() {
OPENX,
EPLANNING,
BEACHFRONT,
VISX)));
VISX,
ADRINO)));
given(bidderCatalog.bidderInfoByName(anyString())).willReturn(givenBidderInfo());
given(bidderCatalog.bidderInfoByName(eq(APPNEXUS_ALIAS))).willReturn(givenBidderInfo(APPNEXUS));

Expand Down Expand Up @@ -381,6 +385,20 @@ public void validateShouldReturnNoValidationMessagesWhenVisxUidValid() {
assertThat(messagesIntegerUid).isEmpty();
}

@Test
public void validateShouldReturnValidationMessagesWhenAdrinoImpExtNotValid() {
// given
final ExtImpAdrino ext = ExtImpAdrino.of(null);

final JsonNode node = mapper.convertValue(ext, JsonNode.class);

// when
final Set<String> messages = bidderParamValidator.validate(ADRINO, node);

// then
assertThat(messages.size()).isEqualTo(1);
}

private static BidderInfo givenBidderInfo(String aliasOf) {
return BidderInfo.create(
true,
Expand Down
Loading