5c88f10ef5f447ddd35b9647ff09771a480b465c
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / persistence / InMemoryWithFilesStorageStrategyIT.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.persistence.storage.files.FilesStorageStrategy;
8 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatHomeService;
9 import de.juplo.kafka.chat.backend.persistence.inmemory.InMemoryChatRoomService;
10 import lombok.extern.slf4j.Slf4j;
11 import org.junit.jupiter.api.BeforeEach;
12
13 import java.io.IOException;
14 import java.nio.file.Files;
15 import java.nio.file.Path;
16 import java.nio.file.Paths;
17 import java.time.Clock;
18 import java.util.function.Supplier;
19
20
21 @Slf4j
22 public class InMemoryWithFilesStorageStrategyIT extends AbstractStorageStrategyIT
23 {
24   final static Path path = Paths.get("target","local-json-files");
25
26   final Clock clock;
27   final ObjectMapper mapper;
28   final FilesStorageStrategy storageStrategy;
29
30
31   public InMemoryWithFilesStorageStrategyIT()
32   {
33     clock = Clock.systemDefaultZone();
34     mapper = new ObjectMapper();
35     mapper.registerModule(new JavaTimeModule());
36     mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
37     storageStrategy = new FilesStorageStrategy(
38         path,
39         clock,
40         8,
41         messageFlux -> new InMemoryChatRoomService(messageFlux),
42         mapper);
43   }
44
45
46   @Override
47   protected StorageStrategy getStorageStrategy()
48   {
49     return storageStrategy;
50   }
51
52   @Override
53   protected Supplier<ChatHomeService> getChatHomeServiceSupplier()
54   {
55     return () -> new InMemoryChatHomeService(getStorageStrategy().read(), clock, 8);
56   }
57
58   @BeforeEach
59   void reset() throws Exception
60   {
61     if (Files.exists(path))
62     {
63       Files
64           .walk(path)
65           .forEach(file ->
66           {
67             try
68             {
69               if (!file.equals(path))
70               {
71                 log.debug("Deleting file {}", file);
72                 Files.delete(file);
73               }
74             }
75             catch (IOException e)
76             {
77               throw new RuntimeException(e);
78             }
79           });
80       log.debug("Deleting data-directory {}", path);
81       Files.delete(path);
82     }
83   }
84 }