11package streams.integrations
22
3+ import kotlinx.coroutines.async
4+ import kotlinx.coroutines.runBlocking
35import org.apache.kafka.clients.consumer.ConsumerConfig
46import org.apache.kafka.clients.consumer.KafkaConsumer
57import org.apache.kafka.common.serialization.ByteArrayDeserializer
@@ -39,6 +41,7 @@ class KafkaEventRouterIT {
3941
4042 private val WITH_REL_ROUTING_METHOD_SUFFIX = " WithRelRouting"
4143 private val WITH_NODE_ROUTING_METHOD_SUFFIX = " WithNodeRouting"
44+ private val MULTI_NODE_PATTERN_TEST : String = " MultiTopicPatternConfig"
4245
4346 @Rule
4447 @JvmField
@@ -55,8 +58,14 @@ class KafkaEventRouterIT {
5558 if (testName.methodName.endsWith(WITH_NODE_ROUTING_METHOD_SUFFIX )) {
5659 graphDatabaseBuilder.setConfig(" streams.source.topic.nodes.person" , " Person{*}" )
5760 }
61+ if (testName.methodName.endsWith(MULTI_NODE_PATTERN_TEST )) {
62+ graphDatabaseBuilder.setConfig(" streams.source.topic.nodes.neo4j-product" , " Product{name, code}" )
63+ .setConfig(" streams.source.topic.nodes.neo4j-color" , " Color{*}" )
64+ .setConfig(" streams.source.topic.nodes.neo4j-basket" , " Basket{*}" )
65+ .setConfig(" streams.source.topic.relationships.neo4j-isin" , " IS_IN{month,day}" )
66+ .setConfig(" streams.source.topic.relationships.neo4j-hascolor" , " HAS_COLOR{*}" )
67+ }
5868 db = graphDatabaseBuilder.newGraphDatabase() as GraphDatabaseAPI
59-
6069 db.dependencyResolver.resolveDependency(Procedures ::class .java)
6170 .registerProcedure(StreamsProcedures ::class .java, true )
6271
@@ -157,4 +166,33 @@ class KafkaEventRouterIT {
157166 consumer.close()
158167 }
159168
169+ private fun getRecordCount (config : KafkaConfiguration , topic : String ): Int {
170+ val consumer = createConsumer(config)
171+ consumer.subscribe(listOf (topic))
172+ val count = consumer.poll(5000 ).count()
173+ consumer.close()
174+ return count
175+ }
176+
177+ @Test
178+ fun testMultiTopicPatternConfig () = runBlocking {
179+ val config = KafkaConfiguration (bootstrapServers = kafka.bootstrapServers)
180+ db.execute("""
181+ CREATE (p:Product{id: "A1", code: "X1", name: "Name X1", price: 1000})-[:IS_IN{month:4, day:4, year:2018}]->(b:Basket{name:"Basket-A", created: "20181228"}),
182+ (p)-[:HAS_COLOR]->(c:Color{name: "Red"})
183+ """ .trimIndent()).close()
184+
185+ val recordsProduct = async { getRecordCount(config, " neo4j-product" ) }
186+ val recordsColor = async { getRecordCount(config, " neo4j-color" ) }
187+ val recordsBasket = async { getRecordCount(config, " neo4j-basket" ) }
188+ val recordsIsIn = async { getRecordCount(config, " neo4j-isin" ) }
189+ val recordsHasColor = async { getRecordCount(config, " neo4j-hascolor" ) }
190+
191+ assertEquals(1 , recordsProduct.await())
192+ assertEquals(1 , recordsColor.await())
193+ assertEquals(1 , recordsBasket.await())
194+ assertEquals(1 , recordsIsIn.await())
195+ assertEquals(1 , recordsHasColor.await())
196+ }
197+
160198}
0 commit comments