Мои тесты / включают тесты для функции поиска.
Моя идея - иметь пустой индекс поиска перед каждым тестом. Итак, я пытаюсь удалить все элементы в индексе по методу setup
(это Groovy code):
Client client = searchConnection.client
SearchResponse response = client.prepareSearch("item")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(termQuery('name', 'test')) //tried also matchAllQuery()
.setFrom(0).setSize(100).setExplain(false).execute().actionGet()
List<String> ids = response.hits.hits.collect {
return it.id
}
client.close()
client = searchConnection.client
ids.each {
DeleteResponse delete = client.prepareDelete("item", "item", it)
.setOperationThreaded(false)
.execute().actionGet()
}
client.close()
Кажется, что он обрабатывает все удаления асинхронно, поэтому я добавил Thread.sleep(5000)
после него. Как вы видите, я пытаюсь открыть/закрыть соединение несколько раз - это не помогает.
Проблема, которая иногда требует большего времени, иногда требуется больше 5 секунд для удаления, иногда она не может найти только добавленные данные (из предыдущего теста) и т.д. и т.д. И самое раздражающее, что интеграционные тесты становятся неустойчивыми. Помещение Thread.sleep()
везде, где это возможно, выглядит не очень хорошим решением.
Он может каким-либо образом зафиксировать последними изменениями или сделать блокировку до тех пор, пока все данные не будут записаны?