@@ -4,10 +4,8 @@ import org.apache.kafka.clients.consumer.ConsumerConfig
44import org.apache.kafka.clients.consumer.KafkaConsumer
55import org.apache.kafka.common.serialization.ByteArrayDeserializer
66import org.apache.kafka.common.serialization.StringDeserializer
7- import org.junit.After
8- import org.junit.Before
9- import org.junit.ClassRule
10- import org.junit.Test
7+ import org.junit.*
8+ import org.junit.rules.TestName
119import org.neo4j.kernel.impl.proc.Procedures
1210import org.neo4j.kernel.internal.GraphDatabaseAPI
1311import org.neo4j.test.TestGraphDatabaseFactory
@@ -39,11 +37,26 @@ class KafkaEventRouterIT {
3937
4038 lateinit var db: GraphDatabaseAPI
4139
40+ private val WITH_REL_ROUTING_METHOD_SUFFIX = " WithRelRouting"
41+ private val WITH_NODE_ROUTING_METHOD_SUFFIX = " WithNodeRouting"
42+
43+ @Rule
44+ @JvmField
45+ var testName = TestName ()
46+
4247 @Before
4348 fun setUp () {
44- db = TestGraphDatabaseFactory ().newImpermanentDatabaseBuilder()
49+ var graphDatabaseBuilder = TestGraphDatabaseFactory ()
50+ .newImpermanentDatabaseBuilder()
4551 .setConfig(" kafka.bootstrap.servers" , kafka.bootstrapServers)
46- .newGraphDatabase() as GraphDatabaseAPI
52+ if (testName.methodName.endsWith(WITH_REL_ROUTING_METHOD_SUFFIX )) {
53+ graphDatabaseBuilder.setConfig(" streams.source.topic.relationships.knows" , " KNOWS{*}" )
54+ }
55+ if (testName.methodName.endsWith(WITH_NODE_ROUTING_METHOD_SUFFIX )) {
56+ graphDatabaseBuilder.setConfig(" streams.source.topic.nodes.person" , " Person{*}" )
57+ }
58+ db = graphDatabaseBuilder.newGraphDatabase() as GraphDatabaseAPI
59+
4760 db.dependencyResolver.resolveDependency(Procedures ::class .java)
4861 .registerProcedure(StreamsProcedures ::class .java, true )
4962
@@ -76,6 +89,46 @@ class KafkaEventRouterIT {
7689 consumer.close()
7790 }
7891
92+ @Test
93+ fun testCreateRelationshipWithRelRouting () {
94+ val config = KafkaConfiguration (bootstrapServers = kafka.bootstrapServers)
95+ val consumer = createConsumer(config)
96+ consumer.subscribe(listOf (" knows" ))
97+ db.execute(" CREATE (:Person {name:'Andrea'})-[:KNOWS{since: 2014}]->(:Person {name:'Michael'})" ).close()
98+ val records = consumer.poll(5000 )
99+ assertEquals(1 , records.count())
100+ assertEquals(true , records.all {
101+ JSONUtils .readValue(it.value(), Map ::class .java).let {
102+ var payload = it[" payload" ] as Map <String , Any ?>
103+ val after = payload[" after" ] as Map <String , Any ?>
104+ val properties = after[" properties" ] as Map <String , Any ?>
105+ payload[" type" ] == " relationship" && payload[" label" ] == " KNOWS" && properties[" since" ] == 2014
106+ }
107+ })
108+ consumer.close()
109+ }
110+
111+ @Test
112+ fun testCreateNodeWithNodeRouting () {
113+ val config = KafkaConfiguration (bootstrapServers = kafka.bootstrapServers)
114+ val consumer = createConsumer(config)
115+ consumer.subscribe(listOf (" person" ))
116+ db.execute(" CREATE (:Person {name:'Andrea'})" ).close()
117+ val records = consumer.poll(5000 )
118+ assertEquals(1 , records.count())
119+ assertEquals(true , records.all {
120+ JSONUtils .readValue(it.value(), Map ::class .java).let {
121+ var payload = it[" payload" ] as Map <String , Any ?>
122+ val after = payload[" after" ] as Map <String , Any ?>
123+ val labels = after[" labels" ] as List <String >
124+ val propertiesAfter = after[" properties" ] as Map <String , Any ?>
125+ val meta = it[" meta" ] as Map <String , Any ?>
126+ labels == listOf (" Person" ) && propertiesAfter == mapOf (" name" to " Andrea" ) && meta[" operation" ] == " created"
127+ }
128+ })
129+ consumer.close()
130+ }
131+
79132 private fun createConsumer (config : KafkaConfiguration ): KafkaConsumer <String , ByteArray > {
80133 val props = config.asProperties()
81134 props[" group.id" ] = " neo4j"
0 commit comments