Я хочу иметь автоматизированные тесты для тестирования команд импорта из источника данных A (oracle) в источник данных B (postgres). Оба источника данных должны быть созданы с помощью testcontainers.
Базовая настройка выполнена, но проблема в следующем:
testcontainers oracleContainer запускается до того, как точка входа, определенная в файле Dokerfile, получит изменения, которые нужно завершить и создать пользователя, необходимого для тестов.
После запуска контейнера выполняются некоторые сценарии sql, создающие таблицы и заполняющие их данными. Эти сценарии не работают, потому что пользователь, упомянутый в сценарии, еще не создан.
testcontainers не ждет полной настройки.
Я установил контейнер следующим образом:
OracleContainer oracleContainer = new OracleContainer("webdizz/oracle-xe-11g-sa:latest")
.withStartupTimeoutSeconds(10000)
.withEnv("DATABASES", "xyz");
База данных определенно создана, но по прошествии довольно долгого времени (проверено, запустив тест навсегда и проверив базу данных с помощью docker exec)
Я попытался установить стратегию ожидания для контейнера несколькими способами, например так:
oracleContainer.setWaitStrategy(new LogMessageWaitStrategy().withRegEx("*.Enjoy!*"));
но это ни к чему не привело.
Проверив журналы с помощью:
Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(LOGGER);
oracleContainer.followOutput(logConsumer);
Я вижу, что testcontainers никогда не дожидаются его завершения.
Все, что я нашел в Интернете относительно этой «ошибки» или «проблемы», - это отчет об ошибке на github: https://github.com/testcontainers/testcontainers-java/issues/1292
и кажется, что пользователь даже использует тот же контейнер, что и я. Однако решение, упомянутое в проблеме, у меня не сработало.