diff --git a/internal/contracts/manager.go b/internal/contracts/manager.go index ab45cf18e..753ab7e54 100644 --- a/internal/contracts/manager.go +++ b/internal/contracts/manager.go @@ -160,7 +160,12 @@ func NewContractManager(ctx context.Context, ns string, di database.Plugin, bi b // cause recreation of all the listeners (noting that listeners that were specified to start // from latest, will start from the new latest rather than replaying from the block they // started from before they were deleted). - return cm, cm.verifyListeners(ctx) + err = cm.verifyListeners(ctx) + if err != nil { + return nil, err + } + + return cm, nil } func (cm *contractManager) Name() string { diff --git a/internal/contracts/manager_test.go b/internal/contracts/manager_test.go index d022d3157..e936fb28d 100644 --- a/internal/contracts/manager_test.go +++ b/internal/contracts/manager_test.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Kaleido, Inc. +// Copyright © 2024 Kaleido, Inc. // // SPDX-License-Identifier: Apache-2.0 // @@ -98,6 +98,33 @@ func TestName(t *testing.T) { assert.Equal(t, "ContractManager", cm.Name()) } +func TestNewContractManagerVerifyListenersFails(t *testing.T) { + mdi := &databasemocks.Plugin{} + mdm := &datamocks.Manager{} + mbm := &broadcastmocks.Manager{} + mpm := &privatemessagingmocks.Manager{} + mbp := &batchmocks.Manager{} + mim := &identitymanagermocks.Manager{} + mbi := &blockchainmocks.Plugin{} + mom := &operationmocks.Manager{} + txw := &txwritermocks.Writer{} + cmi := &cachemocks.Manager{} + msa := &syncasyncmocks.Bridge{} + + ctx := context.Background() + + cmi.On("GetCache", mock.Anything).Return(cache.NewUmanagedCache(ctx, 100, 5*time.Minute), nil) + txHelper, _ := txcommon.NewTransactionHelper(ctx, "ns1", mdi, mdm, cmi) + mbi.On("GetFFIParamValidator", mock.Anything).Return(nil, nil) + mom.On("RegisterHandler", mock.Anything, mock.Anything, mock.Anything) + mbi.On("Name").Return("mockblockchain").Maybe() + mdi.On("GetContractListeners", mock.Anything, "ns1", mock.Anything).Return(nil, nil, fmt.Errorf("KABOOM!")).Once() + + cm, err := NewContractManager(context.Background(), "ns1", mdi, mbi, mdm, mbm, mpm, mbp, mim, mom, txHelper, txw, msa, cmi) + assert.Nil(t, cm) + assert.NotNil(t, err) +} + func TestNewContractManagerFFISchemaLoaderFail(t *testing.T) { mdi := &databasemocks.Plugin{} mdm := &datamocks.Manager{} diff --git a/internal/definitions/sender.go b/internal/definitions/sender.go index 3d998c3a8..70f366409 100644 --- a/internal/definitions/sender.go +++ b/internal/definitions/sender.go @@ -1,4 +1,4 @@ -// Copyright © 2023 Kaleido, Inc. +// Copyright © 2024 Kaleido, Inc. // // SPDX-License-Identifier: Apache-2.0 // @@ -93,8 +93,12 @@ func NewDefinitionSender(ctx context.Context, ns *core.Namespace, multiparty boo tokenBroadcastNames: tokenBroadcastNames, } dh, err := newDefinitionHandler(ctx, ns, multiparty, di, bi, dx, dm, im, am, cm, reverseMap(tokenBroadcastNames)) + if err != nil { + return nil, nil, err + } + ds.handler = dh - return ds, dh, err + return ds, dh, nil } // reverseMap reverses the key/values of a given map diff --git a/internal/definitions/sender_test.go b/internal/definitions/sender_test.go index b7a8f4149..8e7cb08dc 100644 --- a/internal/definitions/sender_test.go +++ b/internal/definitions/sender_test.go @@ -1,4 +1,4 @@ -// Copyright © 2021 Kaleido, Inc. +// Copyright © 2024 Kaleido, Inc. // // SPDX-License-Identifier: Apache-2.0 // @@ -111,6 +111,26 @@ func TestName(t *testing.T) { assert.Equal(t, "DefinitionSender", ds.Name()) } +func TestNewDefinitionSenderHandlerThrows(t *testing.T) { + mdi := &databasemocks.Plugin{} + mbi := &blockchainmocks.Plugin{} + mdx := &dataexchangemocks.Plugin{} + mbm := &broadcastmocks.Manager{} + mim := &identitymanagermocks.Manager{} + mdm := &datamocks.Manager{} + mcm := &contractmocks.Manager{} + + tokenBroadcastNames := make(map[string]string) + tokenBroadcastNames["connector1"] = "remote1" + + ctx := context.Background() + ns := &core.Namespace{Name: "ns1", NetworkName: "ns1"} + ds, dh, err := NewDefinitionSender(ctx, ns, false, mdi, mbi, mdx, mbm, mim, mdm, nil, mcm, tokenBroadcastNames) + assert.Nil(t, ds) + assert.Nil(t, dh) + assert.NotNil(t, err) +} + func TestCreateDefinitionConfirm(t *testing.T) { ds := newTestDefinitionSender(t) defer ds.cleanup(t)