@@ -15,7 +15,9 @@ import (
15
15
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/setup"
16
16
token2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token"
17
17
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token/mock"
18
+ "github.com/hyperledger-labs/fabric-token-sdk/token/driver"
18
19
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
20
+ "github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens/core/comm"
19
21
"github.com/hyperledger-labs/fabric-token-sdk/token/token"
20
22
"github.com/pkg/errors"
21
23
"github.com/stretchr/testify/assert"
@@ -116,5 +118,127 @@ func TestNewTokensService(t *testing.T) {
116
118
}
117
119
})
118
120
}
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
+ }
119
243
120
244
}
0 commit comments