Search in sources :

Example 6 with ConsumerRecordFactory

use of org.apache.kafka.streams.test.ConsumerRecordFactory in project kafkastreams-cep by fhussonnois.

the class CEPStreamIntegrationTest method testPatternGivenRecordsFromMultipleTopics.

@Test
public void testPatternGivenRecordsFromMultipleTopics() {
    // Build query
    ComplexStreamsBuilder builder = new ComplexStreamsBuilder();
    CEPStream<String, Integer> stream = builder.stream(Arrays.asList(INPUT_TOPIC_1, INPUT_TOPIC_2), Consumed.with(STRING_SERDE, Serdes.Integer()));
    KStream<String, Sequence<String, Integer>> sequences = stream.query(DEFAULT_TEST_QUERY, PATTERN_MULTIPLE_TOPICS, Queried.with(STRING_SERDE, Serdes.Integer()));
    sequences.to(OUTPUT_TOPIC_1, Produced.with(STRING_SERDE, new JsonSequenceSerde<>()));
    Topology topology = builder.build();
    driver = new TopologyTestDriver(topology, streamsConfiguration);
    ConsumerRecordFactory<String, Integer> factory = new ConsumerRecordFactory<>(Serdes.String().serializer(), Serdes.Integer().serializer());
    driver.pipeInput(factory.create(INPUT_TOPIC_1, K1, 0));
    driver.pipeInput(factory.create(INPUT_TOPIC_1, K1, 1));
    driver.pipeInput(factory.create(INPUT_TOPIC_1, K1, 2));
    driver.pipeInput(factory.create(INPUT_TOPIC_1, K1, 3));
    driver.pipeInput(factory.create(INPUT_TOPIC_2, K1, 6));
    driver.pipeInput(factory.create(INPUT_TOPIC_2, K1, 10));
    // JSON values are de-serialized as double
    List<ProducerRecord<String, Sequence<String, Double>>> results = new ArrayList<>();
    ProducerRecord<String, Sequence<String, Double>> record;
    do {
        record = driver.readOutput(OUTPUT_TOPIC_1, STRING_SERDE.deserializer(), new JsonSequenceSerde.SequenceDeserializer<>());
        if (record != null) {
            results.add(record);
        }
    } while (record != null);
    results.forEach(System.out::println);
    Assert.assertEquals(2, results.size());
    final ProducerRecord<String, Sequence<String, Double>> first = results.get(0);
    Assert.assertEquals(K1, first.key());
    assertStagesNames(first.value(), STAGE_1, STAGE_2, STAGE_3);
    assertStagesValue(first.value(), STAGE_1, 0.0);
    assertStagesTopic(first.value(), STAGE_1, INPUT_TOPIC_1);
    assertStagesValue(first.value(), STAGE_2, 1.0, 2.0, 3.0);
    assertStagesTopic(first.value(), STAGE_2, INPUT_TOPIC_1, INPUT_TOPIC_1, INPUT_TOPIC_1);
    assertStagesValue(first.value(), STAGE_3, 6.0);
    assertStagesTopic(first.value(), STAGE_3, INPUT_TOPIC_2);
    final ProducerRecord<String, Sequence<String, Double>> second = results.get(1);
    Assert.assertEquals(K1, second.key());
    assertStagesNames(second.value(), STAGE_1, STAGE_2, STAGE_3);
    assertStagesValue(second.value(), STAGE_1, 0.0);
    assertStagesTopic(second.value(), STAGE_1, INPUT_TOPIC_1);
    assertStagesValue(second.value(), STAGE_2, 1.0, 2.0, 3.0);
    assertStagesTopic(second.value(), STAGE_2, INPUT_TOPIC_1, INPUT_TOPIC_1, INPUT_TOPIC_1);
    assertStagesValue(second.value(), STAGE_3, 10.0);
    assertStagesTopic(second.value(), STAGE_3, INPUT_TOPIC_2);
}
Also used : ArrayList(java.util.ArrayList) TopologyTestDriver(org.apache.kafka.streams.TopologyTestDriver) Sequence(com.github.fhuss.kafka.streams.cep.core.Sequence) Topology(org.apache.kafka.streams.Topology) ConsumerRecordFactory(org.apache.kafka.streams.test.ConsumerRecordFactory) JsonSequenceSerde(com.github.fhuss.kafka.streams.cep.serdes.JsonSequenceSerde) ProducerRecord(org.apache.kafka.clients.producer.ProducerRecord) Test(org.junit.Test)

Aggregations

ConsumerRecordFactory (org.apache.kafka.streams.test.ConsumerRecordFactory)6 Test (org.junit.Test)6 TopologyTestDriver (org.apache.kafka.streams.TopologyTestDriver)4 StringSerializer (org.apache.kafka.common.serialization.StringSerializer)3 Sequence (com.github.fhuss.kafka.streams.cep.core.Sequence)2 JsonSequenceSerde (com.github.fhuss.kafka.streams.cep.serdes.JsonSequenceSerde)2 ArrayList (java.util.ArrayList)2 ProducerRecord (org.apache.kafka.clients.producer.ProducerRecord)2 ByteArraySerializer (org.apache.kafka.common.serialization.ByteArraySerializer)2 StreamsBuilder (org.apache.kafka.streams.StreamsBuilder)2 Topology (org.apache.kafka.streams.Topology)2 Map (java.util.Map)1 LongSerializer (org.apache.kafka.common.serialization.LongSerializer)1 Serializer (org.apache.kafka.common.serialization.Serializer)1