@@ -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