Simple example demonstrating how testcontainers, Elasticsearch and JUnit 5 can play together.
- Spring Boot >= 3.0.x
- Kotlin >= 1.7.x
- Elasticsearch >= 8.5.3 with new java client
- Testcontainers >= 1.17.x
- JUnit >= 5.9.x
- Java 17
- Maven >= 3.2.1 (Kotlin comes as maven dependency)
- Docker >= 3.0 (for integration tests)
Integration test TweetControllerIT
will be started in maven phase verify
.
$ git clone https://github.com/larmic/spring-boot-demos
$ mvn clean verify -f spring-boot-elasticsearch
# start local elasticsearch
$ docker run --rm -p 9200:9200 -p 9300:9300 --name testcontainers-junit5-demo -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e "cluster.name=elasticsearch" docker.elastic.co/elasticsearch/elasticsearch-oss:7.9.2
# start application
$ mvn spring-boot:run
# HTTP request examples
# Get all tweets
$ curl -i -H "Accept: application/json" --request GET http://localhost:8080/
# Post a new tweet
$ curl -i -H "Content-Type: application/json" --request POST --data 'hello, this is a tweet!' http://localhost:8080/
# Read a specific tweet
$ curl -i -H "Accept: application/json" --request GET http://localhost:8080/{tweet-id}
# Delete a specific tweet
$ curl -i -H "Accept: application/json" --request DELETE http://localhost:8080/{tweet-id}
# Update a specific tweet
$ curl -i -H "Content-Type: application/json" "Accept: application/json" --request PUT --data 'hello, this is a changed tweet!' http://localhost:8080/{tweet-id}