X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Fkafka%2Fwordcount%2Fcounter%2FTestData.java;h=54e62878eec602a682a53dce9ba60315b94070d9;hb=e6198710fe679bc7463d1b17c9d9dc311062ef31;hp=c9d871ac962dcdbe73082ea064e68b5a3b30caed;hpb=1127988a1b631aa9e0c0107c1a3ed9f99edd188b;p=demos%2Fkafka%2Fwordcount diff --git a/src/test/java/de/juplo/kafka/wordcount/counter/TestData.java b/src/test/java/de/juplo/kafka/wordcount/counter/TestData.java index c9d871a..54e6287 100644 --- a/src/test/java/de/juplo/kafka/wordcount/counter/TestData.java +++ b/src/test/java/de/juplo/kafka/wordcount/counter/TestData.java @@ -1,13 +1,14 @@ package de.juplo.kafka.wordcount.counter; +import de.juplo.kafka.wordcount.splitter.TestInputUser; import de.juplo.kafka.wordcount.splitter.TestInputWord; import de.juplo.kafka.wordcount.top10.TestOutputWord; import de.juplo.kafka.wordcount.top10.TestOutputWordCounter; import org.apache.kafka.streams.KeyValue; +import org.apache.kafka.streams.state.ReadOnlyKeyValueStore; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; -import java.util.function.Consumer; import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; @@ -30,53 +31,48 @@ class TestData static final TestOutputWord KLAUS_MÜSCH = TestOutputWord.of(KLAUS, WORD_MÜSCH); static final TestOutputWord KLAUS_S = TestOutputWord.of(KLAUS, WORD_S); - private static final KeyValue[] INPUT_MESSAGES = new KeyValue[] + private static final KeyValue[] INPUT_MESSAGES = new KeyValue[] { new KeyValue<>( - PETER, + TestInputUser.of(PETER), TestInputWord.of(PETER, WORD_HALLO)), new KeyValue<>( - KLAUS, + TestInputUser.of(KLAUS), TestInputWord.of(KLAUS, WORD_MÜSCH)), new KeyValue<>( - PETER, + TestInputUser.of(PETER), TestInputWord.of(PETER, WORD_WELT)), new KeyValue<>( - KLAUS, + TestInputUser.of(KLAUS), TestInputWord.of(KLAUS, WORD_MÜSCH)), new KeyValue<>( - KLAUS, + TestInputUser.of(KLAUS), TestInputWord.of(KLAUS, WORD_S)), new KeyValue<>( - PETER, + TestInputUser.of(PETER), TestInputWord.of(PETER, WORD_BOÄH)), new KeyValue<>( - PETER, + TestInputUser.of(PETER), TestInputWord.of(PETER, WORD_WELT)), new KeyValue<>( - PETER, + TestInputUser.of(PETER), TestInputWord.of(PETER, WORD_BOÄH)), new KeyValue<>( - KLAUS, + TestInputUser.of(KLAUS), TestInputWord.of(KLAUS, WORD_S)), new KeyValue<>( - PETER, + TestInputUser.of(PETER), TestInputWord.of(PETER, WORD_BOÄH)), new KeyValue<>( - KLAUS, + TestInputUser.of(KLAUS), TestInputWord.of(KLAUS, WORD_S)), }; - static Stream> getInputMessages() + static Stream> getInputMessages() { return Stream.of(TestData.INPUT_MESSAGES); } - static Consumer> expectedMessagesAssertion() - { - return receivedMessages -> assertExpectedMessages(receivedMessages); - } - static void assertExpectedMessages(MultiValueMap receivedMessages) { expectedMessages().forEach( @@ -85,11 +81,6 @@ class TestData .containsExactlyElementsOf(counter)); } - static Consumer> expectedNumberOfMessagesForWordAssertion() - { - return receivedMessages -> assertExpectedNumberOfMessagesForWord(receivedMessages); - } - static void assertExpectedNumberOfMessagesForWord(MultiValueMap receivedMessages) { assertThat(countMessagesForWord(PETER_HALLO, receivedMessages)); @@ -104,6 +95,67 @@ class TestData return messagesForUsers.get(word).size(); } + static void assertExpectedState(ReadOnlyKeyValueStore store) + { + assertWordCountEqualsWordCountFromLastMessage(PETER_HALLO, store.get(wordOf(PETER_HALLO))); + assertWordCountEqualsWordCountFromLastMessage(PETER_WELT, store.get(wordOf(PETER_WELT))); + assertWordCountEqualsWordCountFromLastMessage(PETER_BOÄH, store.get(wordOf(PETER_BOÄH))); + assertWordCountEqualsWordCountFromLastMessage(KLAUS_MÜSCH, store.get(wordOf(KLAUS_MÜSCH))); + assertWordCountEqualsWordCountFromLastMessage(KLAUS_S, store.get(wordOf(KLAUS_S))); + } + + private static Word wordOf(TestOutputWord testOutputWord) + { + Word word = new Word(); + + word.setUser(testOutputWord.getUser()); + word.setWord(testOutputWord.getWord()); + + return word; + } + + static void assertExpectedLastMessagesForWord(MultiValueMap receivedMessages) + { + assertWordCountEqualsWordCountFromLastMessage(PETER_HALLO, getLastMessageFor(PETER_HALLO, receivedMessages)); + assertWordCountEqualsWordCountFromLastMessage(PETER_WELT, getLastMessageFor(PETER_WELT, receivedMessages)); + assertWordCountEqualsWordCountFromLastMessage(PETER_BOÄH, getLastMessageFor(PETER_BOÄH, receivedMessages)); + assertWordCountEqualsWordCountFromLastMessage(KLAUS_MÜSCH, getLastMessageFor(KLAUS_MÜSCH, receivedMessages)); + assertWordCountEqualsWordCountFromLastMessage(KLAUS_S, getLastMessageFor(KLAUS_S, receivedMessages)); + } + + private static void assertWordCountEqualsWordCountFromLastMessage( + TestOutputWord word, + Long counter) + { + TestOutputWordCounter testOutputWordCounter = TestOutputWordCounter.of( + word.getUser(), + word.getWord(), + counter); + assertWordCountEqualsWordCountFromLastMessage(word, testOutputWordCounter); + } + + private static void assertWordCountEqualsWordCountFromLastMessage( + TestOutputWord word, + TestOutputWordCounter counter) + { + assertThat(counter).isEqualTo(getLastMessageFor(word)); + } + + private static TestOutputWordCounter getLastMessageFor(TestOutputWord word) + { + return getLastMessageFor(word, expectedMessages()); + } + + private static TestOutputWordCounter getLastMessageFor( + TestOutputWord user, + MultiValueMap messagesForWord) + { + return messagesForWord + .get(user) + .stream() + .reduce(null, (left, right) -> right); + } + private static final KeyValue[] EXPECTED_MESSAGES = new KeyValue[] { KeyValue.pair(