1 package de.juplo.kafka.chat.backend.implementation.inmemory;
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;
13 import java.nio.file.Paths;
14 import java.time.Clock;
15 import java.util.logging.Level;
16 import java.util.stream.IntStream;
18 public class ShardedChatHomeServiceTest extends ChatHomeServiceWithShardsTest
21 static class Configuration
24 ShardedChatHomeService chatHome(
25 StorageStrategy storageStrategy,
28 SimpleChatHomeService[] chatHomes = new SimpleChatHomeService[NUM_SHARDS];
32 .forEach(shard -> chatHomes[shard] = new SimpleChatHomeService(
38 ShardingStrategy strategy = new KafkaLikeShardingStrategy(NUM_SHARDS);
40 return new ShardedChatHomeService(
45 .mapToObj(shard -> "http://instance-0")
46 .map(uriString -> URI.create(uriString))
47 .toArray(size -> new URI[size]),
52 FilesStorageStrategy storageStrategy(
54 ObjectMapper objectMapper)
56 return new FilesStorageStrategy(
57 Paths.get("target", "test-classes", "data", "files"),
58 new KafkaLikeShardingStrategy(NUM_SHARDS),
65 ObjectMapper objectMapper()
67 ObjectMapper objectMapper = new ObjectMapper();
68 objectMapper.registerModule(new JavaTimeModule());
75 return Clock.systemDefaultZone();
80 return new int[] { OWNED_SHARD };