Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Интеграционные тесты и образ докера / 8 сообщений из 8, страница 1 из 1
09.12.2021, 15:47
    #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
09.12.2021, 15:56
    #40118645
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграционные тесты и образ докера
Как-то так
Код: java
1.
@ActiveProfiles("integration-local")
...
Рейтинг: 0 / 0
09.12.2021, 16:01
    #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
09.12.2021, 16:55
    #40118667
Интеграционные тесты и образ докера
Профили созданы не для конфигурации свойств. Тут самая обычная ситуация когда мы хотим передавать свойства во время сборки. Т.е. просто есть какой-то дефолт для локальной сборки (dockerRegistryUrl=""), и его можно переопределить свойством типа -DdockerRegistryUrl=repo/docker-hub-proxy/library/ .
...
Рейтинг: 0 / 0
09.12.2021, 17:02
    #40118671
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интеграционные тесты и образ докера
Stanislav Bashkyrtsev
Профили созданы не для конфигурации свойств. Тут самая обычная ситуация когда мы хотим передавать свойства во время сборки. Т.е. просто есть какой-то дефолт для локальной сборки (dockerRegistryUrl=""), и его можно переопределить свойством типа -DdockerRegistryUrl=repo/docker-hub-proxy/library/ .


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

НУ я понял вашу идею узнаю
...
Рейтинг: 0 / 0
09.12.2021, 17:19
    #40118682
Интеграционные тесты и образ докера
Дак стенд и не надо редактировать - надо редактировать параметры которые при сборке передаются. Точно так же как ты бы менял и остальные параметры тут mvn verify -Pcheck-off -Dspring.profiles.active=local .
...
Рейтинг: 0 / 0
07.02.2022, 16:59
    #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
09.02.2022, 14:23
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Интеграционные тесты и образ докера / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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