Mock Elasticsearch Aggregation - PullRequest
       0

Mock Elasticsearch Aggregation

0 голосов
/ 27 октября 2019

У меня есть проблема, которая должна быть относительно простой, но я попадаю в глубокую кроличью нору

Я хотел бы провести модульное тестирование моего звонка в Elasticsearch - с поисковым запросом, включающим Aggs . Какой хороший способ подделать ответ?

Elasticsearch RestHighLevelClient очень сложен ... приходится иметь дело со сложной сетью цепочек вызовов синтаксического анализатора XContentType / XContentType

Есть простой способ издеваться над вызовом? У меня есть примеры ответов JSON, которые можно было бы получить, если бы мы позвонили в ES из Kibana Devtools

private fun searchResponseFromContent(content: String): SearchResponse {
    val xContentType = XContentType.JSON
    val parser = xContentType.xContent().createParser(
            NamedXContentRegistry.EMPTY, // this would not handle aggrgations
            null,
            content
    )
    return SearchResponse.fromXContent(parser)
}

Вообще говоря, люди просто не проверяют вызовы Elasticsearch в их модульном тесте? Кажется, нет хороших решений для насмешливых звонков в ES

1 Ответ

0 голосов
/ 27 октября 2019

Ответ просто упростит то, что RestHighLevelClient делает внутри:

private fun searchResponseFromContent(content: String): SearchResponse {
    val xContentType = XContentType.JSON
    val parser = xContentType.xContent().createParser(
            NamedXContentRegistry(namedXContentRegistry()),
            null,
            content
    )
    return SearchResponse.fromXContent(parser)
}

private fun namedXContentRegistry(): List<NamedXContentRegistry.Entry> {
    // add as needed from RestHighLevelClient:1748 on version 7.3.2
    // static List<NamedXContentRegistry.Entry> getDefaultNamedXContents()
    return listOf(
            NamedXContentRegistry.Entry(Aggregation::class.java, ParseField(HistogramAggregationBuilder.NAME), ContextParser { p, c ->
                ParsedHistogram.fromXContent(p, c as String)
            })
    )
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...