Cześć, mam problem z testem integracyjnym z użyciem MongoDbConatner.
Wcześniej znalazłem te źródła: https://java.testcontainers.org/modules/databases/mongodb/
https://www.baeldung.com/java-mongodb-testcontainers
https://medium.com/@soham2312/database-integration-tests-with-mongo-and-testcontainers-8ae17ebd4d8c
Generalnie tak, zrobiłem abstrakcyjny test:
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
@Testcontainers
@SpringBootTest
@ActiveProfiles("test")
public abstract class AbstractBaseIntegrationTest {
@Container
static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:7.0").withExposedPorts(27017)
.withEnv("MONGO_INITDB_DATABASE", "test_db")
.withEnv("MONGO_INIT_ROOT_USERNAME", "test_user")
.withEnv("MONGO_INIT_ROOT_PASSWORD", "test_password");
@DynamicPropertySource
static void containersProperties(DynamicPropertyRegistry registry) {
mongoDBContainer.start();
registry.add("spring.data.mongodb.host", mongoDBContainer::getHost);
registry.add("spring.data.mongodb.port", mongoDBContainer::getFirstMappedPort);
}
}
application-test.yaml:
spring:
data:
mongodb:
host: localhost
database: test_db
username: test_user
password: test_password
authentication-database: admin
uri: mongodb://test_user:test_password@localhost:27017/test_db?authSource=admin
Testy się uruchamiają i dostaję taki error:
org.springframework.dao.DataAccessResourceFailureException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Połączenie odrzucone}}]; nested exception is com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Połączenie odrzucone}}]
Wcześniej miałem problem z authentykacją, ale ta zmiana to poprawiła:
uri: mongodb://test_user:test_password@localhost:27017/test_db?authSource=admin
Może ktoś kto ma większe doświadczenie w pracy z Mongo spotkał się z czymś takim?
Ja z tym na codzień nie pracuję
Dodam że docker ps zwraca mi, że ten kontener działa i jest na tym porcie dostępny