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.stream.IntStream;
17 public class ShardedChatHomeServiceTest extends ChatHomeServiceWithShardsTest
20 static class Configuration
23 ShardedChatHomeService chatHome(
24 StorageStrategy storageStrategy,
27 SimpleChatHomeService[] chatHomes = new SimpleChatHomeService[NUM_SHARDS];
31 .forEach(shard -> chatHomes[shard] = new SimpleChatHomeService(
37 ShardingStrategy strategy = new KafkaLikeShardingStrategy(NUM_SHARDS);
39 return new ShardedChatHomeService(
44 .mapToObj(shard -> "http://instance-0")
45 .map(uriString -> URI.create(uriString))
46 .toArray(size -> new URI[size]),
51 FilesStorageStrategy storageStrategy(
53 ObjectMapper objectMapper)
55 return new FilesStorageStrategy(
56 Paths.get("target", "test-classes", "data", "files"),
57 new KafkaLikeShardingStrategy(NUM_SHARDS),
62 ObjectMapper objectMapper()
64 ObjectMapper objectMapper = new ObjectMapper();
65 objectMapper.registerModule(new JavaTimeModule());
72 return Clock.systemDefaultZone();
77 return new int[] { OWNED_SHARD };