Skip to content

Commit dfb99cd

Browse files
committed
TestMetadataDeserialize
Signed-off-by: Angelo De Caro <[email protected]>
1 parent 37193be commit dfb99cd

File tree

2 files changed

+113
-3
lines changed

2 files changed

+113
-3
lines changed

token/core/zkatdlog/nogh/v1/token/token.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,12 @@ func NewMetadata(curve math.CurveID, tokenType token.Type, values []uint64, bfs
141141

142142
// Deserialize un-marshals Metadata
143143
func (m *Metadata) Deserialize(b []byte) error {
144-
typed, err := comm.UnmarshalTypedToken(b)
144+
typed, err := comm.UnmarshalTypedMetadata(b)
145145
if err != nil {
146146
return errors.Wrapf(err, "failed deserializing metadata")
147147
}
148148
metadata := &actions.TokenMetadata{}
149-
if err := proto.Unmarshal(typed.Token, metadata); err != nil {
149+
if err := proto.Unmarshal(typed.Metadata, metadata); err != nil {
150150
return errors.Wrapf(err, "failed unmarshalling metadata")
151151
}
152152
m.Type = token.Type(metadata.Type)

token/core/zkatdlog/nogh/v1/token/token_test.go

Lines changed: 111 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)