@@ -1193,6 +1193,69 @@ describe('AvroSerializer', () => {
1193
1193
expect ( obj2 . boolField ) . toEqual ( obj . boolField ) ;
1194
1194
expect ( obj2 . bytesField ) . toEqual ( obj . bytesField ) ;
1195
1195
} )
1196
+ it ( 'encryption with alternate keks' , async ( ) => {
1197
+ let conf : ClientConfig = {
1198
+ baseURLs : [ baseURL ] ,
1199
+ cacheCapacity : 1000
1200
+ }
1201
+ let client = SchemaRegistryClient . newClient ( conf )
1202
+ let serConfig : AvroSerializerConfig = {
1203
+ useLatestVersion : true ,
1204
+ ruleConfig : {
1205
+ secret : 'mysecret' ,
1206
+ 'encrypt.alternate.kms.key.ids' : 'mykey2,mykey3'
1207
+ }
1208
+ }
1209
+ let ser = new AvroSerializer ( client , SerdeType . VALUE , serConfig )
1210
+ let dekClient = encryptionExecutor . client !
1211
+
1212
+ let encRule : Rule = {
1213
+ name : 'test-encrypt' ,
1214
+ kind : 'TRANSFORM' ,
1215
+ mode : RuleMode . WRITEREAD ,
1216
+ type : 'ENCRYPT_PAYLOAD' ,
1217
+ params : {
1218
+ 'encrypt.kek.name' : 'kek1' ,
1219
+ 'encrypt.kms.type' : 'local-kms' ,
1220
+ 'encrypt.kms.key.id' : 'mykey' ,
1221
+ } ,
1222
+ onFailure : 'ERROR,NONE'
1223
+ }
1224
+ let ruleSet : RuleSet = {
1225
+ encodingRules : [ encRule ]
1226
+ }
1227
+
1228
+ let info : SchemaInfo = {
1229
+ schemaType : 'AVRO' ,
1230
+ schema : demoSchema ,
1231
+ ruleSet
1232
+ }
1233
+
1234
+ await client . register ( subject , info , false )
1235
+
1236
+ let obj = {
1237
+ intField : 123 ,
1238
+ doubleField : 45.67 ,
1239
+ stringField : 'hi' ,
1240
+ boolField : true ,
1241
+ bytesField : Buffer . from ( [ 1 , 2 ] ) ,
1242
+ }
1243
+ let bytes = await ser . serialize ( topic , obj )
1244
+
1245
+ let deserConfig : AvroDeserializerConfig = {
1246
+ ruleConfig : {
1247
+ secret : 'mysecret'
1248
+ }
1249
+ }
1250
+ let deser = new AvroDeserializer ( client , SerdeType . VALUE , deserConfig )
1251
+ encryptionExecutor . client = dekClient
1252
+ let obj2 = await deser . deserialize ( topic , bytes )
1253
+ expect ( obj2 . intField ) . toEqual ( obj . intField ) ;
1254
+ expect ( obj2 . doubleField ) . toBeCloseTo ( obj . doubleField , 0.001 ) ;
1255
+ expect ( obj2 . stringField ) . toEqual ( obj . stringField ) ;
1256
+ expect ( obj2 . boolField ) . toEqual ( obj . boolField ) ;
1257
+ expect ( obj2 . bytesField ) . toEqual ( obj . bytesField ) ;
1258
+ } )
1196
1259
it ( 'deterministic encryption' , async ( ) => {
1197
1260
let conf : ClientConfig = {
1198
1261
baseURLs : [ baseURL ] ,
0 commit comments