diff --git a/schemaregistry/serde/avrov2/avro_test.go b/schemaregistry/serde/avrov2/avro_test.go index b95e7e2ed..df38acbe7 100644 --- a/schemaregistry/serde/avrov2/avro_test.go +++ b/schemaregistry/serde/avrov2/avro_test.go @@ -77,6 +77,39 @@ const ( } ] } +` + demoSchemaWithLogicalType = ` +{ + "name": "DemoSchema", + "type": "record", + "fields": [ + { + "name": "IntField", + "type": "int" + }, + { + "name": "DoubleField", + "type": "double" + }, + { + "name": "StringField", + "type": { + "type": "string", + "logicalType": "uuid" + }, + "confluent:tags": [ "PII" ] + }, + { + "name": "BoolField", + "type": "boolean" + }, + { + "name": "BytesField", + "type": "bytes", + "confluent:tags": [ "PII" ] + } + ] +} ` demoSchemaSingleTag = ` { @@ -458,6 +491,66 @@ func TestAvroSerdeWithCELCondition(t *testing.T) { serde.MaybeFail("deserialization", err, serde.Expect(newobj, &obj)) } +func TestAvroSerdeWithCELConditionLogicalType(t *testing.T) { + serde.MaybeFail = serde.InitFailFunc(t) + var err error + + conf := schemaregistry.NewConfig("mock://") + + client, err := schemaregistry.NewClient(conf) + serde.MaybeFail("Schema Registry configuration", err) + + serConfig := NewSerializerConfig() + serConfig.AutoRegisterSchemas = false + serConfig.UseLatestVersion = true + ser, err := NewSerializer(client, serde.ValueSerde, serConfig) + serde.MaybeFail("Serializer configuration", err) + + uuid := "550e8400-e29b-41d4-a716-446655440000" + + encRule := schemaregistry.Rule{ + Name: "test-cel", + Kind: "CONDITION", + Mode: "WRITE", + Type: "CEL", + Expr: "message.StringField == '" + uuid + "'", + } + ruleSet := schemaregistry.RuleSet{ + DomainRules: []schemaregistry.Rule{encRule}, + } + + info := schemaregistry.SchemaInfo{ + Schema: demoSchemaWithLogicalType, + SchemaType: "AVRO", + RuleSet: &ruleSet, + } + + id, err := client.Register("topic1-value", info, false) + serde.MaybeFail("Schema registration", err) + if id <= 0 { + t.Errorf("Expected valid schema id, found %d", id) + } + + obj := DemoSchema{} + obj.IntField = 123 + obj.DoubleField = 45.67 + obj.StringField = uuid + obj.BoolField = true + obj.BytesField = []byte{1, 2} + + bytes, err := ser.Serialize("topic1", &obj) + serde.MaybeFail("serialization", err) + + deserConfig := NewDeserializerConfig() + deser, err := NewDeserializer(client, serde.ValueSerde, deserConfig) + serde.MaybeFail("Deserializer configuration", err) + deser.Client = ser.Client + deser.MessageFactory = testMessageFactory + + newobj, err := deser.Deserialize("topic1", bytes) + serde.MaybeFail("deserialization", err, serde.Expect(newobj, &obj)) +} + func TestAvroSerdeWithCELConditionFail(t *testing.T) { serde.MaybeFail = serde.InitFailFunc(t) var err error