- здесь мы создаём контейнеры
- также в проекте есть свойство ryuk.container.image=testcontainers/ryuk:0.3.3 который создает контейнер, который должен удалить все тестовые контейнеры после завершения тестов, но по каким-то причинам удаление не происходит
Код: Выделить всё
public class TestContainersSpringContextCustomizerFactory implements ContextCustomizerFactory {
private static SqlTestContainer prodTestContainer;
private static S3TestContainer minioContainer;
private static ElasticsearchTestContainer elasticsearchBean;
private static RabbitMQTestContainer rabbitMQContainer;
private Logger log = LoggerFactory.getLogger(TestContainersSpringContextCustomizerFactory.class);
@Override
public ContextCustomizer createContextCustomizer(Class testClass,
List configAttributes) {
return (context, mergedConfig) -> {
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
TestPropertyValues testValues = TestPropertyValues.empty();
EmbeddedElasticsearch elasticsearchAnnotation = AnnotatedElementUtils.findMergedAnnotation(
testClass,
EmbeddedElasticsearch.class
);
if (null != elasticsearchAnnotation) {
log.debug("detected the EmbeddedElasticsearch annotation on class {}", testClass.getName());
log.info("Warming up the elastic database");
if (null == elasticsearchBean) {
elasticsearchBean = beanFactory.createBean(ElasticsearchTestContainer.class);
beanFactory.registerSingleton(ElasticsearchTestContainer.class.getName(),
elasticsearchBean);
// ((DefaultListableBeanFactory)beanFactory).registerDisposableBean(ElasticsearchTestContainer.class.getName(), elasticsearchBean);
}
testValues =
testValues.and(
"spring.elasticsearch.uris=http://"
+ elasticsearchBean.getElasticsearchContainer().getHttpHostAddress()
);
}
//similary code other for other containers
}
В качестве примера покажу код одного из 4-х контейнеров, остальные пишутся аналогично
В качестве примера покажу код одного из 4-х контейнеров, остальные пишутся аналогично
р>
Код: Выделить всё
/**
* Base class for starting/stopping ElasticSearch during tests.
*/
public class ElasticsearchTestContainer implements InitializingBean, DisposableBean {
private static final Logger log = LoggerFactory.getLogger(ElasticsearchTestContainer.class);
private static final Integer CONTAINER_STARTUP_TIMEOUT_MINUTES = 10;
private ElasticsearchContainer elasticsearchContainer;
@Override
public void destroy() {
if (null != elasticsearchContainer && elasticsearchContainer.isRunning()) {
elasticsearchContainer.close();
}
}
@Override
public void afterPropertiesSet() {
if (null == elasticsearchContainer) {
elasticsearchContainer =
new ElasticsearchContainer(
DockerImageName.parse("docker-persistent.nexus.jaga.rt.ru/elasticsearch")
.asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch")
.withTag("7.17.4"))
.withStartupTimeout(
Duration.of(CONTAINER_STARTUP_TIMEOUT_MINUTES, ChronoUnit.MINUTES))
.withSharedMemorySize(256000000L)
.withEnv("ES_JAVA_OPTS", "-Xms256m -Xmx256m")
.withEnv("xpack.security.enabled", "false")
.withLogConsumer(new Slf4jLogConsumer(log))
.withReuse(true);
}
if (!elasticsearchContainer.isRunning()) {
elasticsearchContainer.start();
}
}
public ElasticsearchContainer getElasticsearchContainer() {
return elasticsearchContainer;
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... s-complete