Skip to content

Commit 4638164

Browse files
committed
TestNewTokensService
Signed-off-by: Angelo De Caro <[email protected]>
1 parent 3f6428b commit 4638164

File tree

5 files changed

+140
-12
lines changed

5 files changed

+140
-12
lines changed

token/core/fabtoken/v1/tokens.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type TokensService struct {
2525
}
2626

2727
func NewTokensService(pp *setup.PublicParams, identityDeserializer driver.Deserializer) (*TokensService, error) {
28-
supportedTokens, err := SupportedTokenFormat(pp.QuantityPrecision)
28+
supportedTokens, err := ComputeTokenFormat(pp.QuantityPrecision)
2929
if err != nil {
3030
return nil, errors.WithMessagef(err, "failed getting supported token types")
3131
}
@@ -89,7 +89,7 @@ func (s *TokensUpgradeService) CheckUpgradeProof(ch driver.TokensUpgradeChalleng
8989
return false, errors.New("not supported")
9090
}
9191

92-
func SupportedTokenFormat(precision uint64) (token2.Format, error) {
92+
func ComputeTokenFormat(precision uint64) (token2.Format, error) {
9393
hasher := utils.NewSHA256Hasher()
9494
if err := errors2.Join(
9595
hasher.AddInt32(fabtoken.Type),

token/core/zkatdlog/nogh/v1/crypto/upgrade/service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func NewService(
5656
// compute supported tokens
5757
var upgradeSupportedTokenFormatList []token.Format
5858
for _, precision := range []uint64{16, 32, 64} {
59-
format, err := v1.SupportedTokenFormat(precision)
59+
format, err := v1.ComputeTokenFormat(precision)
6060
if err != nil {
6161
return nil, errors.Wrapf(err, "failed computing fabtoken token format with precision [%d]", precision)
6262
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func TestTokensService_GenUpgradeProof(t *testing.T) {
4747
}
4848
fabtokenOutputRaw, err := fabtokenOutput.Serialize()
4949
assert.NoError(t, err)
50-
formatFabtoken16, err := v1.SupportedTokenFormat(16)
50+
formatFabtoken16, err := v1.ComputeTokenFormat(16)
5151
assert.NoError(t, err)
5252
validTokens := []token.LedgerToken{{
5353
ID: token.ID{TxId: "tx1", Index: 1},
@@ -178,7 +178,7 @@ func TestTokensService_CheckUpgradeProof(t *testing.T) {
178178
}
179179
fabtokenOutputRaw, err := fabtokenOutput.Serialize()
180180
assert.NoError(t, err)
181-
formatFabtoken16, err := v1.SupportedTokenFormat(16)
181+
formatFabtoken16, err := v1.ComputeTokenFormat(16)
182182
assert.NoError(t, err)
183183
validTokens := []token.LedgerToken{{
184184
ID: token.ID{TxId: "tx1", Index: 1},

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ import (
2525
)
2626

2727
var Precisions = map[token.Format]uint64{
28-
utils.MustGet(v1.SupportedTokenFormat(16)): 16,
29-
utils.MustGet(v1.SupportedTokenFormat(32)): 32,
30-
utils.MustGet(v1.SupportedTokenFormat(64)): 64,
28+
utils.MustGet(v1.ComputeTokenFormat(16)): 16,
29+
utils.MustGet(v1.ComputeTokenFormat(32)): 32,
30+
utils.MustGet(v1.ComputeTokenFormat(64)): 64,
3131
}
3232

3333
//go:generate counterfeiter -o mock/id.go -fake-name IdentityDeserializer . IdentityDeserializer
@@ -47,11 +47,19 @@ type TokensService struct {
4747
}
4848

4949
func NewTokensService(logger logging.Logger, publicParams *setup.PublicParams, identityDeserializer IdentityDeserializer) (*TokensService, error) {
50+
// validate input
51+
if publicParams == nil {
52+
return nil, errors.New("publicParams cannot be nil")
53+
}
54+
if identityDeserializer == nil {
55+
return nil, errors.New("identityDeserializer cannot be nil")
56+
}
57+
5058
// compute supported tokens
5159
maxPrecision := publicParams.Precision()
5260

5361
// dlog without graph hiding
54-
outputTokenFormat, err := supportedTokenFormat(publicParams, maxPrecision)
62+
outputTokenFormat, err := ComputeTokenFormat(publicParams, maxPrecision)
5563
if err != nil {
5664
return nil, errors.Wrapf(err, "failed computing comm token types")
5765
}
@@ -60,7 +68,7 @@ func NewTokensService(logger logging.Logger, publicParams *setup.PublicParams, i
6068
for _, precision := range setup.SupportedPrecisions {
6169
// these Precisions are supported directly
6270
if precision <= maxPrecision {
63-
format, err := supportedTokenFormat(publicParams, precision)
71+
format, err := ComputeTokenFormat(publicParams, precision)
6472
if err != nil {
6573
return nil, errors.Wrapf(err, "failed computing comm token types")
6674
}
@@ -70,7 +78,7 @@ func NewTokensService(logger logging.Logger, publicParams *setup.PublicParams, i
7078

7179
// in addition, we support all fabtoken with precision less than maxPrecision
7280
for _, precision := range []uint64{16, 32, 64} {
73-
format, err := v1.SupportedTokenFormat(precision)
81+
format, err := v1.ComputeTokenFormat(precision)
7482
if err != nil {
7583
return nil, errors.Wrapf(err, "failed computing fabtoken token format with precision [%d]", precision)
7684
}
@@ -252,7 +260,7 @@ func (s *TokensService) getOutput(outputRaw []byte, checkOwner bool) (*Token, er
252260
return output, nil
253261
}
254262

255-
func supportedTokenFormat(pp *setup.PublicParams, precision uint64) (token.Format, error) {
263+
func ComputeTokenFormat(pp *setup.PublicParams, precision uint64) (token.Format, error) {
256264
hasher := utils2.NewSHA256Hasher()
257265
if err := errors2.Join(
258266
hasher.AddInt32(comm.Type),
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
/*
2+
Copyright IBM Corp. All Rights Reserved.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
package token_test
8+
9+
import (
10+
"testing"
11+
12+
math "github.com/IBM/mathlib"
13+
"github.com/hyperledger-labs/fabric-smart-client/platform/common/utils/collections"
14+
v1 "github.com/hyperledger-labs/fabric-token-sdk/token/core/fabtoken/v1"
15+
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/setup"
16+
token2 "github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token"
17+
"github.com/hyperledger-labs/fabric-token-sdk/token/core/zkatdlog/nogh/v1/token/mock"
18+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/logging"
19+
"github.com/hyperledger-labs/fabric-token-sdk/token/token"
20+
"github.com/pkg/errors"
21+
"github.com/stretchr/testify/assert"
22+
)
23+
24+
func TestNewTokensService(t *testing.T) {
25+
tests := []struct {
26+
name string
27+
init func() (logging.Logger, *setup.PublicParams, token2.IdentityDeserializer, error)
28+
check func(pp *setup.PublicParams, ts *token2.TokensService) error
29+
wantErr bool
30+
expectedError string
31+
}{
32+
{
33+
name: "publicParams cannot be nil",
34+
init: func() (logging.Logger, *setup.PublicParams, token2.IdentityDeserializer, error) {
35+
return nil, nil, nil, nil
36+
},
37+
wantErr: true,
38+
expectedError: "publicParams cannot be nil",
39+
},
40+
{
41+
name: "identityDeserializer cannot be nil",
42+
init: func() (logging.Logger, *setup.PublicParams, token2.IdentityDeserializer, error) {
43+
pp, err := setup.Setup(32, nil, math.FP256BN_AMCL)
44+
if err != nil {
45+
return nil, nil, nil, err
46+
}
47+
return nil, pp, nil, nil
48+
},
49+
wantErr: true,
50+
expectedError: "identityDeserializer cannot be nil",
51+
},
52+
{
53+
name: "success",
54+
init: func() (logging.Logger, *setup.PublicParams, token2.IdentityDeserializer, error) {
55+
pp, err := setup.Setup(32, []byte("issuer public key"), math.FP256BN_AMCL)
56+
if err != nil {
57+
return nil, nil, nil, err
58+
}
59+
return nil, pp, &mock.IdentityDeserializer{}, nil
60+
},
61+
check: func(pp *setup.PublicParams, ts *token2.TokensService) error {
62+
// check pp
63+
if ts.PublicParameters != pp {
64+
return errors.Errorf("public parameters not equal")
65+
}
66+
// check OutputTokenFormat
67+
outputTokenFormat, err := token2.ComputeTokenFormat(ts.PublicParameters, 32)
68+
if err != nil {
69+
return err
70+
}
71+
if ts.OutputTokenFormat != outputTokenFormat {
72+
return errors.Errorf("invalid token format [%s]", ts.OutputTokenFormat)
73+
}
74+
75+
if len(ts.SupportedTokenFormats()) != 4 {
76+
return errors.Errorf("invalid number of supported token formats [%d]", len(ts.SupportedTokenFormats()))
77+
}
78+
dlog16, err1 := token2.ComputeTokenFormat(pp, 16)
79+
dlog32, err2 := token2.ComputeTokenFormat(pp, 32)
80+
ft16, err3 := v1.ComputeTokenFormat(16)
81+
ft32, err4 := v1.ComputeTokenFormat(32)
82+
if err1 != nil || err2 != nil || err3 != nil || err4 != nil {
83+
return errors.Errorf("failed computing token format")
84+
}
85+
stf := collections.NewSet[token.Format](ts.SupportedTokenFormats()...)
86+
if !stf.Contains(dlog16) {
87+
return errors.Errorf("stf does not contain dlog16")
88+
}
89+
if !stf.Contains(dlog32) {
90+
return errors.Errorf("stf does not contain dlog32")
91+
}
92+
if !stf.Contains(ft16) {
93+
return errors.Errorf("stf does not contain ft16")
94+
}
95+
if !stf.Contains(ft32) {
96+
return errors.Errorf("stf does not contain ft32")
97+
}
98+
return nil
99+
},
100+
wantErr: false,
101+
},
102+
}
103+
for _, tt := range tests {
104+
t.Run(tt.name, func(t *testing.T) {
105+
logger, pp, deserializer, err := tt.init()
106+
assert.NoError(t, err)
107+
ts, err := token2.NewTokensService(logger, pp, deserializer)
108+
if tt.wantErr {
109+
assert.Error(t, err)
110+
assert.EqualError(t, err, tt.expectedError)
111+
assert.Nil(t, ts)
112+
} else {
113+
assert.NoError(t, err)
114+
assert.NotNil(t, ts)
115+
assert.NoError(t, tt.check(pp, ts))
116+
}
117+
})
118+
}
119+
120+
}

0 commit comments

Comments
 (0)