Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug: NPE in PropertyConditionPredicate when processing empty schema #150

Open
beskrovnykh opened this issue Dec 13, 2024 · 1 comment
Open

Comments

@beskrovnykh
Copy link

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.github.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 здесь
@beskrovnykh
Copy link
Author

Проблема решена инициализацией пустого Map для properties при создании Schema в SwaggerCoverageV3RestAssured.

Было:

MediaType mediaType = new MediaType(); mediaType.setSchema(new Schema()); // properties == null

Стало:

MediaType mediaType = new MediaType(); mediaType.setSchema(new Schema().properties(new HashMap<>())); // properties инициализирован

Это предотвращает NPE в PropertyConditionPredicate, так как теперь properties всегда инициализирован, даже если пуст.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant