Интеграционное тестирование приложения Spring Cloud с AWS Parameter Store - PullRequest
0 голосов
/ 29 марта 2020

Как выполнить интеграционное тестирование свойств чтения приложения Spring Boot из AWS Store Parameter (зависимость org.springframework.cloud:spring-cloud-starter-aws-parameter-store-config).

Следует ли отключить интеграцию AWS Parameter Store в интеграционных тестах?

Как использовать локальный сервер (или макет) вместо реального AWS хранилища параметров в интеграционных тестах?

1 Ответ

1 голос
/ 29 марта 2020

Обычно интеграция с AWS хранилищем параметров должна быть отключена в интеграционных тестах для простоты и производительности. Вместо этого загрузите свойства теста из файла (например, src/test/resources/test.properties)

@SpringBootTest(properties = "aws.paramstore.enabled=false")
@TestPropertySource("classpath:/test.properties")
public class SampleTests {
  //...
}

Если отдельным тестам необходимо проверить интеграцию с AWS хранилищем параметров, используйте Testcontainers и LocalStack простой в использовании локальный AWS стек для Docker.

Добавить класс конфигурации, создающий пользовательский ssmClient компонент типа AWSSimpleSystemsManagement, настроенный на использование LocalStack вместо значения по умолчанию один объявлен в org.springframework.cloud.aws.autoconfigure.paramstore.AwsParamStoreBootstrapConfiguration с использованием реального AWS хранилища параметров.

@Configuration(proxyBeanMethods = false)
public class AwsParamStoreBootstrapConfiguration {

  public static final LocalStackContainer AWS_SSM_CONTAINER = initContainer();

  public static LocalStackContainer initContainer() {
    LocalStackContainer container = new LocalStackContainer().withServices(SSM);
    container.start();
    Runtime.getRuntime().addShutdownHook(new Thread(container::stop));
    return container;
  }

  @Bean
  public AWSSimpleSystemsManagement ssmClient() {
    return AWSSimpleSystemsManagementClientBuilder.standard()
        .withEndpointConfiguration(AWS_SSM_CONTAINER.getEndpointConfiguration(SSM))
        .withCredentials(AWS_SSM_CONTAINER.getDefaultCredentialsProvider())
        .build();
  }
}

Поскольку AwsParamStorePropertySourceLocator загружен контекстом bootstrap Spring Spring, вам необходимо добавить класс конфигурации в контекст bootstrap, добавив в файл src/test/resources/META-INF/spring.factories следующая запись

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.example.test.AwsParamStoreBootstrapConfiguration

Тот же подход можно использовать для насмешки ssmClient с использованием Mockito.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...