@@ -68,7 +68,7 @@ func FuzzSerialization(f *testing.F) {
6868 token2 := & token2.Token {}
6969 err = token2 .Deserialize (raw )
7070 if err != nil {
71- t .Errorf ("failed to deserialize token [owner: %s, putData: %v]: [%v]" , owner , putData , err )
71+ t .Errorf ("failed to deserialize metadata [owner: %s, putData: %v]: [%v]" , owner , putData , err )
7272 }
7373 assert .Equal (t , len (token .Owner ), len (token2 .Owner ), "owner mismatch [owner: %s, putData: %v]" , owner , putData )
7474 assert .Equal (t , token .Data , token2 .Data )
@@ -289,3 +289,113 @@ func TestTokenDeserialize(t *testing.T) {
289289 })
290290 }
291291}
292+
293+ func TestMetadataDeserialize (t * testing.T ) {
294+ tests := []struct {
295+ name string
296+ metadata func () (* token2.Metadata , []byte , error )
297+ owner bool
298+ wantErr bool
299+ expectedError string
300+ }{
301+ {
302+ name : "nil raw" ,
303+ owner : true ,
304+ metadata : func () (* token2.Metadata , []byte , error ) {
305+ return nil , nil , nil
306+ },
307+ wantErr : true ,
308+ expectedError : "failed deserializing metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: syntax error: sequence truncated" ,
309+ },
310+ {
311+ name : "empty raw" ,
312+ owner : true ,
313+ metadata : func () (* token2.Metadata , []byte , error ) {
314+ return nil , []byte {}, nil
315+ },
316+ wantErr : true ,
317+ expectedError : "failed deserializing metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: syntax error: sequence truncated" ,
318+ },
319+ {
320+ name : "invalid raw" ,
321+ owner : true ,
322+ metadata : func () (* token2.Metadata , []byte , error ) {
323+ return nil , []byte {0 , 1 , 2 , 3 }, nil
324+ },
325+ wantErr : true ,
326+ expectedError : "failed deserializing metadata: failed unmarshalling metadata: failed to unmarshal to TypedMetadata: asn1: structure error: tags don't match (16 vs {class:0 tag:0 length:1 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} TypedMetadata @2" ,
327+ },
328+ {
329+ name : "invalid metadata type" ,
330+ owner : true ,
331+ metadata : func () (* token2.Metadata , []byte , error ) {
332+ raw , err := tokens .WrapWithType (- 1 , []byte {0 , 1 , 2 , 3 })
333+ return nil , raw , err
334+ },
335+ wantErr : true ,
336+ expectedError : "failed deserializing metadata: invalid metadata type [-1]" ,
337+ },
338+ {
339+ name : "valid metadata raw, nil" ,
340+ owner : true ,
341+ metadata : func () (* token2.Metadata , []byte , error ) {
342+ raw , err := tokens .WrapWithType (comm .Type , nil )
343+ return & token2.Metadata {}, raw , err
344+ },
345+ wantErr : false ,
346+ },
347+ {
348+ name : "invalid metadata raw, invalid" ,
349+ owner : true ,
350+ metadata : func () (* token2.Metadata , []byte , error ) {
351+ raw , err := tokens .WrapWithType (comm .Type , []byte {0 , 1 , 2 , 3 })
352+ return nil , raw , err
353+ },
354+ wantErr : true ,
355+ expectedError : "failed unmarshalling metadata: proto: cannot parse invalid wire-format data" ,
356+ },
357+ {
358+ name : "invalid metadata raw, invalid" ,
359+ owner : true ,
360+ metadata : func () (* token2.Metadata , []byte , error ) {
361+ raw , err := tokens .WrapWithType (comm .Type , []byte {0 , 1 , 2 , 3 })
362+ return nil , raw , err
363+ },
364+ wantErr : true ,
365+ expectedError : "failed unmarshalling metadata: proto: cannot parse invalid wire-format data" ,
366+ },
367+ {
368+ name : "valid metadata" ,
369+ owner : true ,
370+ metadata : func () (* token2.Metadata , []byte , error ) {
371+ c := math .Curves [math .BN254 ]
372+ rand , err := c .Rand ()
373+ assert .NoError (t , err )
374+ metadata := & token2.Metadata {
375+ Type : "token type" ,
376+ Value : c .NewRandomZr (rand ),
377+ BlindingFactor : c .NewRandomZr (rand ),
378+ Issuer : []byte ("issuer" ),
379+ }
380+ raw , err := metadata .Serialize ()
381+ return metadata , raw , err
382+ },
383+ wantErr : false ,
384+ },
385+ }
386+ for _ , tt := range tests {
387+ t .Run (tt .name , func (t * testing.T ) {
388+ metadata , raw , err := tt .metadata ()
389+ assert .NoError (t , err )
390+ metadata2 := & token2.Metadata {}
391+ err = metadata2 .Deserialize (raw )
392+ if tt .wantErr {
393+ assert .Error (t , err )
394+ assert .EqualError (t , err , tt .expectedError )
395+ } else {
396+ assert .NoError (t , err )
397+ assert .Equal (t , metadata , metadata2 )
398+ }
399+ })
400+ }
401+ }
0 commit comments