powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Интеграционные тесты и образ докера
8 сообщений из 8, страница 1 из 1
Интеграционные тесты и образ докера
    #40118641
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Были интеграционные тесты с использованием TestContainers.
Потом на стэнде, где происходила сборка закрыли доступ в инет и сделали локальные репозитории

Как теперь мне можно разграничить запуск тестов?

mvn -verify

Когда локально запускаю, чтоб брал вот этот образ
Код: java
1.
private static final String DOCKER_IMAGE = "postgres:11";



А на стэнде
Код: java
1.
private static final String DOCKER_IMAGE = "repo/docker-hub-proxy/library/postgres:11";



Это делать через анализ мавен профилей или есть другое решение?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
@Tag(INTEGRATION_TEST)
@Execution(ExecutionMode.CONCURRENT)
@ActiveProfiles("integration")
@Testcontainers
public abstract class IntegrationTest {

  static final String INTEGRATION_TEST = "integrationTest";

  //private static final String DOCKER_IMAGE = "postgres:11";
  private static final String DOCKER_IMAGE = "repo/docker-hub-proxy/library/postgres:11";
  private static final String DB_CONTAINER = "postgres";
  private static final String DB_NAME = "postgres";
  private static final String USERNAME = "postgres";
  private static final String PASSWORD = "postgres";

  public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    //private static final PostgreSQLContainer container = new PostgreSQLContainer<>(DOCKER_IMAGE)
    //    .withDatabaseName(DB_NAME)
    //    .withUsername(USERNAME)
    //    .withPassword(PASSWORD);
    private static final PostgreSQLContainer container = new PostgreSQLContainer<>(DockerImageName.parse(DOCKER_IMAGE)
        .asCompatibleSubstituteFor(DB_CONTAINER))
        .withDatabaseName(DB_NAME)
        .withUsername(USERNAME)
        .withPassword(PASSWORD);

    private static void startContainers() {
      Startables.deepStart(Stream.of(container))
          .join();
      // we can add further containers here like rabbitmq or other database
    }

    private static Map<String, Object> createConnectionConfiguration() {
      return Map.of(
          "spring.datasource.url", container.getJdbcUrl(),
          "spring.datasource.username", container.getUsername(),
          "spring.datasource.password", container.getPassword()
      );
    }


    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
      startContainers();

      ConfigurableEnvironment environment = applicationContext.getEnvironment();
      MapPropertySource testcontainers = new MapPropertySource("testcontainers", createConnectionConfiguration());
      environment.getPropertySources()
          .addFirst(testcontainers);
    }
  }
}
...
Рейтинг: 0 / 0
Интеграционные тесты и образ докера
    #40118645
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как-то так
Код: java
1.
@ActiveProfiles("integration-local")
...
Рейтинг: 0 / 0
Интеграционные тесты и образ докера
    #40118646
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как-то так
Код: java
1.
@ActiveProfiles("integration-local")



А у меня уже стоит такая аннтация

Я думал рассширить

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
      String[] activeProfiles = applicationContext.getEnvironment()
          .getActiveProfiles();
      Arrays.stream(activeProfiles)
          .forEach(profile -> LOG.info("Profile = {}", profile));
      boolean local = Arrays.stream(activeProfiles)
          .anyMatch(s -> s.equals("local"));
      startContainers(local);



И запускать - mvn verify -Pcheck-off -Dspring.profiles.active=local

Но @ActiveProfiles("integration") - имеет приоритет
...
Рейтинг: 0 / 0
Интеграционные тесты и образ докера
    #40118667
Профили созданы не для конфигурации свойств. Тут самая обычная ситуация когда мы хотим передавать свойства во время сборки. Т.е. просто есть какой-то дефолт для локальной сборки (dockerRegistryUrl=""), и его можно переопределить свойством типа -DdockerRegistryUrl=repo/docker-hub-proxy/library/ .
...
Рейтинг: 0 / 0
Интеграционные тесты и образ докера
    #40118671
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev
Профили созданы не для конфигурации свойств. Тут самая обычная ситуация когда мы хотим передавать свойства во время сборки. Т.е. просто есть какой-то дефолт для локальной сборки (dockerRegistryUrl=""), и его можно переопределить свойством типа -DdockerRegistryUrl=repo/docker-hub-proxy/library/ .


Тут проблема в другом, что стэнд на котором происходит сборка не наш
И я не могу ничего не подредактировать

НУ я понял вашу идею узнаю
...
Рейтинг: 0 / 0
Интеграционные тесты и образ докера
    #40118682
Дак стенд и не надо редактировать - надо редактировать параметры которые при сборке передаются. Точно так же как ты бы менял и остальные параметры тут mvn verify -Pcheck-off -Dspring.profiles.active=local .
...
Рейтинг: 0 / 0
Интеграционные тесты и образ докера
    #40132283
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос еще возник

https://www.testcontainers.org/test_framework_integration/manual_lifecycle_control/
Singleton containers

Можно ли создать TestContainer с динамическими настройкам?
То есть по сути достучаться до ConfigurableEnvironment из static чтоб считать Property

Или нет смысла копать
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public  class PostgresTestContainer {
    static final PostgreSQLContainer postgreSQLContainer;

    static {
        postgreSQLContainer = (PostgreSQLContainer) new PostgreSQLContainer("postgres:12")
                .withDatabaseName("test")
                .withUsername("postgres")
                .withPassword("postgres")
                .withReuse(true);

        postgreSQLContainer.start();
    }

    @DynamicPropertySource
    static void datasourceConfig(DynamicPropertyRegistry registry) {
        registry.add("spring.datasource.url", postgreSQLContainer::getJdbcUrl);
        registry.add("spring.datasource.password", postgreSQLContainer::getPassword);
        registry.add("spring.datasource.username", postgreSQLContainer::getUsername);
    }
}
...
Рейтинг: 0 / 0
Интеграционные тесты и образ докера
    #40132818
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного поздно, но по первому вопросу могу посоветовать посмотреть Automatically modifying Docker Hub image names

TestContainers docsYou can then configure Testcontainers to apply the prefix registry.mycompany.com/mirror/ to every image that it tries to pull from Docker Hub. This can be done in one of two ways:

Setting environment variables TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX=registry.mycompany.com/mirror/
Via config file, setting hub.image.name.prefix in either:
the ~/.testcontainers.properties file in your user home directory, or
a file named testcontainers.properties on the classpath
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Интеграционные тесты и образ докера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]