SpringBootTest с Zuul Proxy - пустой ответ - PullRequest
1 голос
/ 19 февраля 2020

Введение: В настоящее время я пишу интеграционные тесты для моего API-шлюза с Zuul Proxy с использованием SpringBootTest. Я уже создал работающий макетный микросервис на порту 8089, возвращающий некоторые json данные, на которые приложение шлюза должно пересылать входящие запросы.

Проблема: Zuul удается сопоставить маршрутизирует правильно, однако он не может каким-либо образом перенаправить запрос, потому что ответ всегда является пустым HTTP 200, тогда как он должен содержать данные json, возвращаемые проверенным микросервисом. Эта проблема возникает только в тесте. Он отлично работает в производстве.

Недавние наблюдения: Во время отладки я выяснил, что в тесте FilterLoader не предоставляет никаких фильтров типа route, в то время как в производстве он предоставляет список из трех фильтры, которые затем используются методом route() из ZuulServlet. После обработки метода route() ответ заполняется данными, полученными из микросервиса. В тесте этого не происходит.

Я также пытался заменить фиктивный сервер реальным - результат был точно таким же.

Вопрос: Я бы хотел Спасибо за любые советы по этой проблеме;)

Zuul Config:

logging:
  level:
    org:
      springframework:
        cloud:
          netflix: trace
ribbon:
  eureka:
    enabled: false
eureka:
  client:
    enabled: false
zuul:
  routes:
    restuarant:
      path: /restaurant/**
      url: http://localhost:8089
spring:
  cloud:
    discovery:
      enabled: false
  ...

Аннотации класса тестирования:

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
@AutoConfigureWebTestClient(timeout = "30000")

Вызов протестированной конечной точки

//the mocked microservice has an endpoint http://localhost:8089/restaurants
private WebTestClient.ResponseSpec getResource(String accessToken) {
    return webClient.get()
        .uri("/restaurant/restaurants")
        .accept(MediaType.APPLICATION_JSON)
        .header(HttpHeaders.AUTHORIZATION, TokenType.BEARER.getValue() + " " + accessToken)
        .exchange();
  }
...