Spring Integration 5.1 - тестирование потока интеграции - dsl - PullRequest
0 голосов
/ 01 июля 2019

Я настроил простой поток Spring Integration, который состоит из следующих шагов:

  1. периодически опрашивает остальные API, затем
  2. выполняет некоторую обработку полезной нагрузки
  3. и приземлите его на тему Кафки.

Пожалуйста, соблюдайте приведенный ниже код:

@Component
public class MyIntegrationFlow extends IntegrationFlowAdapter {
    @Override
    protected IntegrationFlowDefinition<?> buildFlow() {
        return from(() -> List.of("pathVariable1", "pathVariable2"), c -> c.poller(Pollers.fixedDelay(5, TimeUnit.SECONDS)))
                .split()
                .handle(httpRequest(), c -> c.advice(new RequestHandlerRetryAdvice()))
                .transform(Tranformers.fromJson(Foo.class))
                .filter(payload -> payload.isValid())
                .log()
                .transform(Tranformers.toJson())
                .channel(Source.OUTPUT); // output channel for kafka topic
    }

    private HttpMessageHandlerSpec httpRequest() {
        return Http.outboundGateway("http://somehost:8080/{pathVariable}")
                .httpMethod(GET)
                .uriVariable("pathVariable", Message::getPayload)
                .expectedResponseType(String.class);
    }
}

Это прекрасно работает, однако я изо всех сил пытаюсь придумать несколько хороших тестов.,

  • Как я должен издеваться над внешним REST API?
  • Как мне проверить, что политика повторных попыток срабатывает и выполняется желаемое количество http-запросов?
  • Как изменить MessageSource потока (списка переменных пути), который периодически опрашивается?
  • Как проверить, успешно ли полезная нагрузка попала в тему Kafka?

1 Ответ

0 голосов
/ 01 июля 2019

Слишком много вопросов, и некоторые из них требуют слишком широкого объяснения. В любом случае, я думаю, вы можете начать с Spring Integration Testing Framework и его документации .

  1. Как я могу издеваться над внешним REST API?

Я думаю, вы можете просто рассмотреть использование Mock MVC из Spring Framework и его MockMvcClientHttpRequestFactory для внедрения в HttpRequestExecutingMessageHandler на основе HttpMessageHandlerSpec.

  1. политика повторных попыток удаляет

Ну, я думаю, одна и та же поддельная конечная точка MVC может проверить, сколько раз она была вызвана, и в течение первых нескольких раз не сможет инициировать эту попытку.

  1. Как изменить источник сообщений

Это как раз часть Spring Integration Testing Framework с ее MockIntegration.mockMessageSource() и MockIntegrationContext: https://docs.spring.io/spring-integration/docs/5.1.6.RELEASE/reference/html/#mockintegration

  1. сделал это в теме Кафки?

Или вы упомянули MockIntegration.mockMessageHandler(), чтобы проверить, что конечная точка для Кафки называется. Или используйте Embedded Kafka из проекта Spring Kafka: https://docs.spring.io/spring-kafka/docs/2.2.7.RELEASE/reference/html/#embedded-kafka-annotation

...