@@ -929,6 +929,86 @@ def test_avro_encryption():
929929    assert  obj  ==  obj2 
930930
931931
932+ def  test_avro_encryption_cel ():
933+     executor  =  FieldEncryptionExecutor .register_with_clock (FakeClock ())
934+ 
935+     conf  =  {'url' : _BASE_URL }
936+     client  =  SchemaRegistryClient .new_client (conf )
937+     ser_conf  =  {'auto.register.schemas' : False , 'use.latest.version' : True }
938+     rule_conf  =  {'secret' : 'mysecret' }
939+     schema  =  {
940+         'type' : 'record' ,
941+         'name' : 'test' ,
942+         'fields' : [
943+             {'name' : 'intField' , 'type' : 'int' },
944+             {'name' : 'doubleField' , 'type' : 'double' },
945+             {'name' : 'stringField' , 'type' : 'string' , 'confluent:tags' : ['PII' ]},
946+             {'name' : 'booleanField' , 'type' : 'boolean' },
947+             {'name' : 'bytesField' , 'type' : 'bytes' , 'confluent:tags' : ['PII' ]},
948+         ]
949+     }
950+ 
951+     rule1  =  Rule (
952+         "test-cel" ,
953+         "" ,
954+         RuleKind .TRANSFORM ,
955+         RuleMode .WRITE ,
956+         "CEL_FIELD" ,
957+         None ,
958+         None ,
959+         "name == 'stringField' ; value + '-suffix'" ,
960+         None ,
961+         None ,
962+         False 
963+     )
964+     rule2  =  Rule (
965+         "test-encrypt" ,
966+         "" ,
967+         RuleKind .TRANSFORM ,
968+         RuleMode .WRITEREAD ,
969+         "ENCRYPT" ,
970+         ["PII" ],
971+         RuleParams ({
972+             "encrypt.kek.name" : "kek1" ,
973+             "encrypt.kms.type" : "local-kms" ,
974+             "encrypt.kms.key.id" : "mykey" 
975+         }),
976+         None ,
977+         None ,
978+         "ERROR,NONE" ,
979+         False 
980+     )
981+     client .register_schema (_SUBJECT , Schema (
982+         json .dumps (schema ),
983+         "AVRO" ,
984+         [],
985+         None ,
986+         RuleSet (None , [rule1 , rule2 ])
987+     ))
988+ 
989+     obj  =  {
990+         'intField' : 123 ,
991+         'doubleField' : 45.67 ,
992+         'stringField' : 'hi' ,
993+         'booleanField' : True ,
994+         'bytesField' : b'foobar' ,
995+     }
996+     ser  =  AvroSerializer (client , schema_str = None , conf = ser_conf , rule_conf = rule_conf )
997+     dek_client  =  executor .client 
998+     ser_ctx  =  SerializationContext (_TOPIC , MessageField .VALUE )
999+     obj_bytes  =  ser (obj , ser_ctx )
1000+ 
1001+     # reset encrypted fields 
1002+     assert  obj ['stringField' ] !=  'hi-suffix' 
1003+     obj ['stringField' ] =  'hi-suffix' 
1004+     obj ['bytesField' ] =  b'foobar' 
1005+ 
1006+     deser  =  AvroDeserializer (client , rule_conf = rule_conf )
1007+     executor .client  =  dek_client 
1008+     obj2  =  deser (obj_bytes , ser_ctx )
1009+     assert  obj  ==  obj2 
1010+ 
1011+ 
9321012def  test_avro_encryption_dek_rotation ():
9331013    executor  =  FieldEncryptionExecutor .register_with_clock (FakeClock ())
9341014
0 commit comments