testcontainers-spring-boot 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
testcontainers-spring-boot 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
testcontainers-spring-boot 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT License
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 云计算云原生
开源组织
地区 不详
投 递 者 首席测试
适用人群 未知
收录时间 2021-12-09

软件简介

Data services library

codecov Codacy Badge Maven Central

If you develop services using Spring Boot and maybe Spring Cloud and you do medium sized tests during build process, then this set of Spring Boot auto-configurations might be handy. By adding module into classpath, you will get stateful service, like Couchbase or Kafka, auto-started and available for connection from your application service w/o wiring any additional code. Docker and TestContainers are used to bootstrap stateful service using Spring Cloud bootstrap phase. Usage of Spring Cloud in your production code is optional, but you will need it in tests. See How to use below.

How to use

  1. Install Docker on your machine

  2. Make sure you have Spring Boot and Spring Cloud in classpath of your tests. In case if you need to pick version.

    pom.xml
    <project>
    ...
          <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bootstrap</artifactId>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
                <version>[pick version]</version>
            </dependency>
    ...
    </project>
    Note
    testcontainers-spring-boot project migrated to Spring Boot 2.4 in 2.0.0 version. Please note, that in order to use this project with Spring Boot 2.4, you need to use spring-cloud-starter-bootstrap dependency. For earlier Spring Boot (prior to 2.4) users — you need to use spring-cloud-starter dependency instead.
  3. If you do not use Spring Cloud - make it work for tests only:

    pom.xml
    <project>
    ...
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
                <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter -->
                <version>[pick version]</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bootstrap</artifactId>
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
                <version>[pick version]</version>
                <scope>test</scope>
            </dependency>
    ...
    </project>
  4. Add data service library:

    pom.xml
    <project>
    ...
            <dependency>
                <groupId>com.playtika.testcontainers</groupId>
                <artifactId>embedded-kafka</artifactId>
                <!-- https://mvnrepository.com/artifact/com.playtika.testcontainers/ -->
                <version>[pick version]</version>
                <scope>test</scope>
            </dependency>
    ...
    </project>
  5. Use produced properties in your configuration.

    Example:

    /src/test/resources/application.properties
    spring.kafka.bootstrap-servers=${embedded.kafka.brokerList}
    /src/test/resources/bootstrap.properties
    embedded.kafka.topicsToCreate=some_topic

Common configuration options

Shutdown of embedded containers on spring application shutdown immediately

/src/test/resources/application.properties
embedded.containers.forceShutdown=true //default is false
Note
Otherwise, it will be shutdown with delay, see https://github.com/testcontainers/moby-ryuk

Disables all embedded containers

/src/test/resources/bootstrap.properties
embedded.containers.enabled=true //default is true
Note
If you setup, for example embedded.kafka.enabled + embedded.containers.enabled, result will be same as using AND between two booleans.
Note
embedded.kafka.enabled=false will cause DockerNotPresentException if you don’t have docker installed. But embedded.containers.enabled=false won’t cause any exceptions in this case.
Setting1 Setting2 Outcome

embedded.containers.enabled=false

embedded.memsql.enabled=true

Memsql will not start

embedded.containers.enabled=true

embedded.memsql.enabled=false

Memsql will not start

embedded.containers.enabled=true

embedded.memsql.enabled=true

Memsql will start

embedded.containers.enabled is missing

embedded.memsql.enabled is missing

Memsql will start

Setting name Default value Description

embedded.{module-name}.waitTimeoutInSeconds

60

Waiting time for a container to start in seconds

embedded.{module-name}.enabled

true

Enables a container to be started on startup

embedded.{module-name}.reuseContainer

false

Enables a reuse container testcontainers feature.

embedded.{module-name}.command

null

List of keywords which combines into command for container startup. Some modules ship container’s commands by default, so resetting this value may lead to incorrect work of container.

embedded.{module-name}.env

null

key-value map of additional environment variables. Where key is name of variable and value is actual value of it.

embedded.{module-name}.filesToInclude

empty list

List of files to include objects. Each object should have two parameters:

  • classpathResource (path to local file)

  • containerPath (path in a container to where file needs to be copied)

Example:

embedded.redis.filesToInclude:
  classpathResource: "/my_local_file.txt"
  containerPath: "/etc/path_in_container.txt"

embedded.{module-name}.mountVolumes

empty list

List of mount volumes to persist between container restarts. Each object should have three parameters:

  • hostPath (path to local file/directory)

  • containerPath (path in container to mount file/directory onto)

  • mode (access mode default READ_ONLY, or READ_WRITE)

Example:

embedded.postgresql.mountVolumes:
  hostPath: "pgdata"
  containerPath: "/var/lib/postgresql/data"
  mode: READ_WRITE

embedded.{module-name}.capabilities

empty list. NET_ADMIN is set for Aerospike, Couchbase, Elasticsearch, Kafka, Mariadb, Memsql, Minio, Mongodb, Mysql, Neo4j, Redis containers. NOTE: NET_ADMIN is needed for the NetworkTestOperations to work.

The Linux capabilities that should be enabled. You can disable all capabilities by providing empty value for this property. See: https://man7.org/linux/man-pages/man7/capabilities.7.html. Available values can be taken from com.github.dockerjava.api.model.Capability class.

How to contribute

Flow

  • There are 2 branches in project: master and develop

  • You need to fork project and create branch from develop

  • You do not need to update project version in pom.xml files, this will be done by release job

  • Once finished - create pull request to develop from your fork, pass review and wait for merge

  • On release, ci job will merge develop into master and remove snapshot + publish artifacts into public maven repo

Checklist for contributing new module

  • Naming/formatting patterns match existing code

  • Test for success scenario

  • Test for negative scenario (autoconfiguration is disabled via properties). How to test autoconfiguration

  • Add new module to testcontainers-spring-boot-bom

  • Module provides documentation in README.adoc and this documentation is included in parent README.adoc (see an example in already existing modules). Documentation should include:

    • maven module declaration

    • consumed properties

    • produced properties

    • notes (if applicable)

    • example of usage

Release

展开阅读全文

代码

评论

点击引领话题📣
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
JetBrains Kotlin 授权问题漏洞
缺省权限不正确
JetBrains Kotlin是捷克JetBrains公司的一款在Java虚拟机上运行的静态类型编程语言。 JetBrains Kotlin before 1.4.2 存在授权问题漏洞,该漏洞源于权限不安全,攻击者可利用该漏洞读取数据。
CVE-2020-29582 MPS-2021-1082
2022-08-08 18:09
oracle communications pricing design center-12.0.0.5加锁机制不恰当漏洞
加锁机制不恰当
在 1.6.0 之前的 JetBrains Kotlin 中,无法锁定多平台 Gradle 项目的依赖项。
CVE-2022-24329 MPS-2022-3233
2022-08-08 18:09
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
0 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部