diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml index 2d1d35680efb..38fe78c6291c 100644 --- a/testing-modules/pom.xml +++ b/testing-modules/pom.xml @@ -75,6 +75,7 @@ mockito-3 mockito-4 gatling-java + test-containers-podman diff --git a/testing-modules/test-containers-podman/pom.xml b/testing-modules/test-containers-podman/pom.xml new file mode 100644 index 000000000000..74985b2542a4 --- /dev/null +++ b/testing-modules/test-containers-podman/pom.xml @@ -0,0 +1,129 @@ + + + 4.0.0 + + + com.baeldung + testing-modules + 1.0.0-SNAPSHOT + + + test-containers-podman + 1.0-SNAPSHOT + test-containers-podman + Test Containers Using Podman + jar + + + 2.0.1 + 2.2.4 + + + + + org.testcontainers + testcontainers + ${testcontainers.version} + test + + + org.testcontainers + junit-jupiter + 1.21.3 + test + + + org.testcontainers + testcontainers-mysql + ${testcontainers.version} + test + + + org.testcontainers + kafka + 1.21.3 + test + + + com.redis + testcontainers-redis + ${redis.testcontainers.version} + test + + + + redis.clients + jedis + 5.1.0 + test + + + + org.junit.jupiter + junit-jupiter-engine + 5.10.2 + test + + + + com.mysql + mysql-connector-j + 9.5.0 + test + + + + org.apache.kafka + kafka-clients + 3.6.1 + test + + + + + + + + src/test/resources + true + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + unix://${env.XDG_RUNTIME_DIR}/podman/podman.sock + true + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + + unix://${env.XDG_RUNTIME_DIR}/podman/podman.sock + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 9 + 9 + + + + + diff --git a/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/KafkaLiveTest.java b/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/KafkaLiveTest.java new file mode 100644 index 000000000000..d6a3e3cab0b8 --- /dev/null +++ b/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/KafkaLiveTest.java @@ -0,0 +1,58 @@ +package com.baeldung.testcontainers.podman; + +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.clients.consumer.ConsumerRecords; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.apache.kafka.common.serialization.StringSerializer; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.utility.DockerImageName; + +import java.time.Duration; +import java.util.Collections; +import java.util.Properties; + +public class KafkaLiveTest { + + @Test + void whenProducingMessage_thenConsumerReceivesIt() { + DockerImageName image = DockerImageName.parse("confluentinc/cp-kafka:7.6.1"); + try (KafkaContainer kafka = new KafkaContainer(image)) { + kafka.start(); + + String bootstrap = kafka.getBootstrapServers(); + String topic = "hello"; + + Properties prodProps = new Properties(); + prodProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrap); + prodProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); + prodProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); + + try (KafkaProducer producer = new KafkaProducer<>(prodProps)) { + producer.send(new ProducerRecord<>(topic, "key", "hello")).get(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + Properties consProps = new Properties(); + consProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrap); + consProps.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group"); + consProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); + consProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); + consProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); + + try (KafkaConsumer consumer = new KafkaConsumer<>(consProps)) { + consumer.subscribe(Collections.singletonList(topic)); + ConsumerRecords records = consumer.poll(Duration.ofSeconds(10)); + ConsumerRecord first = records.iterator().next(); + Assertions.assertEquals("hello", first.value()); + } + } + } +} diff --git a/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/MysqlLiveTest.java b/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/MysqlLiveTest.java new file mode 100644 index 000000000000..e6df37781ba1 --- /dev/null +++ b/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/MysqlLiveTest.java @@ -0,0 +1,32 @@ +package com.baeldung.testcontainers.podman; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.testcontainers.mysql.MySQLContainer; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.Statement; + +class MysqlLiveTest { + + @Test + void whenQueryingDatabase_thenReturnsOne() throws Exception { + + try (MySQLContainer mysql = new MySQLContainer("mysql:8.4")) { + mysql.start(); + + try (Connection conn = DriverManager.getConnection( + mysql.getJdbcUrl(), mysql.getUsername(), mysql.getPassword()); + Statement st = conn.createStatement()) { + + st.execute("CREATE TABLE t(id INT PRIMARY KEY)"); + st.execute("INSERT INTO t VALUES (1)"); + ResultSet rs = st.executeQuery("SELECT COUNT(*) FROM t"); + rs.next(); + Assertions.assertEquals(1, rs.getInt(1)); + } + } + } +} diff --git a/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/RedisLiveTest.java b/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/RedisLiveTest.java new file mode 100644 index 000000000000..02f9075279b3 --- /dev/null +++ b/testing-modules/test-containers-podman/src/test/java/com.baeldung.testcontainers.podman/RedisLiveTest.java @@ -0,0 +1,26 @@ +package com.baeldung.testcontainers.podman; + + +import com.redis.testcontainers.RedisContainer; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import redis.clients.jedis.Jedis; + +class RedisLiveTest { + + @Test + void whenSettingValue_thenCanGetItBack() { + try (RedisContainer redis = new RedisContainer("redis:7-alpine").withExposedPorts(6379)) { + redis.start(); + + String host = redis.getHost(); + int port = redis.getFirstMappedPort(); + + try (Jedis jedis = new Jedis(host, port)) { + jedis.set("greeting", "hello"); + String value = jedis.get("greeting"); + Assertions.assertEquals("hello", value); + } + } + } +}