package de.juplo.kafka.wordcount.query;
import de.juplo.kafka.wordcount.top10.TestRanking;
+import de.juplo.kafka.wordcount.top10.TestUser;
import de.juplo.kafka.wordcount.users.TestUserData;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.common.serialization.StringSerializer;
{
public static final String TOP10_IN = "TOP10-IN";
public static final String USERS_IN = "USERS-IN";
- public static final String STORE_NAME = "TOPOLOGY-TEST";
+ public static final String RANKING_STORE_NAME = "TOPOLOGY-TEST-RANKINGS";
+ public static final String USERS_STORE_NAME = "TOPOLOGY-TEST-USERS";
TopologyTestDriver testDriver;
- TestInputTopic<String, TestRanking> top10In;
+ TestInputTopic<TestUser, TestRanking> top10In;
TestInputTopic<String, TestUserData> userIn;
Topology topology = QueryStreamProcessor.buildTopology(
USERS_IN,
TOP10_IN,
- Stores.inMemoryKeyValueStore(STORE_NAME));
+ Stores.inMemoryKeyValueStore(USERS_STORE_NAME),
+ Stores.inMemoryKeyValueStore(RANKING_STORE_NAME));
testDriver = new TopologyTestDriver(topology, serializationConfig());
top10In = testDriver.createInputTopic(
TOP10_IN,
- new StringSerializer(),
- jsonSerializer(TestRanking.class));
+ jsonSerializer(TestUser.class, true),
+ jsonSerializer(TestRanking.class,false));
userIn = testDriver.createInputTopic(
USERS_IN,
new StringSerializer(),
- jsonSerializer(TestUserData.class));
+ jsonSerializer(TestUserData.class, false).noTypeInfo());
}
.getTop10Messages()
.forEach(kv -> top10In.pipeInput(kv.key, kv.value));
- KeyValueStore<String, UserRanking> store = testDriver.getKeyValueStore(STORE_NAME);
+ KeyValueStore<String, UserRanking> store = testDriver.getKeyValueStore(RANKING_STORE_NAME);
TestData.assertExpectedState(user -> store.get(user));
}
testDriver.close();
}
- private <T> JsonSerializer<T> jsonSerializer(Class<T> type)
+ private <T> JsonSerializer<T> jsonSerializer(Class<T> type, boolean isKey)
{
JsonSerializer<T> jsonSerializer = new JsonSerializer<>();
jsonSerializer.configure(
Map.of(
JsonSerializer.TYPE_MAPPINGS,
- "userdata:" + TestUserData.class.getName() + "," +
+ "stats:" + TestUser.class.getName() + "," +
"ranking:" + TestRanking.class.getName()),
- false);
+ isKey);
return jsonSerializer;
}
}