Skip to content

Commit 9f87ee9

Browse files
committed
TestTokensService_Recipients
Signed-off-by: Angelo De Caro <[email protected]>
1 parent cf0bca2 commit 9f87ee9

File tree

1 file changed

+124
-0
lines changed

1 file changed

+124
-0
lines changed

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

+124
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ import (
1515
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/setup"
1616
token2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token"
1717
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token/mock"
18+
"github.com/hyperledger-labs/fabric-token-sdk/token/driver"
1819
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
20+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens/core/comm"
1921
"github.com/hyperledger-labs/fabric-token-sdk/token/token"
2022
"github.com/pkg/errors"
2123
"github.com/stretchr/testify/assert"
@@ -116,5 +118,127 @@ func TestNewTokensService(t *testing.T) {
116118
}
117119
})
118120
}
121+
}
122+
123+
func TestTokensService_Recipients(t *testing.T) {
124+
pp, err := setup.Setup(32, []byte("issuer public key"), math.FP256BN_AMCL)
125+
assert.NoError(t, err)
126+
127+
tests := []struct {
128+
name string
129+
inputs func() (*token2.TokensService, driver.TokenOutput, error)
130+
wantErr bool
131+
expectedError string
132+
expectedIdentities []driver.Identity
133+
}{
134+
{
135+
name: "failed to deserialize token",
136+
inputs: func() (*token2.TokensService, driver.TokenOutput, error) {
137+
ts, err := token2.NewTokensService(nil, pp, &mock.IdentityDeserializer{})
138+
if err != nil {
139+
return nil, nil, err
140+
}
141+
return ts, nil, nil
142+
},
143+
wantErr: true,
144+
expectedError: "failed to deserialize token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: syntax error: sequence truncated",
145+
},
146+
{
147+
name: "failed to deserialize token 2",
148+
inputs: func() (*token2.TokensService, driver.TokenOutput, error) {
149+
ts, err := token2.NewTokensService(nil, pp, &mock.IdentityDeserializer{})
150+
if err != nil {
151+
return nil, nil, err
152+
}
153+
return ts, []byte{}, nil
154+
},
155+
wantErr: true,
156+
expectedError: "failed to deserialize token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: asn1: syntax error: sequence truncated",
157+
},
158+
{
159+
name: "failed to deserialize token 3",
160+
inputs: func() (*token2.TokensService, driver.TokenOutput, error) {
161+
ts, err := token2.NewTokensService(nil, pp, &mock.IdentityDeserializer{})
162+
if err != nil {
163+
return nil, nil, err
164+
}
165+
return ts, []byte{0, 1, 2, 3}, nil
166+
},
167+
wantErr: true,
168+
expectedError: "failed to deserialize token: failed deserializing token: failed unmarshalling token: failed to unmarshal to TypedToken: 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} TypedToken @2",
169+
},
170+
{
171+
name: "failed to deserialize token 4",
172+
inputs: func() (*token2.TokensService, driver.TokenOutput, error) {
173+
id := &mock.IdentityDeserializer{}
174+
id.RecipientsReturns(nil, nil)
175+
ts, err := token2.NewTokensService(nil, pp, id)
176+
if err != nil {
177+
return nil, nil, err
178+
}
179+
raw, err := comm.WrapTokenWithType([]byte{0, 1, 2, 3})
180+
if err != nil {
181+
return nil, nil, err
182+
}
183+
return ts, driver.TokenOutput(raw), nil
184+
},
185+
wantErr: true,
186+
expectedError: "failed to deserialize token: failed unmarshalling token: proto: cannot parse invalid wire-format data",
187+
},
188+
{
189+
name: "failed identity deserialize",
190+
inputs: func() (*token2.TokensService, driver.TokenOutput, error) {
191+
id := &mock.IdentityDeserializer{}
192+
id.RecipientsReturns(nil, errors.New("pineapple"))
193+
ts, err := token2.NewTokensService(nil, pp, id)
194+
if err != nil {
195+
return nil, nil, err
196+
}
197+
tok := &token2.Token{}
198+
raw, err := tok.Serialize()
199+
if err != nil {
200+
return nil, nil, err
201+
}
202+
return ts, raw, nil
203+
},
204+
wantErr: true,
205+
expectedError: "failed to get recipients: pineapple",
206+
},
207+
{
208+
name: "success",
209+
inputs: func() (*token2.TokensService, driver.TokenOutput, error) {
210+
id := &mock.IdentityDeserializer{}
211+
id.RecipientsReturns([]driver.Identity{driver.Identity("alice")}, nil)
212+
ts, err := token2.NewTokensService(nil, pp, id)
213+
if err != nil {
214+
return nil, nil, err
215+
}
216+
tok := &token2.Token{}
217+
raw, err := tok.Serialize()
218+
if err != nil {
219+
return nil, nil, err
220+
}
221+
return ts, raw, nil
222+
},
223+
wantErr: false,
224+
expectedIdentities: []driver.Identity{driver.Identity("alice")},
225+
},
226+
}
227+
for _, tt := range tests {
228+
t.Run(tt.name, func(t *testing.T) {
229+
ts, outputs, err := tt.inputs()
230+
assert.NoError(t, err)
231+
identities, err := ts.Recipients(outputs)
232+
if tt.wantErr {
233+
assert.Error(t, err)
234+
assert.EqualError(t, err, tt.expectedError)
235+
assert.Nil(t, identities)
236+
} else {
237+
assert.NoError(t, err)
238+
assert.NotNil(t, ts)
239+
assert.Equal(t, tt.expectedIdentities, identities)
240+
}
241+
})
242+
}
119243

120244
}

0 commit comments

Comments
 (0)