8ca7d472da7db4894124347246ace63c5a5a8917
[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.ChatHomeService;
7 import de.juplo.kafka.chat.backend.domain.ChatRoomFactory;
8 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomFactory;
9 import de.juplo.kafka.chat.backend.persistence.storage.files.FilesStorageStrategy;
10 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
11 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
12 import lombok.extern.slf4j.Slf4j;
13 import org.junit.jupiter.api.BeforeEach;
14
15 import java.io.IOException;
16 import java.nio.file.Files;
17 import java.nio.file.Path;
18 import java.nio.file.Paths;
19 import java.time.Clock;
20
21
22 @Slf4j
23 public class InMemoryWithFilesStorageIT extends AbstractStorageStrategyIT
24 {
25   final static Path path = Paths.get("target","files");
26
27   final Clock clock;
28   final ObjectMapper mapper;
29   final FilesStorageStrategy storageStrategy;
30
31
32   public InMemoryWithFilesStorageIT()
33   {
34     clock = Clock.systemDefaultZone();
35     mapper = new ObjectMapper();
36     mapper.registerModule(new JavaTimeModule());
37     mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
38     storageStrategy = new FilesStorageStrategy(
39         path,
40         clock,
41         8,
42         chatRoomId -> 0,
43         messageFlux -> new InMemoryChatRoomService(messageFlux),
44         mapper);
45   }
46
47
48   @Override
49   protected StorageStrategy getStorageStrategy()
50   {
51     return storageStrategy;
52   }
53
54   @Override
55   protected StorageStrategyITConfig getConfig()
56   {
57     return new StorageStrategyITConfig()
58     {
59       InMemoryChatHomeService chatHomeService = new InMemoryChatHomeService(
60           1,
61           new int[] { 0 },
62           getStorageStrategy().read());
63
64       InMemoryChatRoomFactory chatRoomFactory = new InMemoryChatRoomFactory(
65           chatRoomId -> 0,
66           clock,
67           8);
68
69       @Override
70       public ChatHomeService getChatHomeService()
71       {
72         return chatHomeService;
73       }
74
75       @Override
76       public ChatRoomFactory getChatRoomFactory()
77       {
78         return chatRoomFactory;
79       }
80     };
81   }
82
83   @BeforeEach
84   void reset() throws Exception
85   {
86     if (Files.exists(path))
87     {
88       Files
89           .walk(path)
90           .forEach(file ->
91           {
92             try
93             {
94               if (!file.equals(path))
95               {
96                 log.debug("Deleting file {}", file);
97                 Files.delete(file);
98               }
99             }
100             catch (IOException e)
101             {
102               throw new RuntimeException(e);
103             }
104           });
105       log.debug("Deleting data-directory {}", path);
106       Files.delete(path);
107     }
108   }
109 }