Skip to content

Bug: NPE in PropertyConditionPredicate when processing empty schema #150

Open
@beskrovnykh

Description

@beskrovnykh

I'm submitting a ...
[x] bug report
[ ] feature request

What is the current behavior?

PropertyConditionPredicate выбрасывает NPE при попытке доступа к properties пустой Schema во время анализа покрытия. Ошибка возникает потому что SwaggerCoverageV3RestAssured создает Schema без инициализации properties, а PropertyConditionPredicate предполагает что properties всегда инициализированы.

If the current behavior is a bug, please provide steps to reproduce:
Использовать фильтр SwaggerCoverageV3RestAssured с REST-assured:
RestAssured.given().filter(new SwaggerCoverageV3RestAssured())
Сделать любой запрос с телом
Попытаться сгенерировать отчет о покрытии
Ошибка:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.Map.entrySet()" because the return value of "io.swagger.v3.oas.models.media.Schema.getProperties()" is null
at com..viclovsky.swagger.coverage.core.predicate.PropertyConditionPredicate.lambda$check$2(PropertyConditionPredicate.java:32)

What is the expected behavior?
PropertyConditionPredicate должен корректно обрабатывать null в properties, либо:
Обеспечивая создание Schema с инициализированными properties в SwaggerCoverageV3RestAssured
Либо добавляя проверку на null в PropertyConditionPredicate
What is the motivation / use case for changing the behavior?
Текущая реализация ломает анализ покрытия для любого запроса с телом из-за необработанного NPE. Это затрагивает всех пользователей независимо от того, используют они сгенерированные клиенты или нет, так как фильтр всегда создает новую пустую Schema.

Other information
В документации указано что "Swagger-coverage работает хорошо с клиентами, сгенерированными из swagger", однако это не имеет отношения к проблеме, так как SwaggerCoverageV3RestAssured создает новую пустую Schema независимо от типа клиента:

// в SwaggerCoverageV3RestAssured
MediaType mediaType = new MediaType();
mediaType.setSchema(new Schema()); // properties == null
// в PropertyConditionPredicate
.flatMap(o -> (Stream<Map.Entry<String, Schema>>) o.getProperties().entrySet().stream()) // NPE здесь

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions