refactor: Tried to simplify & clearify the naming of the integration-tests
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / persistence / InMemoryWithFilesStorageIT.java
1 package de.juplo.kafka.chat.backend.persistence;
2
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;
15
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;
22
23
24 @Slf4j
25 public class InMemoryWithFilesStorageIT extends AbstractStorageStrategyIT
26 {
27   final static Path path = Paths.get("target","local-json-files");
28
29   final Clock clock;
30   final ObjectMapper mapper;
31   final FilesStorageStrategy storageStrategy;
32
33
34   public InMemoryWithFilesStorageIT()
35   {
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(
41         path,
42         clock,
43         8,
44         messageFlux -> new InMemoryChatRoomService(messageFlux),
45         mapper);
46   }
47
48
49   @Override
50   protected StorageStrategy getStorageStrategy()
51   {
52     return storageStrategy;
53   }
54
55   @Override
56   protected Supplier<ChatHomeService> getChatHomeServiceSupplier()
57   {
58     return () -> new InMemoryChatHomeService(1, getStorageStrategy().read());
59   }
60
61   @Override
62   protected ChatRoomFactory getChatRoomFactory()
63   {
64     ShardingStrategy strategy = chatRoomId -> 0;
65     return new InMemoryChatRoomFactory(strategy, clock, 8);
66   }
67
68   @BeforeEach
69   void reset() throws Exception
70   {
71     if (Files.exists(path))
72     {
73       Files
74           .walk(path)
75           .forEach(file ->
76           {
77             try
78             {
79               if (!file.equals(path))
80               {
81                 log.debug("Deleting file {}", file);
82                 Files.delete(file);
83               }
84             }
85             catch (IOException e)
86             {
87               throw new RuntimeException(e);
88             }
89           });
90       log.debug("Deleting data-directory {}", path);
91       Files.delete(path);
92     }
93   }
94 }