1 package de.juplo.kafka.chat.backend.persistence;
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import com.fasterxml.jackson.databind.SerializationFeature;
5 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
6 import de.juplo.kafka.chat.backend.api.ShardingStrategy;
7 import de.juplo.kafka.chat.backend.domain.ChatHomeService;
8 import de.juplo.kafka.chat.backend.domain.ChatRoomFactory;
9 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomFactory;
10 import de.juplo.kafka.chat.backend.persistence.storage.files.FilesStorageStrategy;
11 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
12 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
13 import lombok.extern.slf4j.Slf4j;
14 import org.junit.jupiter.api.BeforeEach;
16 import java.io.IOException;
17 import java.nio.file.Files;
18 import java.nio.file.Path;
19 import java.nio.file.Paths;
20 import java.time.Clock;
21 import java.util.function.Supplier;
25 public class InMemoryWithFilesStorageIT extends AbstractStorageStrategyIT
27 final static Path path = Paths.get("target","local-json-files");
30 final ObjectMapper mapper;
31 final FilesStorageStrategy storageStrategy;
34 public InMemoryWithFilesStorageIT()
36 clock = Clock.systemDefaultZone();
37 mapper = new ObjectMapper();
38 mapper.registerModule(new JavaTimeModule());
39 mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
40 storageStrategy = new FilesStorageStrategy(
44 messageFlux -> new InMemoryChatRoomService(messageFlux),
50 protected StorageStrategy getStorageStrategy()
52 return storageStrategy;
56 protected Supplier<ChatHomeService> getChatHomeServiceSupplier()
58 return () -> new InMemoryChatHomeService(1, getStorageStrategy().read());
62 protected ChatRoomFactory getChatRoomFactory()
64 ShardingStrategy strategy = chatRoomId -> 0;
65 return new InMemoryChatRoomFactory(strategy, clock, 8);
69 void reset() throws Exception
71 if (Files.exists(path))
79 if (!file.equals(path))
81 log.debug("Deleting file {}", file);
87 throw new RuntimeException(e);
90 log.debug("Deleting data-directory {}", path);