@@ -1351,6 +1351,81 @@ func TestAvroSerdeEncryption(t *testing.T) {
13511351 serde .MaybeFail ("deserialization" , err , serde .Expect (newobj , & obj ))
13521352}
13531353
1354+ func TestAvroSerdeEncryptionDeterministic (t * testing.T ) {
1355+ serde .MaybeFail = serde .InitFailFunc (t )
1356+ var err error
1357+
1358+ conf := schemaregistry .NewConfig ("mock://" )
1359+
1360+ client , err := schemaregistry .NewClient (conf )
1361+ serde .MaybeFail ("Schema Registry configuration" , err )
1362+
1363+ serConfig := NewSerializerConfig ()
1364+ serConfig .AutoRegisterSchemas = false
1365+ serConfig .UseLatestVersion = true
1366+ serConfig .RuleConfig = map [string ]string {
1367+ "secret" : "mysecret" ,
1368+ }
1369+ ser , err := NewSerializer (client , serde .ValueSerde , serConfig )
1370+ serde .MaybeFail ("Serializer configuration" , err )
1371+
1372+ encRule := schemaregistry.Rule {
1373+ Name : "test-encrypt" ,
1374+ Kind : "TRANSFORM" ,
1375+ Mode : "WRITEREAD" ,
1376+ Type : "ENCRYPT" ,
1377+ Tags : []string {"PII" },
1378+ Params : map [string ]string {
1379+ "encrypt.kek.name" : "kek1" ,
1380+ "encrypt.kms.type" : "local-kms" ,
1381+ "encrypt.kms.key.id" : "mykey" ,
1382+ "encrypt.dek.algorithm" : "AES256_SIV" ,
1383+ },
1384+ OnFailure : "ERROR,NONE" ,
1385+ }
1386+ ruleSet := schemaregistry.RuleSet {
1387+ DomainRules : []schemaregistry.Rule {encRule },
1388+ }
1389+
1390+ info := schemaregistry.SchemaInfo {
1391+ Schema : demoSchema ,
1392+ SchemaType : "AVRO" ,
1393+ RuleSet : & ruleSet ,
1394+ }
1395+
1396+ id , err := client .Register ("topic1-value" , info , false )
1397+ serde .MaybeFail ("Schema registration" , err )
1398+ if id <= 0 {
1399+ t .Errorf ("Expected valid schema id, found %d" , id )
1400+ }
1401+
1402+ obj := DemoSchema {}
1403+ obj .IntField = 123
1404+ obj .DoubleField = 45.67
1405+ obj .StringField = "hi"
1406+ obj .BoolField = true
1407+ obj .BytesField = []byte {1 , 2 }
1408+
1409+ bytes , err := ser .Serialize ("topic1" , & obj )
1410+ serde .MaybeFail ("serialization" , err )
1411+
1412+ // Reset encrypted field
1413+ obj .StringField = "hi"
1414+ obj .BytesField = []byte {1 , 2 }
1415+
1416+ deserConfig := NewDeserializerConfig ()
1417+ deserConfig .RuleConfig = map [string ]string {
1418+ "secret" : "mysecret" ,
1419+ }
1420+ deser , err := NewDeserializer (client , serde .ValueSerde , deserConfig )
1421+ serde .MaybeFail ("Deserializer configuration" , err )
1422+ deser .Client = ser .Client
1423+ deser .MessageFactory = testMessageFactory
1424+
1425+ newobj , err := deser .Deserialize ("topic1" , bytes )
1426+ serde .MaybeFail ("deserialization" , err , serde .Expect (newobj , & obj ))
1427+ }
1428+
13541429func TestAvroSerdeEncryptionWithSimpleMap (t * testing.T ) {
13551430 serde .MaybeFail = serde .InitFailFunc (t )
13561431 var err error
0 commit comments