diff --git a/src/main/java/org/prebid/server/validation/BidderParamValidator.java b/src/main/java/org/prebid/server/validation/BidderParamValidator.java index 98dea900d5c..71a21b13341 100644 --- a/src/main/java/org/prebid/server/validation/BidderParamValidator.java +++ b/src/main/java/org/prebid/server/validation/BidderParamValidator.java @@ -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; @@ -88,7 +87,7 @@ public static BidderParamValidator create(BidderCatalog bidderCatalog, final Map 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)); } @@ -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) { diff --git a/src/test/java/org/prebid/server/bidder/adtrgtme/AdtrgtmeBidderTest.java b/src/test/java/org/prebid/server/bidder/adtrgtme/AdtrgtmeBidderTest.java index af2b0674f7b..55ae12b0c37 100644 --- a/src/test/java/org/prebid/server/bidder/adtrgtme/AdtrgtmeBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/adtrgtme/AdtrgtmeBidderTest.java @@ -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; @@ -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>> result = target.makeHttpRequests(bidRequest); diff --git a/src/test/java/org/prebid/server/it/ApplicationTest.java b/src/test/java/org/prebid/server/it/ApplicationTest.java index 16c7a550c52..ca4414b8897 100644 --- a/src/test/java/org/prebid/server/it/ApplicationTest.java +++ b/src/test/java/org/prebid/server/it/ApplicationTest.java @@ -451,7 +451,7 @@ public void biddersParamsShouldReturnBidderSchemas() throws JSONException, IOExc final Map 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); @@ -693,6 +693,14 @@ private static Map getBidderAliasesFromConfigFiles() throws IOEx return Collections.emptyMap(); } + private static JsonNode jsonSchemaToJsonNode(String bidderName, Map 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 { diff --git a/src/test/java/org/prebid/server/validation/BidderParamValidatorTest.java b/src/test/java/org/prebid/server/validation/BidderParamValidatorTest.java index 674c4026a72..c0b99d22f38 100644 --- a/src/test/java/org/prebid/server/validation/BidderParamValidatorTest.java +++ b/src/test/java/org/prebid/server/validation/BidderParamValidatorTest.java @@ -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; @@ -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 { @@ -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; @@ -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)); @@ -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 messages = bidderParamValidator.validate(ADRINO, node); + + // then + assertThat(messages.size()).isEqualTo(1); + } + private static BidderInfo givenBidderInfo(String aliasOf) { return BidderInfo.create( true,