Skip to content

Commit c5aad51

Browse files
committed
remove some of the panics in the code, return an error instead
Signed-off-by: Angelo De Caro <adc@zurich.ibm.com>
1 parent 72bb066 commit c5aad51

File tree

17 files changed

+89
-47
lines changed

17 files changed

+89
-47
lines changed

integration/fabric/atsa/chaincode/views/seller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func (a *TransferView) Call(ctx view.Context) (interface{}, error) {
6666
)
6767
assert.NoError(err, "failed getting sender MSP-ID")
6868
recipientMSPID, err := ch.MSPManager().GetMSPIdentifier(
69-
fns.IdentityProvider().Identity(a.Recipient.UniqueID()),
69+
assert.ValidIdentity(fns.IdentityProvider().Identity(a.Recipient.UniqueID())),
7070
)
7171
assert.NoError(err, "failed getting recipient MSP-ID")
7272

platform/fabric/core/generic/chaincode/invoke.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,16 +193,16 @@ func (i *Invoke) WithContext(context context.Context) driver.ChaincodeInvocation
193193
return i
194194
}
195195

196-
func (i *Invoke) WithTransientEntry(k string, v interface{}) driver.ChaincodeInvocation {
196+
func (i *Invoke) WithTransientEntry(k string, v interface{}) (driver.ChaincodeInvocation, error) {
197197
if i.TransientMap == nil {
198198
i.TransientMap = map[string][]byte{}
199199
}
200200
b, err := i.toBytes(v)
201201
if err != nil {
202-
panic(err)
202+
return nil, errors.WithMessagef(err, "error converting transient entry to bytes")
203203
}
204204
i.TransientMap[k] = b
205-
return i
205+
return i, nil
206206
}
207207

208208
func (i *Invoke) WithEndorsersByMSPIDs(mspIDs ...string) driver.ChaincodeInvocation {

platform/fabric/core/generic/id/provider.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ package id
88

99
import (
1010
"github.com/hyperledger-labs/fabric-smart-client/platform/view/view"
11+
"github.com/pkg/errors"
1112
)
1213

1314
type EndpointService interface {
@@ -22,10 +23,10 @@ func NewProvider(endpointService EndpointService) (*provider, error) {
2223
return &provider{endpointService: endpointService}, nil
2324
}
2425

25-
func (p *provider) Identity(label string) view.Identity {
26+
func (p *provider) Identity(label string) (view.Identity, error) {
2627
id, err := p.endpointService.GetIdentity(label)
2728
if err != nil {
28-
panic(err)
29+
return nil, errors.WithMessagef(err, "failed getting identity [%s]", label)
2930
}
30-
return id
31+
return id, nil
3132
}

platform/fabric/core/generic/msp/driver/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ type DeserializerManager interface {
5151

5252
type Manager interface {
5353
AddDeserializer(deserializer Deserializer)
54-
AddMSP(name string, mspType string, enrollmentID string, idGetter driver.GetIdentityFunc)
54+
AddMSP(name string, mspType string, enrollmentID string, idGetter driver.GetIdentityFunc) error
5555
Config() Config
5656
DefaultMSP() string
5757
SignerService() SignerService

platform/fabric/core/generic/msp/idemix/provider.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func NewProvider(conf1 *m.MSPConfig, signerService mspdriver.SignerService, sigT
182182
case Any:
183183
verType = bccsp.BestEffort
184184
default:
185-
panic("invalid sig type")
185+
return nil, errors.Errorf("unknown verification type [%d]", sigType)
186186
}
187187
if verType == bccsp.BestEffort {
188188
sigType = bccsp.Standard
@@ -331,7 +331,7 @@ func (p *Provider) Identity(opts *driver.IdentityOptions) (view.Identity, []byte
331331
return nil, nil, err
332332
}
333333
default:
334-
panic("invalid sig type")
334+
return nil, nil, errors.Errorf("unsupported signing type [%d]", sigType)
335335
}
336336
return raw, infoRaw, nil
337337
}

platform/fabric/core/generic/msp/service.go

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ SPDX-License-Identifier: Apache-2.0
77
package msp
88

99
import (
10-
"fmt"
1110
"sync"
1211

1312
"github.com/hyperledger-labs/fabric-smart-client/platform/fabric/core/generic/msp/driver"
@@ -103,8 +102,7 @@ func (s *service) Config() driver.Config {
103102
}
104103

105104
func (s *service) DefaultMSP() string {
106-
// TODO implement me
107-
panic("implement me")
105+
return s.config.DefaultMSP()
108106
}
109107

110108
func (s *service) SignerService() driver.SignerService {
@@ -131,20 +129,23 @@ func (s *service) DefaultIdentity() view.Identity {
131129
return s.defaultIdentity
132130
}
133131

134-
func (s *service) AnonymousIdentity() view.Identity {
135-
id := s.Identity("idemix")
132+
func (s *service) AnonymousIdentity() (view.Identity, error) {
133+
id, err := s.Identity("idemix")
134+
if err != nil {
135+
return nil, errors.WithMessagef(err, "failed to get default anonymous identity labelled `idemix`")
136+
}
136137
if err := s.binderService.Bind(s.defaultViewIdentity, id); err != nil {
137-
panic(err)
138+
return nil, errors.WithMessagef(err, "failed to bind identity [%s] to default [%s]", id, s.defaultViewIdentity)
138139
}
139-
return id
140+
return id, nil
140141
}
141142

142-
func (s *service) Identity(label string) view.Identity {
143+
func (s *service) Identity(label string) (view.Identity, error) {
143144
id, err := s.GetIdentityByID(label)
144145
if err != nil {
145-
panic(err)
146+
return nil, errors.WithMessagef(err, "failed to get identity [%s]", label)
146147
}
147-
return id
148+
return id, nil
148149
}
149150

150151
func (s *service) IsMe(id view.Identity) bool {
@@ -253,7 +254,9 @@ func (s *service) RegisterIdemixMSP(id string, path string, mspID string) error
253254
}
254255

255256
s.deserializerManager.AddDeserializer(provider)
256-
s.AddMSP(id, IdemixMSP, provider.EnrollmentID(), idemix.NewIdentityCache(provider.Identity, s.cacheSize, nil).Identity)
257+
if err := s.AddMSP(id, IdemixMSP, provider.EnrollmentID(), idemix.NewIdentityCache(provider.Identity, s.cacheSize, nil).Identity); err != nil {
258+
return errors.Wrapf(err, "failed adding idemix msp [%s] to [%s]", id, path)
259+
}
257260
logger.Debugf("added IdemixMSP msp for id %s with cache of size %d", id+"@"+provider.EnrollmentID(), s.cacheSize)
258261
return nil
259262
}
@@ -268,7 +271,9 @@ func (s *service) RegisterX509MSP(id string, path string, mspID string) error {
268271
}
269272

270273
s.deserializerManager.AddDeserializer(provider)
271-
s.AddMSP(id, BccspMSP, provider.EnrollmentID(), provider.Identity)
274+
if err := s.AddMSP(id, BccspMSP, provider.EnrollmentID(), provider.Identity); err != nil {
275+
return errors.Wrapf(err, "failed adding bccsp msp [%s] to [%s]", id, path)
276+
}
272277

273278
return nil
274279
}
@@ -292,14 +297,14 @@ func (s *service) Refresh() error {
292297
return nil
293298
}
294299

295-
func (s *service) AddMSP(name string, mspType string, enrollmentID string, IdentityGetter fdriver.GetIdentityFunc) {
300+
func (s *service) AddMSP(name string, mspType string, enrollmentID string, IdentityGetter fdriver.GetIdentityFunc) error {
296301
if mspType == BccspMSP && s.binderService != nil {
297302
id, _, err := IdentityGetter(nil)
298303
if err != nil {
299-
panic(fmt.Sprintf("cannot get identity for [%s,%s,%s][%s]", name, mspType, enrollmentID, err))
304+
return errors.Wrapf(err, "cannot get identity for [%s,%s,%s][%s]", name, mspType, enrollmentID, err)
300305
}
301306
if err := s.binderService.Bind(s.defaultViewIdentity, id); err != nil {
302-
panic(fmt.Sprintf("cannot bind identity for [%s,%s,%s][%s]", name, mspType, enrollmentID, err))
307+
return errors.Wrapf(err, "cannot bind identity for [%s,%s,%s][%s]", name, mspType, enrollmentID, err)
303308
}
304309
}
305310

@@ -312,7 +317,7 @@ func (s *service) AddMSP(name string, mspType string, enrollmentID string, Ident
312317
if mspType == BccspMSP {
313318
id, _, err := IdentityGetter(nil)
314319
if err != nil {
315-
panic(fmt.Sprintf("cannot get identity for [%s,%s,%s][%s]", name, mspType, enrollmentID, err))
320+
return errors.Wrapf(err, "cannot get identity for [%s,%s,%s][%s]", name, mspType, enrollmentID, err)
316321
}
317322
s.bccspMspsByIdentity[id.String()] = msp
318323
logger.Debugf("add bccsp msp for id %s, identity [%s]", name+"@"+enrollmentID, id.String())
@@ -325,6 +330,7 @@ func (s *service) AddMSP(name string, mspType string, enrollmentID string, Ident
325330
s.mspsByEnrollmentID[enrollmentID] = msp
326331
}
327332
s.msps = append(s.msps, msp)
333+
return nil
328334
}
329335

330336
func (s *service) PutIdentityLoader(idType string, loader driver.IdentityLoader) {

platform/fabric/core/generic/transaction/transasction.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -547,16 +547,16 @@ func (t *Transaction) StoreTransient() error {
547547
return t.channel.MetadataService().StoreTransient(t.ID(), t.TTransient)
548548
}
549549

550-
func (t *Transaction) ProposalResponses() []driver.ProposalResponse {
550+
func (t *Transaction) ProposalResponses() ([]driver.ProposalResponse, error) {
551551
var res []driver.ProposalResponse
552552
for _, resp := range t.TProposalResponses {
553553
r, err := NewProposalResponseFromResponse(resp)
554554
if err != nil {
555-
panic(err)
555+
return nil, errors.Wrapf(err, "failed creating proposal response")
556556
}
557557
res = append(res, r)
558558
}
559-
return res
559+
return res, nil
560560
}
561561

562562
func (t *Transaction) ProposalResponse() ([]byte, error) {
@@ -574,7 +574,11 @@ func (t *Transaction) Envelope() (driver.Envelope, error) {
574574
logger.Errorf("signer not found for %s while creating tx envelope for ordering [%s]", signerID.UniqueID(), err)
575575
return nil, errors.Wrapf(err, "signer not found for %s while creating tx envelope for ordering", signerID.UniqueID())
576576
}
577-
env, err := fabricutils.CreateEndorserSignedTX(&signerWrapper{signerID, signer}, t.Proposal(), t.ProposalResponses()...)
577+
proposalResponses, err := t.ProposalResponses()
578+
if err != nil {
579+
return nil, errors.WithMessagef(err, "failed getting proposalResponses")
580+
}
581+
env, err := fabricutils.CreateEndorserSignedTX(&signerWrapper{signerID, signer}, t.Proposal(), proposalResponses...)
578582
if err != nil {
579583
return nil, errors.WithMessage(err, "could not assemble transaction")
580584
}
@@ -645,7 +649,7 @@ func (t *Transaction) getProposalResponse(signer SerializableSigner) (*pb.Propos
645649

646650
signedProposal := t.SignedProposal()
647651
if signedProposal == nil {
648-
panic("signed proposal must not be nil")
652+
return nil, errors.Errorf("signed proposal is nil")
649653
}
650654
response := &pb.Response{
651655
Status: 200,

platform/fabric/driver/chaincode.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ type ChaincodeInvocation interface {
2727

2828
Submit() (string, []byte, error)
2929

30-
WithTransientEntry(k string, v interface{}) ChaincodeInvocation
30+
WithTransientEntry(k string, v interface{}) (ChaincodeInvocation, error)
3131

3232
WithEndorsersByMSPIDs(mspIDs ...string) ChaincodeInvocation
3333

platform/fabric/driver/id.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,5 @@ import (
1414
type IdentityProvider interface {
1515
// Identity returns the Fabric identity bound to the passed label.
1616
// If not Fabric identity is associated to the label, it returns the the SFC identity bound to that label.
17-
Identity(label string) view.Identity
17+
Identity(label string) (view.Identity, error)
1818
}

platform/fabric/driver/membership.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type IdentityInfo struct {
2525

2626
type LocalMembership interface {
2727
DefaultIdentity() view.Identity
28-
AnonymousIdentity() view.Identity
28+
AnonymousIdentity() (view.Identity, error)
2929
IsMe(id view.Identity) bool
3030
DefaultSigningIdentity() SigningIdentity
3131
RegisterX509MSP(id string, path string, mspID string) error

0 commit comments

Comments
 (0)