Skip to content

Commit d8b443b

Browse files
authored
Add test for nested Avro map (#1398)
1 parent 07c4ce2 commit d8b443b

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

schemaregistry/serde/avrov2/avro_test.go

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,46 @@ const (
4848
}
4949
]
5050
}
51+
`
52+
rootSchemaNested = `
53+
{
54+
"name": "NestedTestRecord",
55+
"type": "record",
56+
"fields": [
57+
{
58+
"name": "OtherField",
59+
"type":
60+
{
61+
"name": "DemoSchema",
62+
"type": "record",
63+
"fields": [
64+
{
65+
"name": "IntField",
66+
"type": "int"
67+
},
68+
{
69+
"name": "DoubleField",
70+
"type": "double"
71+
},
72+
{
73+
"name": "StringField",
74+
"type": "string",
75+
"confluent:tags": [ "PII" ]
76+
},
77+
{
78+
"name": "BoolField",
79+
"type": "boolean"
80+
},
81+
{
82+
"name": "BytesField",
83+
"type": "bytes",
84+
"confluent:tags": [ "PII" ]
85+
}
86+
]
87+
}
88+
}
89+
]
90+
}
5191
`
5292
demoSchema = `
5393
{
@@ -435,6 +475,53 @@ func TestAvroSerdeWithNested(t *testing.T) {
435475
serde.MaybeFail("deserialization", err, serde.Expect(msg, &obj))
436476
}
437477

478+
func TestAvroSerdeWithNestedMap(t *testing.T) {
479+
serde.MaybeFail = serde.InitFailFunc(t)
480+
var err error
481+
conf := schemaregistry.NewConfig("mock://")
482+
483+
client, err := schemaregistry.NewClient(conf)
484+
serde.MaybeFail("Schema Registry configuration", err)
485+
486+
serConfig := NewSerializerConfig()
487+
serConfig.AutoRegisterSchemas = false
488+
serConfig.UseLatestVersion = true
489+
ser, err := NewSerializer(client, serde.ValueSerde, serConfig)
490+
serde.MaybeFail("Serializer configuration", err)
491+
492+
info := schemaregistry.SchemaInfo{
493+
Schema: rootSchemaNested,
494+
SchemaType: "AVRO",
495+
}
496+
497+
id, err := client.Register("topic1-value", info, false)
498+
serde.MaybeFail("Schema registration", err)
499+
if id <= 0 {
500+
t.Errorf("Expected valid schema id, found %d", id)
501+
}
502+
503+
nested := make(map[string]interface{})
504+
nested["IntField"] = 123
505+
nested["DoubleField"] = 45.67
506+
nested["StringField"] = "hi"
507+
nested["BoolField"] = true
508+
nested["BytesField"] = []byte{1, 2}
509+
obj := make(map[string]interface{})
510+
obj["OtherField"] = nested
511+
512+
bytes, err := ser.Serialize("topic1", &obj)
513+
serde.MaybeFail("serialization", err)
514+
515+
deser, err := NewDeserializer(client, serde.ValueSerde, NewDeserializerConfig())
516+
serde.MaybeFail("Deserializer configuration", err)
517+
deser.Client = ser.Client
518+
deser.MessageFactory = testMessageFactory
519+
520+
var newobj map[string]interface{}
521+
err = deser.DeserializeInto("topic1", bytes, &newobj)
522+
serde.MaybeFail("deserialization into", err, serde.Expect(newobj, obj))
523+
}
524+
438525
func TestAvroSerdeWithReferences(t *testing.T) {
439526
serde.MaybeFail = serde.InitFailFunc(t)
440527
var err error

0 commit comments

Comments
 (0)