1 package de.juplo.kafka.wordcount.query;
3 import de.juplo.kafka.wordcount.top10.TestRanking;
4 import de.juplo.kafka.wordcount.top10.TestUser;
5 import de.juplo.kafka.wordcount.users.TestUserData;
6 import lombok.extern.slf4j.Slf4j;
7 import org.apache.kafka.common.serialization.StringSerializer;
8 import org.apache.kafka.streams.TestInputTopic;
9 import org.apache.kafka.streams.Topology;
10 import org.apache.kafka.streams.TopologyTestDriver;
11 import org.apache.kafka.streams.state.KeyValueStore;
12 import org.apache.kafka.streams.state.Stores;
13 import org.junit.jupiter.api.AfterEach;
14 import org.junit.jupiter.api.BeforeEach;
15 import org.junit.jupiter.api.Test;
16 import org.springframework.kafka.support.serializer.JsonSerializer;
20 import static de.juplo.kafka.wordcount.query.QueryApplicationConfiguration.serializationConfig;
24 public class QueryStreamProcessorTopologyTest
26 public static final String TOP10_IN = "TOP10-IN";
27 public static final String USERS_IN = "USERS-IN";
28 public static final String RANKING_STORE_NAME = "TOPOLOGY-TEST-RANKINGS";
29 public static final String USERS_STORE_NAME = "TOPOLOGY-TEST-USERS";
32 TopologyTestDriver testDriver;
33 TestInputTopic<TestUser, TestRanking> top10In;
34 TestInputTopic<String, TestUserData> userIn;
40 Topology topology = QueryStreamProcessor.buildTopology(
43 Stores.inMemoryKeyValueStore(USERS_STORE_NAME),
44 Stores.inMemoryKeyValueStore(RANKING_STORE_NAME));
46 testDriver = new TopologyTestDriver(topology, serializationConfig());
48 top10In = testDriver.createInputTopic(
50 jsonSerializer(TestUser.class, true),
51 jsonSerializer(TestRanking.class,false));
53 userIn = testDriver.createInputTopic(
55 new StringSerializer(),
56 jsonSerializer(TestUserData.class, false).noTypeInfo());
65 .forEach(kv -> userIn.pipeInput(kv.key, kv.value));
68 .forEach(kv -> top10In.pipeInput(kv.key, kv.value));
70 KeyValueStore<String, UserRanking> store = testDriver.getKeyValueStore(RANKING_STORE_NAME);
71 TestData.assertExpectedState(user -> store.get(user));
75 public void tearDown()
80 private <T> JsonSerializer<T> jsonSerializer(Class<T> type, boolean isKey)
82 JsonSerializer<T> jsonSerializer = new JsonSerializer<>();
83 jsonSerializer.configure(
85 JsonSerializer.TYPE_MAPPINGS,
86 "stats:" + TestUser.class.getName() + "," +
87 "ranking:" + TestRanking.class.getName()),
89 return jsonSerializer;