Мои тесты модулей / интеграции включает в себя тесты для поиска.
Моя идея - иметь пустой поисковый индекс перед каждым тестом.Итак, я пытаюсь удалить все элементы в индексе по методу setup
(это код Groovy):
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()
везде, где это возможно, выглядит не очень хорошим решением.
Это может каким-либо образом зафиксировать последние изменения или сделать блокировку , пока все данные не будутбыть написано?