--- /dev/null
+package de.juplo.kafka.chat.backend;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.server.LocalServerPort;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.reactive.server.WebTestClient;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
+
+import java.time.Duration;
+
+
+@SpringBootTest(
+ webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ properties = "chat.backend.storage-directory=target/test-classes/data/files")
+class InMemoryWithFilesConfigurationIT
+{
+ @LocalServerPort
+ private int port;
+ @Autowired
+ private WebTestClient webTestClient;
+
+ @Test
+ void contextLoads()
+ {
+ Awaitility
+ .await()
+ .atMost(Duration.ofSeconds(15))
+ .untilAsserted(() ->
+ {
+ webTestClient
+ .get()
+ .uri("http://localhost:{port}/actuator/health", port)
+ .exchange()
+ .expectStatus().isOk()
+ .expectBody().jsonPath("$.status").isEqualTo("UP");
+ webTestClient
+ .get()
+ .uri("http://localhost:{port}/618e89ae-fdc0-4c65-8055-f49908295e8f", port)
+ .accept(MediaType.APPLICATION_JSON)
+ .exchange()
+ .expectStatus().isOk()
+ .expectBody().jsonPath("$.name").isEqualTo("Peter's Chat-Room");
+ webTestClient
+ .get()
+ .uri("http://localhost:{port}/618e89ae-fdc0-4c65-8055-f49908295e8f/ute/1478", port)
+ .accept(MediaType.APPLICATION_JSON)
+ .exchange()
+ .expectStatus().isOk()
+ .expectBody().jsonPath("$.text").isEqualTo("Nachricht Nr. 1478");
+ });
+ }
+}
+++ /dev/null
-package de.juplo.kafka.chat.backend;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.web.server.LocalServerPort;
-import org.springframework.http.MediaType;
-import org.springframework.test.web.reactive.server.WebTestClient;
-import org.testcontainers.shaded.org.awaitility.Awaitility;
-
-import java.time.Duration;
-
-
-@SpringBootTest(
- webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
- properties = "chat.backend.storage-directory=target/test-classes/data/files")
-class InMemoryWithFilesStorageIT
-{
- @LocalServerPort
- private int port;
- @Autowired
- private WebTestClient webTestClient;
-
- @Test
- void contextLoads()
- {
- Awaitility
- .await()
- .atMost(Duration.ofSeconds(15))
- .untilAsserted(() ->
- {
- webTestClient
- .get()
- .uri("http://localhost:{port}/actuator/health", port)
- .exchange()
- .expectStatus().isOk()
- .expectBody().jsonPath("$.status").isEqualTo("UP");
- webTestClient
- .get()
- .uri("http://localhost:{port}/618e89ae-fdc0-4c65-8055-f49908295e8f", port)
- .accept(MediaType.APPLICATION_JSON)
- .exchange()
- .expectStatus().isOk()
- .expectBody().jsonPath("$.name").isEqualTo("Peter's Chat-Room");
- webTestClient
- .get()
- .uri("http://localhost:{port}/618e89ae-fdc0-4c65-8055-f49908295e8f/ute/1478", port)
- .accept(MediaType.APPLICATION_JSON)
- .exchange()
- .expectStatus().isOk()
- .expectBody().jsonPath("$.text").isEqualTo("Nachricht Nr. 1478");
- });
- }
-}
--- /dev/null
+package de.juplo.kafka.chat.backend;
+
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.server.LocalServerPort;
+import org.springframework.http.MediaType;
+import org.springframework.test.context.DynamicPropertyRegistry;
+import org.springframework.test.context.DynamicPropertySource;
+import org.springframework.test.web.reactive.server.WebTestClient;
+import org.testcontainers.containers.BindMode;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
+
+import java.time.Duration;
+
+
+@SpringBootTest(
+ webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ properties = {
+ "chat.backend.storage=mongodb",
+ "spring.data.mongodb.host=localhost",
+ "spring.data.mongodb.database=test" })
+@Testcontainers
+@Slf4j
+class InMemoryWithMongoDbConfigurationIT
+{
+ @LocalServerPort
+ private int port;
+ @Autowired
+ private WebTestClient webTestClient;
+
+ @Test
+ @DisplayName("The app starts, the data is restored and accessible")
+ void test()
+ {
+ Awaitility
+ .await()
+ .atMost(Duration.ofSeconds(15))
+ .untilAsserted(() ->
+ {
+ webTestClient
+ .get()
+ .uri("http://localhost:{port}/actuator/health", port)
+ .exchange()
+ .expectStatus().isOk()
+ .expectBody().jsonPath("$.status").isEqualTo("UP");
+ webTestClient
+ .get()
+ .uri("http://localhost:{port}/4ace69b7-a79f-481b-ad0d-d756d60b66ec", port)
+ .accept(MediaType.APPLICATION_JSON)
+ .exchange()
+ .expectStatus().isOk()
+ .expectBody().jsonPath("$.name").isEqualTo("FOO");
+ webTestClient
+ .get()
+ .uri("http://localhost:{port}/4ace69b7-a79f-481b-ad0d-d756d60b66ec/ute/1", port)
+ .accept(MediaType.APPLICATION_JSON)
+ .exchange()
+ .expectStatus().isOk()
+ .expectBody().jsonPath("$.text").isEqualTo("Ich bin Ute...");
+ webTestClient
+ .get()
+ .uri("http://localhost:{port}/4ace69b7-a79f-481b-ad0d-d756d60b66ec/peter/1", port)
+ .accept(MediaType.APPLICATION_JSON)
+ .exchange()
+ .expectStatus().isOk()
+ .expectBody().jsonPath("$.text").isEqualTo("Hallo, ich heiße Peter!");
+ });
+ }
+
+ private static final int MONGODB_PORT = 27017;
+
+ @Container
+ private static final GenericContainer CONTAINER =
+ new GenericContainer("mongo:6")
+ .withClasspathResourceMapping(
+ "data/mongodb",
+ "/docker-entrypoint-initdb.d",
+ BindMode.READ_ONLY)
+ .withExposedPorts(MONGODB_PORT);
+
+ @DynamicPropertySource
+ static void addMongoPortProperty(DynamicPropertyRegistry registry)
+ {
+ registry.add("spring.data.mongodb.port", () -> CONTAINER.getMappedPort(27017));
+ }
+
+ @BeforeEach
+ void setUpLogging()
+ {
+ Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(log);
+ CONTAINER.followOutput(logConsumer);
+ }
+}
+++ /dev/null
-package de.juplo.kafka.chat.backend;
-
-import lombok.extern.slf4j.Slf4j;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.web.server.LocalServerPort;
-import org.springframework.http.MediaType;
-import org.springframework.test.context.DynamicPropertyRegistry;
-import org.springframework.test.context.DynamicPropertySource;
-import org.springframework.test.web.reactive.server.WebTestClient;
-import org.testcontainers.containers.BindMode;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.junit.jupiter.Container;
-import org.testcontainers.junit.jupiter.Testcontainers;
-import org.testcontainers.shaded.org.awaitility.Awaitility;
-
-import java.time.Duration;
-
-
-@SpringBootTest(
- webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
- properties = {
- "chat.backend.storage=mongodb",
- "spring.data.mongodb.host=localhost",
- "spring.data.mongodb.database=test" })
-@Testcontainers
-@Slf4j
-class InMemoryWithMongoDbStorageIT
-{
- @LocalServerPort
- private int port;
- @Autowired
- private WebTestClient webTestClient;
-
- @Test
- @DisplayName("The app starts, the data is restored and accessible")
- void test()
- {
- Awaitility
- .await()
- .atMost(Duration.ofSeconds(15))
- .untilAsserted(() ->
- {
- webTestClient
- .get()
- .uri("http://localhost:{port}/actuator/health", port)
- .exchange()
- .expectStatus().isOk()
- .expectBody().jsonPath("$.status").isEqualTo("UP");
- webTestClient
- .get()
- .uri("http://localhost:{port}/4ace69b7-a79f-481b-ad0d-d756d60b66ec", port)
- .accept(MediaType.APPLICATION_JSON)
- .exchange()
- .expectStatus().isOk()
- .expectBody().jsonPath("$.name").isEqualTo("FOO");
- webTestClient
- .get()
- .uri("http://localhost:{port}/4ace69b7-a79f-481b-ad0d-d756d60b66ec/ute/1", port)
- .accept(MediaType.APPLICATION_JSON)
- .exchange()
- .expectStatus().isOk()
- .expectBody().jsonPath("$.text").isEqualTo("Ich bin Ute...");
- webTestClient
- .get()
- .uri("http://localhost:{port}/4ace69b7-a79f-481b-ad0d-d756d60b66ec/peter/1", port)
- .accept(MediaType.APPLICATION_JSON)
- .exchange()
- .expectStatus().isOk()
- .expectBody().jsonPath("$.text").isEqualTo("Hallo, ich heiße Peter!");
- });
- }
-
- private static final int MONGODB_PORT = 27017;
-
- @Container
- private static final GenericContainer CONTAINER =
- new GenericContainer("mongo:6")
- .withClasspathResourceMapping(
- "data/mongodb",
- "/docker-entrypoint-initdb.d",
- BindMode.READ_ONLY)
- .withExposedPorts(MONGODB_PORT);
-
- @DynamicPropertySource
- static void addMongoPortProperty(DynamicPropertyRegistry registry)
- {
- registry.add("spring.data.mongodb.port", () -> CONTAINER.getMappedPort(27017));
- }
-
- @BeforeEach
- void setUpLogging()
- {
- Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(log);
- CONTAINER.followOutput(logConsumer);
- }
-}
--- /dev/null
+package de.juplo.kafka.chat.backend.persistence;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import de.juplo.kafka.chat.backend.api.ShardingStrategy;
+import de.juplo.kafka.chat.backend.domain.ChatHomeService;
+import de.juplo.kafka.chat.backend.domain.ChatRoomFactory;
+import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomFactory;
+import de.juplo.kafka.chat.backend.persistence.storage.files.FilesStorageStrategy;
+import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
+import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.BeforeEach;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.time.Clock;
+import java.util.function.Supplier;
+
+
+@Slf4j
+public class InMemoryWithFilesStorageIT extends AbstractStorageStrategyIT
+{
+ final static Path path = Paths.get("target","local-json-files");
+
+ final Clock clock;
+ final ObjectMapper mapper;
+ final FilesStorageStrategy storageStrategy;
+
+
+ public InMemoryWithFilesStorageIT()
+ {
+ clock = Clock.systemDefaultZone();
+ mapper = new ObjectMapper();
+ mapper.registerModule(new JavaTimeModule());
+ mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ storageStrategy = new FilesStorageStrategy(
+ path,
+ clock,
+ 8,
+ messageFlux -> new InMemoryChatRoomService(messageFlux),
+ mapper);
+ }
+
+
+ @Override
+ protected StorageStrategy getStorageStrategy()
+ {
+ return storageStrategy;
+ }
+
+ @Override
+ protected Supplier<ChatHomeService> getChatHomeServiceSupplier()
+ {
+ return () -> new InMemoryChatHomeService(1, getStorageStrategy().read());
+ }
+
+ @Override
+ protected ChatRoomFactory getChatRoomFactory()
+ {
+ ShardingStrategy strategy = chatRoomId -> 0;
+ return new InMemoryChatRoomFactory(strategy, clock, 8);
+ }
+
+ @BeforeEach
+ void reset() throws Exception
+ {
+ if (Files.exists(path))
+ {
+ Files
+ .walk(path)
+ .forEach(file ->
+ {
+ try
+ {
+ if (!file.equals(path))
+ {
+ log.debug("Deleting file {}", file);
+ Files.delete(file);
+ }
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ });
+ log.debug("Deleting data-directory {}", path);
+ Files.delete(path);
+ }
+ }
+}
+++ /dev/null
-package de.juplo.kafka.chat.backend.persistence;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import de.juplo.kafka.chat.backend.api.ShardingStrategy;
-import de.juplo.kafka.chat.backend.domain.ChatHomeService;
-import de.juplo.kafka.chat.backend.domain.ChatRoomFactory;
-import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomFactory;
-import de.juplo.kafka.chat.backend.persistence.storage.files.FilesStorageStrategy;
-import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
-import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.jupiter.api.BeforeEach;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.time.Clock;
-import java.util.function.Supplier;
-
-
-@Slf4j
-public class InMemoryWithFilesStorageStrategyIT extends AbstractStorageStrategyIT
-{
- final static Path path = Paths.get("target","local-json-files");
-
- final Clock clock;
- final ObjectMapper mapper;
- final FilesStorageStrategy storageStrategy;
-
-
- public InMemoryWithFilesStorageStrategyIT()
- {
- clock = Clock.systemDefaultZone();
- mapper = new ObjectMapper();
- mapper.registerModule(new JavaTimeModule());
- mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- storageStrategy = new FilesStorageStrategy(
- path,
- clock,
- 8,
- messageFlux -> new InMemoryChatRoomService(messageFlux),
- mapper);
- }
-
-
- @Override
- protected StorageStrategy getStorageStrategy()
- {
- return storageStrategy;
- }
-
- @Override
- protected Supplier<ChatHomeService> getChatHomeServiceSupplier()
- {
- return () -> new InMemoryChatHomeService(1, getStorageStrategy().read());
- }
-
- @Override
- protected ChatRoomFactory getChatRoomFactory()
- {
- ShardingStrategy strategy = chatRoomId -> 0;
- return new InMemoryChatRoomFactory(strategy, clock, 8);
- }
-
- @BeforeEach
- void reset() throws Exception
- {
- if (Files.exists(path))
- {
- Files
- .walk(path)
- .forEach(file ->
- {
- try
- {
- if (!file.equals(path))
- {
- log.debug("Deleting file {}", file);
- Files.delete(file);
- }
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
- });
- log.debug("Deleting data-directory {}", path);
- Files.delete(path);
- }
- }
-}
--- /dev/null
+package de.juplo.kafka.chat.backend.persistence;
+
+import de.juplo.kafka.chat.backend.api.ShardingStrategy;
+import de.juplo.kafka.chat.backend.domain.ChatHomeService;
+import de.juplo.kafka.chat.backend.domain.ChatRoomFactory;
+import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
+import de.juplo.kafka.chat.backend.persistence.InMemoryWithMongoDbStorageIT.DataSourceInitializer;
+import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomFactory;
+import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
+import de.juplo.kafka.chat.backend.persistence.storage.mongodb.ChatRoomRepository;
+import de.juplo.kafka.chat.backend.persistence.storage.mongodb.MongoDbStorageStrategy;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.autoconfigure.data.mongo.AutoConfigureDataMongo;
+import org.springframework.boot.test.context.TestConfiguration;
+import org.springframework.context.ApplicationContextInitializer;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.context.support.TestPropertySourceUtils;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.junit.jupiter.Container;
+import org.testcontainers.junit.jupiter.Testcontainers;
+
+import java.time.Clock;
+import java.util.function.Supplier;
+
+
+@Testcontainers
+@ExtendWith({SpringExtension.class})
+@EnableAutoConfiguration
+@AutoConfigureDataMongo
+@ContextConfiguration(initializers = DataSourceInitializer.class)
+@Slf4j
+public class InMemoryWithMongoDbStorageIT extends AbstractStorageStrategyIT
+{
+ @Autowired
+ MongoDbStorageStrategy storageStrategy;
+ @Autowired
+ Clock clock;
+
+
+ @Override
+ protected StorageStrategy getStorageStrategy()
+ {
+ return storageStrategy;
+ }
+
+ @Override
+ protected Supplier<ChatHomeService> getChatHomeServiceSupplier()
+ {
+ return () -> new InMemoryChatHomeService(1, getStorageStrategy().read());
+ }
+
+ @Override
+ protected ChatRoomFactory getChatRoomFactory()
+ {
+ ShardingStrategy strategy = chatRoomId -> 0;
+ return new InMemoryChatRoomFactory(strategy, clock, 8);
+ }
+
+ @TestConfiguration
+ static class InMemoryWithMongoDbStorageStrategyITConfig
+ {
+ @Bean
+ MongoDbStorageStrategy storageStrategy(
+ ChatRoomRepository chatRoomRepository,
+ Clock clock)
+ {
+ return new MongoDbStorageStrategy(
+ chatRoomRepository,
+ clock,
+ 8,
+ messageFlux -> new InMemoryChatRoomService(messageFlux));
+ }
+
+ @Bean
+ Clock clock()
+ {
+ return Clock.systemDefaultZone();
+ }
+ }
+
+ private static final int MONGODB_PORT = 27017;
+
+ @Container
+ private static final GenericContainer CONTAINER =
+ new GenericContainer("mongo:6")
+ .withExposedPorts(MONGODB_PORT);
+
+ public static class DataSourceInitializer
+ implements ApplicationContextInitializer<ConfigurableApplicationContext>
+ {
+ @Override
+ public void initialize(ConfigurableApplicationContext applicationContext)
+ {
+ TestPropertySourceUtils.addInlinedPropertiesToEnvironment(
+ applicationContext,
+ "spring.data.mongodb.host=localhost",
+ "spring.data.mongodb.port=" + CONTAINER.getMappedPort(MONGODB_PORT),
+ "spring.data.mongodb.database=test");
+ }
+ }
+
+ @BeforeEach
+ void setUpLogging()
+ {
+ Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(log);
+ CONTAINER.followOutput(logConsumer);
+ }
+}
+++ /dev/null
-package de.juplo.kafka.chat.backend.persistence;
-
-import de.juplo.kafka.chat.backend.api.ShardingStrategy;
-import de.juplo.kafka.chat.backend.domain.ChatHomeService;
-import de.juplo.kafka.chat.backend.domain.ChatRoomFactory;
-import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
-import de.juplo.kafka.chat.backend.persistence.InMemoryWithMongoDbStorageStrategyIT.DataSourceInitializer;
-import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomFactory;
-import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
-import de.juplo.kafka.chat.backend.persistence.storage.mongodb.ChatRoomRepository;
-import de.juplo.kafka.chat.backend.persistence.storage.mongodb.MongoDbStorageStrategy;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import org.springframework.boot.test.autoconfigure.data.mongo.AutoConfigureDataMongo;
-import org.springframework.boot.test.context.TestConfiguration;
-import org.springframework.context.ApplicationContextInitializer;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.context.annotation.Bean;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit.jupiter.SpringExtension;
-import org.springframework.test.context.support.TestPropertySourceUtils;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.output.Slf4jLogConsumer;
-import org.testcontainers.junit.jupiter.Container;
-import org.testcontainers.junit.jupiter.Testcontainers;
-
-import java.time.Clock;
-import java.util.function.Supplier;
-
-
-@Testcontainers
-@ExtendWith({SpringExtension.class})
-@EnableAutoConfiguration
-@AutoConfigureDataMongo
-@ContextConfiguration(initializers = DataSourceInitializer.class)
-@Slf4j
-public class InMemoryWithMongoDbStorageStrategyIT extends AbstractStorageStrategyIT
-{
- @Autowired
- MongoDbStorageStrategy storageStrategy;
- @Autowired
- Clock clock;
-
-
- @Override
- protected StorageStrategy getStorageStrategy()
- {
- return storageStrategy;
- }
-
- @Override
- protected Supplier<ChatHomeService> getChatHomeServiceSupplier()
- {
- return () -> new InMemoryChatHomeService(1, getStorageStrategy().read());
- }
-
- @Override
- protected ChatRoomFactory getChatRoomFactory()
- {
- ShardingStrategy strategy = chatRoomId -> 0;
- return new InMemoryChatRoomFactory(strategy, clock, 8);
- }
-
- @TestConfiguration
- static class InMemoryWithMongoDbStorageStrategyITConfig
- {
- @Bean
- MongoDbStorageStrategy storageStrategy(
- ChatRoomRepository chatRoomRepository,
- Clock clock)
- {
- return new MongoDbStorageStrategy(
- chatRoomRepository,
- clock,
- 8,
- messageFlux -> new InMemoryChatRoomService(messageFlux));
- }
-
- @Bean
- Clock clock()
- {
- return Clock.systemDefaultZone();
- }
- }
-
- private static final int MONGODB_PORT = 27017;
-
- @Container
- private static final GenericContainer CONTAINER =
- new GenericContainer("mongo:6")
- .withExposedPorts(MONGODB_PORT);
-
- public static class DataSourceInitializer
- implements ApplicationContextInitializer<ConfigurableApplicationContext>
- {
- @Override
- public void initialize(ConfigurableApplicationContext applicationContext)
- {
- TestPropertySourceUtils.addInlinedPropertiesToEnvironment(
- applicationContext,
- "spring.data.mongodb.host=localhost",
- "spring.data.mongodb.port=" + CONTAINER.getMappedPort(MONGODB_PORT),
- "spring.data.mongodb.database=test");
- }
- }
-
- @BeforeEach
- void setUpLogging()
- {
- Slf4jLogConsumer logConsumer = new Slf4jLogConsumer(log);
- CONTAINER.followOutput(logConsumer);
- }
-}