d6909df4f4b8f7043d5479cfb3b224cb54a2603e
[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.domain.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","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(
59         chatRoomId -> 0,
60         1,
61         new int[] { 0 },
62         getStorageStrategy().read());
63   }
64
65   @Override
66   protected ChatRoomFactory getChatRoomFactory()
67   {
68     ShardingStrategy strategy = chatRoomId -> 0;
69     return new InMemoryChatRoomFactory(strategy, clock, 8);
70   }
71
72   @BeforeEach
73   void reset() throws Exception
74   {
75     if (Files.exists(path))
76     {
77       Files
78           .walk(path)
79           .forEach(file ->
80           {
81             try
82             {
83               if (!file.equals(path))
84               {
85                 log.debug("Deleting file {}", file);
86                 Files.delete(file);
87               }
88             }
89             catch (IOException e)
90             {
91               throw new RuntimeException(e);
92             }
93           });
94       log.debug("Deleting data-directory {}", path);
95       Files.delete(path);
96     }
97   }
98 }