У меня есть базовый c Spring
репозиторий:
@Repository
public interface LRepository extends MongoRepository<L, String> {}
И я использую его внутри службы:
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class SerImpl {
private final LRepository repository;
public String saveL(L l) {
l = repository.save(l);
return l.id;
}
}
На линии .save(l)
мои тестовые таймауты .
@SpringBootTest
@ExtendWith(SpringExtension.class)
@Testcontainers
@ContextConfiguration(initializers = {MongoIntegrationTest.TestPropertiesInitializer.class})
class MongoIntegrationTest {
private SerImpl serImpl;
@Autowired
private LRepository lRepository;
public static class TestPropertiesInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
final TestPropertyValues values = TestPropertyValues.of(
"spring.data.mongodb.host=localhost",
"spring.data.mongodb.username=root",
"spring.data.mongodb.password=example",
"spring.data.mongodb.authentication-database=admin",
"spring.data.mongodb.database=l",
"spring.data.mongodb.uri=mongodb://root:example@localhost:27017"
);
values.applyTo(configurableApplicationContext);
}
}
@Container
public GenericContainer mongoDb = new GenericContainer("mongo:4.2.2")
.withExposedPorts(27017)
.withEnv("MONGO_INITDB_ROOT_USERNAME", "root")
.withEnv("MONGO_INITDB_ROOT_PASSWORD", "example");
@BeforeEach
public void setUp() {
mongoDb.start();
String address = mongoDb.getContainerIpAddress();
//List<Integer> exposedPorts = mongoDb.getExposedPorts();
Integer port = mongoDb.getFirstMappedPort();
Map<String,String> map = mongoDb.getEnvMap();
serImpl = new SerImpl(lRepository);
}
@Test
public void testSimplePutAndGet() {
String id = serImpl.saveL(new L("aaa"));
assertNotNull(id);
}
}
В сети l = repository.save(l);
Я получаю сообщение об ошибке
org.mongodb.driver.cluster : Cluster description not yet available. Waiting for 30000 ms before timing out.
Я пытался исправить это, увеличив тайм-аут:
@Configuration
public class MongoConfiguration {
@Bean
public MongoClientOptions mongoOptions() {
return MongoClientOptions
.builder()
.serverSelectionTimeout(180000)
.build();
}
}
Но больше времени мне здесь не помогло. L
- это объект с полем String
. Я упростил приведенный выше код, чтобы сделать его более M VCE. Когда тест запускается, я вижу контейнер, работающий и открывающий порт.
Если я запускаю mon go контейнер с docker, тест пройден успешно.
Я запускаю его на Windows.