77
88from aws_schema_registry import DataAndSchema , SchemaRegistryClient
99from aws_schema_registry .avro import AvroSchema
10+ from aws_schema_registry .jsonschema import JsonSchema
1011from aws_schema_registry .adapter .kafka import (
1112 KafkaDeserializer , KafkaSerializer
1213)
13- from aws_schema_registry .naming import record_name_strategy
14+ from aws_schema_registry .naming import (record_name_strategy ,
15+ topic_name_strategy )
1416
1517BOOTSTRAP_STRING = '127.0.0.1:9092'
1618
2426 SCHEMA_V1 = AvroSchema (f .read ())
2527with open (os .path .join (os .path .dirname (__file__ ), 'user.v2.avsc' ), 'r' ) as f :
2628 SCHEMA_V2 = AvroSchema (f .read ())
29+ with open (os .path .join (os .path .dirname (__file__ ), 'user.json' ), 'r' ) as f :
30+ SCHEMA_JSON = JsonSchema (f .read ())
2731
2832PRODUCER_PROPERTIES = {
2933 'bootstrap_servers' : BOOTSTRAP_STRING ,
@@ -65,12 +69,25 @@ def test_produce_consume_with_ser_de_schema_registry(
6569 serializer = KafkaSerializer (
6670 client , schema_naming_strategy = record_name_strategy
6771 )
72+
73+ # jsonschema has no fqn, so we use topic_name_strategy for it
74+ # (which also requires a separate producer)
75+ json_serializer = KafkaSerializer (
76+ client , schema_naming_strategy = topic_name_strategy
77+ )
78+
6879 deserializer = KafkaDeserializer (client )
6980
7081 producer = KafkaProducer (
7182 value_serializer = serializer ,
7283 ** PRODUCER_PROPERTIES
7384 )
85+
86+ json_producer = KafkaProducer (
87+ value_serializer = json_serializer ,
88+ ** PRODUCER_PROPERTIES
89+ )
90+
7491 data1 = {
7592 'name' : 'John Doe' ,
7693 'favorite_number' : 6 ,
@@ -85,6 +102,13 @@ def test_produce_consume_with_ser_de_schema_registry(
85102 }
86103 producer .send (topic , DataAndSchema (data2 , SCHEMA_V2 ))
87104
105+ data3 = {
106+ 'name' : 'John Doe' ,
107+ 'favorite_number' : 6 ,
108+ 'favorite_colors' : ['red' , 'blue' , "yello" ]
109+ }
110+ json_producer .send (topic , DataAndSchema (data3 , SCHEMA_JSON ))
111+
88112 consumer = KafkaConsumer (
89113 topic ,
90114 value_deserializer = deserializer ,
@@ -93,8 +117,10 @@ def test_produce_consume_with_ser_de_schema_registry(
93117 batch = consumer .poll (timeout_ms = 1000 )
94118 assert len (batch ) == 1
95119 messages = batch [list (batch .keys ())[0 ]]
96- assert len (messages ) == 2
120+ assert len (messages ) == 3
97121 assert messages [0 ].value .data == data1
98122 assert messages [0 ].value .schema == SCHEMA_V1
99123 assert messages [1 ].value .data == data2
100124 assert messages [1 ].value .schema == SCHEMA_V2
125+ assert messages [2 ].value .data == data3
126+ assert messages [2 ].value .schema == SCHEMA_JSON
0 commit comments