feat: Introduced config-parameters for the `io.projectreactor`-logging
[demos/kafka/chat] / src / test / java / de / juplo / kafka / chat / backend / implementation / inmemory / ShardedChatHomeServiceTest.java
1 package de.juplo.kafka.chat.backend.implementation.inmemory;
2
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
5 import de.juplo.kafka.chat.backend.domain.ChatHomeServiceWithShardsTest;
6 import de.juplo.kafka.chat.backend.implementation.ShardingStrategy;
7 import de.juplo.kafka.chat.backend.implementation.StorageStrategy;
8 import de.juplo.kafka.chat.backend.storage.files.FilesStorageStrategy;
9 import org.springframework.boot.test.context.TestConfiguration;
10 import org.springframework.context.annotation.Bean;
11
12 import java.net.URI;
13 import java.nio.file.Paths;
14 import java.time.Clock;
15 import java.util.logging.Level;
16 import java.util.stream.IntStream;
17
18 public class ShardedChatHomeServiceTest extends ChatHomeServiceWithShardsTest
19 {
20   @TestConfiguration
21   static class Configuration
22   {
23     @Bean
24     ShardedChatHomeService chatHome(
25         StorageStrategy storageStrategy,
26         Clock clock)
27     {
28       SimpleChatHomeService[] chatHomes = new SimpleChatHomeService[NUM_SHARDS];
29
30       IntStream
31           .of(ownedShards())
32           .forEach(shard -> chatHomes[shard] = new SimpleChatHomeService(
33               shard,
34               storageStrategy,
35               clock,
36               bufferSize()));
37
38       ShardingStrategy strategy = new KafkaLikeShardingStrategy(NUM_SHARDS);
39
40       return new ShardedChatHomeService(
41           "http://instance-0",
42           chatHomes,
43           IntStream
44               .range(0, NUM_SHARDS)
45               .mapToObj(shard -> "http://instance-0")
46               .map(uriString -> URI.create(uriString))
47               .toArray(size -> new URI[size]),
48           strategy);
49     }
50
51     @Bean
52     FilesStorageStrategy storageStrategy(
53         Clock clock,
54         ObjectMapper objectMapper)
55     {
56       return new FilesStorageStrategy(
57           Paths.get("target", "test-classes", "data", "files"),
58           new KafkaLikeShardingStrategy(NUM_SHARDS),
59           objectMapper,
60           Level.FINE,
61           true);
62     }
63
64     @Bean
65     ObjectMapper objectMapper()
66     {
67       ObjectMapper objectMapper = new ObjectMapper();
68       objectMapper.registerModule(new JavaTimeModule());
69       return objectMapper;
70     }
71
72     @Bean
73     Clock clock()
74     {
75       return Clock.systemDefaultZone();
76     }
77
78     int[] ownedShards()
79     {
80       return new int[] { OWNED_SHARD };
81     }
82
83     int bufferSize()
84     {
85       return 8;
86     }
87   }
88 }