Как выполнить интеграционное тестирование вasticsearch с spring-data -asticsearch? - PullRequest
1 голос
/ 27 февраля 2020

Я использую spring-data -asticsearch v3.2.4.RELEASE, которая доступна через spring-boot-starter-data -asticsearch v2.2.4.RELEASE. Я хочу провести интеграционные тесты для этого, но доступный вариант, который таков: https://github.com/allegro/embedded-elasticsearch не работает.

Часть, которую я пытался запустить как PO C, приведена ниже и это вызывает исключение:

    public class EmbeddedElasticConfiguration {

    public static final String VERSION = "6.8.4";
    public static final String DOWNLOAD_DIRECTORY = "<path>\\test-elasticsearch";
    public static final String INSTALLATION_DIRECTORY = "<path>\test-elasticsearch";
    public static final String NAME = "elasticsearch";
    public static final String TRANSPORT_PORT = "9300";
    public static final String HTTP_CLIENT_PORT = "9200";
    public static final String TEST_INDEX = "salesorder";
    public static final String TEST_TYPE = "salesorder";
    public static final String RESOURCE_LOCATION = "src/test/resources/salesorder-mapping.json";
    private ObjectMapper objectMapper = new ObjectMapper();
    EmbeddedElastic embeddedElastic;

    @Test
    public void configure() throws IOException, InterruptedException {
        embeddedElastic = EmbeddedElastic.builder()
                .withElasticVersion(VERSION)
                .withSetting(TRANSPORT_TCP_PORT, 9300)
                .withSetting(CLUSTER_NAME, "my-cluster")
                //.withPlugin("analysis-stempel")
                .withDownloadDirectory(new File(DOWNLOAD_DIRECTORY))
                .withInstallationDirectory(new File(INSTALLATION_DIRECTORY))
                .withSetting(HTTP_PORT, 9200)
                .withIndex(TEST_INDEX, IndexSettings.builder()
                       .withType(TEST_TYPE, readMappingFromJson())
                     .build())
                .build();

        embeddedElastic.start();
    }

    private String readMappingFromJson() throws IOException {
        final File file = ResourceUtils.getFile(RESOURCE_LOCATION);
        String mapping = new String(Files.readAllBytes(file.toPath()));
        System.out.println("mapping: "+ mapping);
        return mapping;
    }

    @After
    public void stopServer() {
        embeddedElastic.stop();
    }
}

Я ниже получаю ниже исключения:

pl.allegro.tech.embeddedelasticsearch.EmbeddedElasticsearchStartupException: Failed to start elasticsearch within time-out

    at pl.allegro.tech.embeddedelasticsearch.ElasticServer.waitForElasticToStart(ElasticServer.java:127)
    at pl.allegro.tech.embeddedelasticsearch.ElasticServer.start(ElasticServer.java:50)
    at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.startElastic(EmbeddedElastic.java:82)
    at pl.allegro.tech.embeddedelasticsearch.EmbeddedElastic.start(EmbeddedElastic.java:63)
    at com.xxx.elasticsearch.adapter.configuration.EmbeddedElasticConfiguration.configure(EmbeddedElasticConfiguration.java:50)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

Может ли кто-нибудь помочь с любыми другими вариантами для интеграционных тестов вasticsearch с spring-data или Как следует Я пишу интеграционные тесты дляasticsearch.

Я знаю, что есть другие ответы на stackoverflow и другие порталы для встроенного эластичного поиска, но они не работают с моей текущей версией эластичного поиска.

1 Ответ

1 голос
/ 27 февраля 2020

Вы не написали, какую версию JUnit вы используете. Я могу рассказать вам, как мы справляемся с этим в Spring Data Elasticsearch:

Для JUnit 4 вы можете проверить JUnit 4 Rule , которое использует Utils класс для настройки локальный работающий узел Elasticsearch и разрывает его в конце.

Для JUnit 5 вы можете посмотреть, как это обрабатывается в текущей основной ветке, соответствующие классы находятся здесь,

Используя аннотацию SpringIntegrationTest, локальный Elasticsearch запускается и автоматически отключается по завершении всех тестов. Внутри уже проделана определенная работа по настройке кластера, передаче информации в расширение JUnit и включению Spring-связывания соответствующей информации в классе конфигурации. Эта настройка довольно сложна, но в конце она использует тот же класс Utils, который упоминался выше.

Надеюсь, это даст хорошую отправную точку

...