Skip to content

Commit 2b387c0

Browse files
committed
moving towards mockability
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent cada368 commit 2b387c0

File tree

21 files changed

+2061
-99
lines changed

21 files changed

+2061
-99
lines changed

token/sdk/dig/sdk.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import (
5252
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokenlockdb"
5353
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens"
5454
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttx"
55+
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttx/wrapper"
5556
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb"
5657
"github.com/hyperledger-labs/fabric-token-sdk/token/services/walletdb"
5758
"go.opentelemetry.io/otel/trace"
@@ -109,13 +110,13 @@ func (p *SDK) Install() error {
109110
p.Container().Provide(
110111
digutils.Identity[*network.Provider](),
111112
dig.As(
112-
new(ttx.NetworkProvider),
113113
new(token.Normalizer),
114114
new(auditor.NetworkProvider),
115115
new(common2.NetworkProvider),
116116
new(tokens.NetworkProvider),
117117
),
118118
),
119+
p.Container().Provide(wrapper.NewNetworkProvider, dig.As(new(ttx.NetworkProvider))),
119120
p.Container().Provide(func(vaultProvider *vault.Provider) *vault.PublicParamsStorage {
120121
return &vault.PublicParamsStorage{Provider: vaultProvider}
121122
}, dig.As(new(ftscore.PublicParametersStorage))),
File renamed without changes.

token/services/ttx/accept.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (s *AcceptView) Call(context view.Context) (interface{}, error) {
9696
}
9797

9898
func (s *AcceptView) respondToSignatureRequests(context view.Context) error {
99-
requestsToBeSigned, err := requiredSigners(context.Context(), s.tx.TokenRequest)
99+
requestsToBeSigned, err := extractRequiredSigners(context.Context(), s.tx.TokenRequest)
100100
if err != nil {
101101
return errors.Wrapf(err, "failed collecting requests of signature")
102102
}

token/services/ttx/db.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
1616
"github.com/hyperledger-labs/fabric-token-sdk/token"
1717
"github.com/hyperledger-labs/fabric-token-sdk/token/services/db/driver"
18-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network"
1918
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network/common"
2019
"github.com/hyperledger-labs/fabric-token-sdk/token/services/tokens"
2120
"github.com/hyperledger-labs/fabric-token-sdk/token/services/ttxdb"
@@ -32,10 +31,6 @@ type TransactionRecord = driver.TransactionRecord
3231

3332
type PageTransactionsIterator = driver2.PageIterator[*TransactionRecord]
3433

35-
type NetworkProvider interface {
36-
GetNetwork(network string, channel string) (*network.Network, error)
37-
}
38-
3934
type CheckService interface {
4035
Check(ctx context.Context) ([]string, error)
4136
}

token/services/ttx/endorse.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func (s *EndorseView) Call(context view.Context) (interface{}, error) {
8585
func (s *EndorseView) handleSignatureRequests(context view.Context) error {
8686
// Process signature requests
8787
logger.DebugfContext(context.Context(), "check expected number of requests to sign for tx id [%s]", s.tx.ID())
88-
requiredSigners, err := requiredSigners(context.Context(), s.tx.Request())
88+
requiredSigners, err := extractRequiredSigners(context.Context(), s.tx.Request())
8989
if err != nil {
9090
return errors.Wrapf(err, "failed collecting requests of signature")
9191
}
@@ -200,8 +200,8 @@ func (s *EndorseView) ack(context view.Context, receivedTx *Transaction) error {
200200
return nil
201201
}
202202

203-
// requiredSigners extracts from the given token request a list of identities that can generate a signature over it.
204-
func requiredSigners(ctx context.Context, request *token.Request) ([]token.Identity, error) {
203+
// extractRequiredSigners extracts from the given token request a list of identities that can generate a signature over it.
204+
func extractRequiredSigners(ctx context.Context, request *token.Request) ([]token.Identity, error) {
205205
issuerSigners := request.IssueSigners()
206206
transferSigners := request.TransferSigners()
207207
res := make([]token.Identity, 0, len(issuerSigners)+len(transferSigners))

token/services/ttx/errors.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,16 @@ import (
1010
)
1111

1212
var (
13+
// ErrTimeout signals that a timeout happened
14+
ErrTimeout = errors.New("timeout reached")
1315
// ErrFailedCompilingOptions signals a failure when compiling the options
1416
ErrFailedCompilingOptions = errors.New("failed to compiling options")
1517
// ErrInvalidInput signals that the input is invalid
1618
ErrInvalidInput = errors.New("invalid input")
1719
// ErrHandlingSignatureRequests signals that an error occurred while handling the signature requests
1820
ErrHandlingSignatureRequests = errors.New("failed to handle signature requests")
21+
// ErrDepNotAvailableInContext signals that a dependency is not available
22+
ErrDepNotAvailableInContext = errors.New("dependency not available")
23+
// ErrTxUnmarshalling signals that an error occurred while unmarshalling a token transaction
24+
ErrTxUnmarshalling = errors.New("failed to unmarshal tx")
1925
)

token/services/ttx/info.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"context"
1111

1212
"github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
13-
"github.com/hyperledger-labs/fabric-token-sdk/token"
1413
)
1514

1615
type TokenTransactionDB interface {
@@ -30,11 +29,11 @@ type TransactionInfo struct {
3029

3130
// TransactionInfoProvider allows the retrieval of the transaction info
3231
type TransactionInfoProvider struct {
33-
tms *token.ManagementService
32+
tms TokenManagementService
3433
ttxDB TokenTransactionDB
3534
}
3635

37-
func newTransactionInfoProvider(tms *token.ManagementService, ttxDB TokenTransactionDB) *TransactionInfoProvider {
36+
func newTransactionInfoProvider(tms TokenManagementService, ttxDB TokenTransactionDB) *TransactionInfoProvider {
3837
return &TransactionInfoProvider{tms: tms, ttxDB: ttxDB}
3938
}
4039

token/services/ttx/manager.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ type StoreServiceManager db.StoreServiceManager[*ttxdb.StoreService]
2828
type TokensServiceManager db.ServiceManager[*tokens.Service]
2929

3030
type TMSProvider interface {
31-
GetManagementService(opts ...token.ServiceOption) (*token.ManagementService, error)
31+
GetManagementService(opts ...token.ServiceOption) (TokenManagementService, error)
3232
}
3333

3434
type CheckServiceProvider interface {
@@ -109,7 +109,11 @@ func (m *ServiceManager) RestoreTMS(ctx context.Context, tmsID token.TMSID) erro
109109
}
110110
return iterators.ForEach(it, func(record *driver.TokenRequestRecord) error {
111111
logger.Debugf("restore transaction [%s] with status [%s]", record.TxID, TxStatusMessage[record.Status])
112-
return net.AddFinalityListener(tmsID.Namespace, record.TxID, common.NewFinalityListener(logger, db.tmsProvider, db.tmsID, db.ttxStoreService, db.tokensService, db.finalityTracer))
112+
return net.AddFinalityListener(
113+
tmsID.Namespace,
114+
record.TxID,
115+
common.NewFinalityListener(logger, db.tmsProvider, db.tmsID, db.ttxStoreService, db.tokensService, db.finalityTracer),
116+
)
113117
})
114118
}
115119

@@ -118,7 +122,7 @@ var (
118122
)
119123

120124
// Get returns the Service instance for the passed TMS
121-
func Get(sp token.ServiceProvider, tms *token.ManagementService) *Service {
125+
func Get(sp token.ServiceProvider, tms TokenManagementService) *Service {
122126
if tms == nil {
123127
logger.Debugf("no TMS provided")
124128
return nil
@@ -137,6 +141,6 @@ func Get(sp token.ServiceProvider, tms *token.ManagementService) *Service {
137141
}
138142

139143
// New returns the Service instance for the passed TMS
140-
func New(sp token.ServiceProvider, tms *token.ManagementService) *Service {
144+
func New(sp token.ServiceProvider, tms TokenManagementService) *Service {
141145
return Get(sp, tms)
142146
}

token/services/ttx/marshaller.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"github.com/hyperledger-labs/fabric-smart-client/pkg/utils/errors"
1414
"github.com/hyperledger-labs/fabric-token-sdk/token"
1515
"github.com/hyperledger-labs/fabric-token-sdk/token/core/common/encoding/json"
16-
"github.com/hyperledger-labs/fabric-token-sdk/token/services/network"
1716
"github.com/hyperledger-labs/fabric-token-sdk/token/services/utils"
1817
"go.uber.org/zap/zapcore"
1918
)
@@ -69,7 +68,7 @@ type metaSer struct {
6968
Vals [][]byte
7069
}
7170

72-
type GetNetworkFunc = func(network string, channel string) (*network.Network, error)
71+
type GetNetworkFunc = func(network string, channel string) (Network, error)
7372

7473
type TransactionSer struct {
7574
Nonce []byte

token/services/ttx/marshaller_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ func TestTransactionMarshalUnmarshalRoundtrip(t *testing.T) {
8383
}
8484

8585
// call unmarshal with a getNetwork func that should not be invoked
86-
badGetNetwork := func(network string, channel string) (*network.Network, error) {
86+
badGetNetwork := func(network string, channel string) (Network, error) {
8787
t.Fatalf("getNetwork should not be called")
8888
return nil, nil
8989
}
@@ -125,7 +125,7 @@ func TestUnmarshal_ErrorCases(t *testing.T) {
125125
ser := TransactionSer{Network: "", Namespace: "ns"}
126126
raw := m(ser)
127127
p := &Payload{Transient: map[string][]byte{}, TokenRequest: token.NewRequest(nil, ""), Envelope: &network.Envelope{}}
128-
if err := unmarshal(func(network, channel string) (*network.Network, error) { return nil, nil }, p, raw); !errors.Is(err, ErrNetworkNotSet) {
128+
if err := unmarshal(func(network, channel string) (Network, error) { return nil, nil }, p, raw); !errors.Is(err, ErrNetworkNotSet) {
129129
t.Fatalf("expected ErrNetworkNotSet, got %v", err)
130130
}
131131
}
@@ -135,7 +135,7 @@ func TestUnmarshal_ErrorCases(t *testing.T) {
135135
ser := TransactionSer{Network: "net", Namespace: ""}
136136
raw := m(ser)
137137
p := &Payload{Transient: map[string][]byte{}, TokenRequest: token.NewRequest(nil, ""), Envelope: &network.Envelope{}}
138-
if err := unmarshal(func(network, channel string) (*network.Network, error) { return nil, nil }, p, raw); !errors.Is(err, ErrNamespaceNotSet) {
138+
if err := unmarshal(func(network, channel string) (Network, error) { return nil, nil }, p, raw); !errors.Is(err, ErrNamespaceNotSet) {
139139
t.Fatalf("expected ErrNamespaceNotSet, got %v", err)
140140
}
141141
}
@@ -145,7 +145,7 @@ func TestUnmarshal_ErrorCases(t *testing.T) {
145145
ser := TransactionSer{Network: "net", Namespace: "ns", Transient: []byte{1, 2, 3}}
146146
raw := m(ser)
147147
p := &Payload{Transient: map[string][]byte{}, TokenRequest: token.NewRequest(nil, ""), Envelope: &network.Envelope{}}
148-
err := unmarshal(func(network, channel string) (*network.Network, error) { return nil, nil }, p, raw)
148+
err := unmarshal(func(network, channel string) (Network, error) { return nil, nil }, p, raw)
149149
if err == nil || !strings.Contains(err.Error(), "failed unmarshalling transient") {
150150
t.Fatalf("expected transient unmarshal error, got %v", err)
151151
}
@@ -156,7 +156,7 @@ func TestUnmarshal_ErrorCases(t *testing.T) {
156156
ser := TransactionSer{Network: "net", Namespace: "ns", TokenRequest: []byte{1, 2, 3}}
157157
raw := m(ser)
158158
p := &Payload{Transient: map[string][]byte{}, TokenRequest: token.NewRequest(nil, ""), Envelope: &network.Envelope{}}
159-
err := unmarshal(func(network, channel string) (*network.Network, error) { return nil, nil }, p, raw)
159+
err := unmarshal(func(network, channel string) (Network, error) { return nil, nil }, p, raw)
160160
if err == nil || !strings.Contains(err.Error(), "failed unmarshalling token request") {
161161
t.Fatalf("expected token request unmarshal error, got %v", err)
162162
}
@@ -168,7 +168,7 @@ func TestUnmarshal_ErrorCases(t *testing.T) {
168168
raw := m(ser)
169169
p := &Payload{Transient: map[string][]byte{}, TokenRequest: token.NewRequest(nil, ""), Envelope: nil}
170170
expErr := errors.New("no network")
171-
err := unmarshal(func(network, channel string) (*network.Network, error) { return nil, expErr }, p, raw)
171+
err := unmarshal(func(network, channel string) (Network, error) { return nil, expErr }, p, raw)
172172
if err == nil || !strings.Contains(err.Error(), "no network") {
173173
t.Fatalf("expected getNetwork error propagated, got %v", err)
174174
}

0 commit comments

Comments
 (0)