diff --git a/Makefile b/Makefile index 335fad1029..ca0595a6db 100644 --- a/Makefile +++ b/Makefile @@ -63,7 +63,8 @@ $(eval $(call makemock, internal/broadcast, Manager, broadcast $(eval $(call makemock, internal/privatemessaging, Manager, privatemessagingmocks)) $(eval $(call makemock, internal/shareddownload, Manager, shareddownloadmocks)) $(eval $(call makemock, internal/shareddownload, Callbacks, shareddownloadmocks)) -$(eval $(call makemock, internal/definitions, DefinitionHandler, definitionsmocks)) +$(eval $(call makemock, internal/defhandler, DefinitionHandler, defhandlermocks)) +$(eval $(call makemock, internal/defsender, Sender, defsendermocks)) $(eval $(call makemock, internal/events, EventManager, eventmocks)) $(eval $(call makemock, internal/networkmap, Manager, networkmapmocks)) $(eval $(call makemock, internal/assets, Manager, assetmocks)) diff --git a/internal/apiserver/route_post_new_datatype.go b/internal/apiserver/route_post_new_datatype.go index cb01697c20..9905982754 100644 --- a/internal/apiserver/route_post_new_datatype.go +++ b/internal/apiserver/route_post_new_datatype.go @@ -44,7 +44,7 @@ var postNewDatatype = &oapispec.Route{ JSONHandler: func(r *oapispec.APIRequest) (output interface{}, err error) { waitConfirm := strings.EqualFold(r.QP["confirm"], "true") r.SuccessStatus = syncRetcode(waitConfirm) - _, err = getOr(r.Ctx).Broadcast().BroadcastDatatype(r.Ctx, r.PP["ns"], r.Input.(*fftypes.Datatype), waitConfirm) + _, err = getOr(r.Ctx).DefinitionSender().BroadcastDatatype(r.Ctx, r.PP["ns"], r.Input.(*fftypes.Datatype), waitConfirm) return r.Input, err }, } diff --git a/internal/apiserver/route_post_new_datatype_test.go b/internal/apiserver/route_post_new_datatype_test.go index e20ce8ef9f..3e90373fca 100644 --- a/internal/apiserver/route_post_new_datatype_test.go +++ b/internal/apiserver/route_post_new_datatype_test.go @@ -22,7 +22,7 @@ import ( "net/http/httptest" "testing" - "github.com/hyperledger/firefly/mocks/broadcastmocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/pkg/fftypes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -30,8 +30,8 @@ import ( func TestPostNewDatatypes(t *testing.T) { o, r := newTestAPIServer() - mbm := &broadcastmocks.Manager{} - o.On("Broadcast").Return(mbm) + mds := &defsendermocks.Sender{} + o.On("DefinitionSender").Return(mds) input := fftypes.Datatype{} var buf bytes.Buffer json.NewEncoder(&buf).Encode(&input) @@ -39,7 +39,7 @@ func TestPostNewDatatypes(t *testing.T) { req.Header.Set("Content-Type", "application/json; charset=utf-8") res := httptest.NewRecorder() - mbm.On("BroadcastDatatype", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.Datatype"), false). + mds.On("BroadcastDatatype", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.Datatype"), false). Return(&fftypes.Message{}, nil) r.ServeHTTP(res, req) @@ -48,8 +48,8 @@ func TestPostNewDatatypes(t *testing.T) { func TestPostNewDatatypesSync(t *testing.T) { o, r := newTestAPIServer() - mbm := &broadcastmocks.Manager{} - o.On("Broadcast").Return(mbm) + mds := &defsendermocks.Sender{} + o.On("DefinitionSender").Return(mds) input := fftypes.Datatype{} var buf bytes.Buffer json.NewEncoder(&buf).Encode(&input) @@ -57,7 +57,7 @@ func TestPostNewDatatypesSync(t *testing.T) { req.Header.Set("Content-Type", "application/json; charset=utf-8") res := httptest.NewRecorder() - mbm.On("BroadcastDatatype", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.Datatype"), true). + mds.On("BroadcastDatatype", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.Datatype"), true). Return(&fftypes.Message{}, nil) r.ServeHTTP(res, req) diff --git a/internal/apiserver/route_post_new_namespace.go b/internal/apiserver/route_post_new_namespace.go index a59b323f88..2cbadb2a7d 100644 --- a/internal/apiserver/route_post_new_namespace.go +++ b/internal/apiserver/route_post_new_namespace.go @@ -40,7 +40,7 @@ var postNewNamespace = &oapispec.Route{ JSONHandler: func(r *oapispec.APIRequest) (output interface{}, err error) { waitConfirm := strings.EqualFold(r.QP["confirm"], "true") r.SuccessStatus = syncRetcode(waitConfirm) - _, err = getOr(r.Ctx).Broadcast().BroadcastNamespace(r.Ctx, r.Input.(*fftypes.Namespace), waitConfirm) + _, err = getOr(r.Ctx).DefinitionSender().BroadcastNamespace(r.Ctx, r.Input.(*fftypes.Namespace), waitConfirm) return r.Input, err }, } diff --git a/internal/apiserver/route_post_new_namespace_test.go b/internal/apiserver/route_post_new_namespace_test.go index 2e5af0ef04..a1733533a0 100644 --- a/internal/apiserver/route_post_new_namespace_test.go +++ b/internal/apiserver/route_post_new_namespace_test.go @@ -22,7 +22,7 @@ import ( "net/http/httptest" "testing" - "github.com/hyperledger/firefly/mocks/broadcastmocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/pkg/fftypes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -30,8 +30,8 @@ import ( func TestPostNewNamespace(t *testing.T) { o, r := newTestAPIServer() - mbm := &broadcastmocks.Manager{} - o.On("Broadcast").Return(mbm) + mds := &defsendermocks.Sender{} + o.On("DefinitionSender").Return(mds) input := fftypes.Namespace{} var buf bytes.Buffer json.NewEncoder(&buf).Encode(&input) @@ -39,7 +39,7 @@ func TestPostNewNamespace(t *testing.T) { req.Header.Set("Content-Type", "application/json; charset=utf-8") res := httptest.NewRecorder() - mbm.On("BroadcastNamespace", mock.Anything, mock.AnythingOfType("*fftypes.Namespace"), false). + mds.On("BroadcastNamespace", mock.Anything, mock.AnythingOfType("*fftypes.Namespace"), false). Return(&fftypes.Message{}, nil) r.ServeHTTP(res, req) @@ -48,8 +48,8 @@ func TestPostNewNamespace(t *testing.T) { func TestPostNewNamespaceSync(t *testing.T) { o, r := newTestAPIServer() - mbm := &broadcastmocks.Manager{} - o.On("Broadcast").Return(mbm) + mds := &defsendermocks.Sender{} + o.On("DefinitionSender").Return(mds) input := fftypes.Namespace{} var buf bytes.Buffer json.NewEncoder(&buf).Encode(&input) @@ -57,7 +57,7 @@ func TestPostNewNamespaceSync(t *testing.T) { req.Header.Set("Content-Type", "application/json; charset=utf-8") res := httptest.NewRecorder() - mbm.On("BroadcastNamespace", mock.Anything, mock.AnythingOfType("*fftypes.Namespace"), true). + mds.On("BroadcastNamespace", mock.Anything, mock.AnythingOfType("*fftypes.Namespace"), true). Return(&fftypes.Message{}, nil) r.ServeHTTP(res, req) diff --git a/internal/broadcast/manager.go b/internal/broadcast/manager.go index 6db6ee2b2e..c918b1bbd9 100644 --- a/internal/broadcast/manager.go +++ b/internal/broadcast/manager.go @@ -45,13 +45,7 @@ type Manager interface { fftypes.Named NewBroadcast(ns string, in *fftypes.MessageInOut) sysmessaging.MessageSender - BroadcastDatatype(ctx context.Context, ns string, datatype *fftypes.Datatype, waitConfirm bool) (msg *fftypes.Message, err error) - BroadcastNamespace(ctx context.Context, ns *fftypes.Namespace, waitConfirm bool) (msg *fftypes.Message, err error) BroadcastMessage(ctx context.Context, ns string, in *fftypes.MessageInOut, waitConfirm bool) (out *fftypes.Message, err error) - BroadcastDefinitionAsNode(ctx context.Context, ns string, def fftypes.Definition, tag string, waitConfirm bool) (msg *fftypes.Message, err error) - BroadcastDefinition(ctx context.Context, ns string, def fftypes.Definition, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (msg *fftypes.Message, err error) - BroadcastIdentityClaim(ctx context.Context, ns string, def *fftypes.IdentityClaim, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (msg *fftypes.Message, err error) - BroadcastTokenPool(ctx context.Context, ns string, pool *fftypes.TokenPoolAnnouncement, waitConfirm bool) (msg *fftypes.Message, err error) Start() error WaitStop() diff --git a/internal/broadcast/message_test.go b/internal/broadcast/message_test.go index 949ca7a82c..224e2d3f79 100644 --- a/internal/broadcast/message_test.go +++ b/internal/broadcast/message_test.go @@ -62,6 +62,37 @@ func TestBroadcastMessageOk(t *testing.T) { mdm.AssertExpectations(t) } +func TestBroadcastMessageWriteFail(t *testing.T) { + bm, cancel := newTestBroadcastWithMetrics(t) + defer cancel() + mdm := bm.data.(*datamocks.Manager) + mim := bm.identity.(*identitymanagermocks.Manager) + + ctx := context.Background() + mdm.On("ResolveInlineData", ctx, mock.Anything).Return(nil) + mdm.On("WriteNewMessage", mock.Anything, mock.Anything, mock.Anything).Return(fmt.Errorf("pop")) + mim.On("ResolveInputSigningIdentity", ctx, "ns1", mock.Anything).Return(nil) + + msg, err := bm.BroadcastMessage(ctx, "ns1", &fftypes.MessageInOut{ + Message: fftypes.Message{ + Header: fftypes.MessageHeader{ + SignerRef: fftypes.SignerRef{ + Author: "did:firefly:org/abcd", + Key: "0x12345", + }, + }, + }, + InlineData: fftypes.InlineData{ + {Value: fftypes.JSONAnyPtr(`{"hello": "world"}`)}, + }, + }, false) + assert.EqualError(t, err, "pop") + assert.Equal(t, "ns1", msg.Header.Namespace) + + mim.AssertExpectations(t) + mdm.AssertExpectations(t) +} + func TestBroadcastMessageWaitConfirmOk(t *testing.T) { bm, cancel := newTestBroadcast(t) defer cancel() diff --git a/internal/contracts/manager.go b/internal/contracts/manager.go index 6702d38a9a..c6f0dd868a 100644 --- a/internal/contracts/manager.go +++ b/internal/contracts/manager.go @@ -21,8 +21,8 @@ import ( "fmt" "strings" - "github.com/hyperledger/firefly/internal/broadcast" "github.com/hyperledger/firefly/internal/coremsgs" + "github.com/hyperledger/firefly/internal/defsender" "github.com/hyperledger/firefly/internal/identity" "github.com/hyperledger/firefly/internal/operations" "github.com/hyperledger/firefly/internal/syncasync" @@ -69,7 +69,7 @@ type Manager interface { type contractManager struct { database database.Plugin txHelper txcommon.Helper - broadcast broadcast.Manager + defsender defsender.Sender identity identity.Manager blockchain blockchain.Plugin ffiParamValidator fftypes.FFIParamValidator @@ -77,8 +77,8 @@ type contractManager struct { syncasync syncasync.Bridge } -func NewContractManager(ctx context.Context, di database.Plugin, bm broadcast.Manager, im identity.Manager, bi blockchain.Plugin, om operations.Manager, txHelper txcommon.Helper, sa syncasync.Bridge) (Manager, error) { - if di == nil || bm == nil || im == nil || bi == nil || om == nil || txHelper == nil || sa == nil { +func NewContractManager(ctx context.Context, di database.Plugin, ds defsender.Sender, im identity.Manager, bi blockchain.Plugin, om operations.Manager, txHelper txcommon.Helper, sa syncasync.Bridge) (Manager, error) { + if di == nil || ds == nil || im == nil || bi == nil || om == nil || txHelper == nil || sa == nil { return nil, i18n.NewError(ctx, coremsgs.MsgInitializationNilDepError) } v, err := bi.GetFFIParamValidator(ctx) @@ -89,7 +89,7 @@ func NewContractManager(ctx context.Context, di database.Plugin, bm broadcast.Ma cm := &contractManager{ database: di, txHelper: txHelper, - broadcast: bm, + defsender: ds, identity: im, blockchain: bi, ffiParamValidator: v, @@ -136,7 +136,7 @@ func (cm *contractManager) BroadcastFFI(ctx context.Context, ns string, ffi *fft } output = ffi - msg, err := cm.broadcast.BroadcastDefinitionAsNode(ctx, ns, ffi, fftypes.SystemTagDefineFFI, waitConfirm) + msg, err := cm.defsender.BroadcastDefinitionAsNode(ctx, ns, ffi, fftypes.SystemTagDefineFFI, waitConfirm) if err != nil { return nil, err } @@ -376,7 +376,7 @@ func (cm *contractManager) BroadcastContractAPI(ctx context.Context, httpServerU return nil, err } - msg, err := cm.broadcast.BroadcastDefinitionAsNode(ctx, ns, api, fftypes.SystemTagDefineContractAPI, waitConfirm) + msg, err := cm.defsender.BroadcastDefinitionAsNode(ctx, ns, api, fftypes.SystemTagDefineContractAPI, waitConfirm) if err != nil { return nil, err } diff --git a/internal/contracts/manager_test.go b/internal/contracts/manager_test.go index 1e1896f769..34a3427ba6 100644 --- a/internal/contracts/manager_test.go +++ b/internal/contracts/manager_test.go @@ -26,9 +26,9 @@ import ( "github.com/hyperledger/firefly/internal/syncasync" "github.com/hyperledger/firefly/internal/txcommon" "github.com/hyperledger/firefly/mocks/blockchainmocks" - "github.com/hyperledger/firefly/mocks/broadcastmocks" "github.com/hyperledger/firefly/mocks/databasemocks" "github.com/hyperledger/firefly/mocks/datamocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/mocks/operationmocks" "github.com/hyperledger/firefly/mocks/syncasyncmocks" @@ -43,7 +43,7 @@ import ( func newTestContractManager() *contractManager { mdi := &databasemocks.Plugin{} mdm := &datamocks.Manager{} - mbm := &broadcastmocks.Manager{} + mds := &defsendermocks.Sender{} mim := &identitymanagermocks.Manager{} mbi := &blockchainmocks.Plugin{} mom := &operationmocks.Manager{} @@ -60,7 +60,7 @@ func newTestContractManager() *contractManager { a[1].(func(context.Context) error)(a[0].(context.Context)), } } - cm, _ := NewContractManager(context.Background(), mdi, mbm, mim, mbi, mom, txHelper, msa) + cm, _ := NewContractManager(context.Background(), mdi, mds, mim, mbi, mom, txHelper, msa) cm.(*contractManager).txHelper = &txcommonmocks.Helper{} return cm.(*contractManager) } @@ -78,21 +78,21 @@ func TestName(t *testing.T) { func TestNewContractManagerFFISchemaLoaderFail(t *testing.T) { mdi := &databasemocks.Plugin{} mdm := &datamocks.Manager{} - mbm := &broadcastmocks.Manager{} + mds := &defsendermocks.Sender{} mim := &identitymanagermocks.Manager{} mbi := &blockchainmocks.Plugin{} mom := &operationmocks.Manager{} txHelper := txcommon.NewTransactionHelper(mdi, mdm) msa := &syncasyncmocks.Bridge{} mbi.On("GetFFIParamValidator", mock.Anything).Return(nil, fmt.Errorf("pop")) - _, err := NewContractManager(context.Background(), mdi, mbm, mim, mbi, mom, txHelper, msa) + _, err := NewContractManager(context.Background(), mdi, mds, mim, mbi, mom, txHelper, msa) assert.Regexp(t, "pop", err) } func TestNewContractManagerFFISchemaLoader(t *testing.T) { mdi := &databasemocks.Plugin{} mdm := &datamocks.Manager{} - mbm := &broadcastmocks.Manager{} + mds := &defsendermocks.Sender{} mim := &identitymanagermocks.Manager{} mbi := &blockchainmocks.Plugin{} mom := &operationmocks.Manager{} @@ -100,7 +100,7 @@ func TestNewContractManagerFFISchemaLoader(t *testing.T) { msa := &syncasyncmocks.Bridge{} mbi.On("GetFFIParamValidator", mock.Anything).Return(ðereum.FFIParamValidator{}, nil) mom.On("RegisterHandler", mock.Anything, mock.Anything, mock.Anything) - _, err := NewContractManager(context.Background(), mdi, mbm, mim, mbi, mom, txHelper, msa) + _, err := NewContractManager(context.Background(), mdi, mds, mim, mbi, mom, txHelper, msa) assert.NoError(t, err) } @@ -108,7 +108,7 @@ func TestBroadcastFFI(t *testing.T) { cm := newTestContractManager() mdb := cm.database.(*databasemocks.Plugin) mim := cm.identity.(*identitymanagermocks.Manager) - mbm := cm.broadcast.(*broadcastmocks.Manager) + mds := cm.defsender.(*defsendermocks.Sender) mdb.On("GetFFI", mock.Anything, "ns1", "test", "1.0.0").Return(nil, nil) mim.On("GetOrgKey", mock.Anything).Return("key", nil) @@ -118,7 +118,7 @@ func TestBroadcastFFI(t *testing.T) { ID: fftypes.NewUUID(), }, } - mbm.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.FFI"), fftypes.SystemTagDefineFFI, false).Return(msg, nil) + mds.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.FFI"), fftypes.SystemTagDefineFFI, false).Return(msg, nil) ffi := &fftypes.FFI{ Name: "test", Version: "1.0.0", @@ -143,7 +143,7 @@ func TestBroadcastFFI(t *testing.T) { func TestBroadcastFFIInvalid(t *testing.T) { cm := newTestContractManager() mdb := cm.database.(*databasemocks.Plugin) - mbm := cm.broadcast.(*broadcastmocks.Manager) + mds := cm.defsender.(*defsendermocks.Sender) mdb.On("GetFFI", mock.Anything, "ns1", "test", "1.0.0").Return(nil, nil) @@ -152,7 +152,7 @@ func TestBroadcastFFIInvalid(t *testing.T) { ID: fftypes.NewUUID(), }, } - mbm.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.FFI"), fftypes.SystemTagDefineFFI, false).Return(msg, nil) + mds.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.FFI"), fftypes.SystemTagDefineFFI, false).Return(msg, nil) ffi := &fftypes.FFI{ Name: "test", Version: "1.0.0", @@ -176,7 +176,7 @@ func TestBroadcastFFIInvalid(t *testing.T) { func TestBroadcastFFIExists(t *testing.T) { cm := newTestContractManager() mdb := cm.database.(*databasemocks.Plugin) - mbm := cm.broadcast.(*broadcastmocks.Manager) + mds := &defsendermocks.Sender{} mdb.On("GetFFI", mock.Anything, "ns1", "test", "1.0.0").Return(&fftypes.FFI{}, nil) @@ -185,7 +185,7 @@ func TestBroadcastFFIExists(t *testing.T) { ID: fftypes.NewUUID(), }, } - mbm.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.FFI"), fftypes.SystemTagDefineFFI, false).Return(msg, nil) + mds.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.FFI"), fftypes.SystemTagDefineFFI, false).Return(msg, nil) ffi := &fftypes.FFI{ Name: "test", Version: "1.0.0", @@ -198,13 +198,13 @@ func TestBroadcastFFIExists(t *testing.T) { func TestBroadcastFFIFail(t *testing.T) { cm := newTestContractManager() mdb := cm.database.(*databasemocks.Plugin) - mbm := cm.broadcast.(*broadcastmocks.Manager) + mds := cm.defsender.(*defsendermocks.Sender) mim := cm.identity.(*identitymanagermocks.Manager) mdb.On("GetFFI", mock.Anything, "ns1", "test", "1.0.0").Return(nil, nil) mim.On("GetOrgKey", mock.Anything).Return("key", nil) - mbm.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.FFI"), fftypes.SystemTagDefineFFI, false).Return(nil, fmt.Errorf("pop")) + mds.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.FFI"), fftypes.SystemTagDefineFFI, false).Return(nil, fmt.Errorf("pop")) ffi := &fftypes.FFI{ Name: "test", Version: "1.0.0", @@ -1933,7 +1933,7 @@ func TestBroadcastContractAPI(t *testing.T) { cm := newTestContractManager() mbi := cm.blockchain.(*blockchainmocks.Plugin) mdb := cm.database.(*databasemocks.Plugin) - mbm := cm.broadcast.(*broadcastmocks.Manager) + mds := cm.defsender.(*defsendermocks.Sender) msg := &fftypes.Message{ Header: fftypes.MessageHeader{ @@ -1953,7 +1953,7 @@ func TestBroadcastContractAPI(t *testing.T) { mbi.On("NormalizeContractLocation", context.Background(), api.Location).Return(api.Location, nil) mdb.On("GetContractAPIByName", mock.Anything, api.Namespace, api.Name).Return(nil, nil) mdb.On("GetFFIByID", mock.Anything, api.Interface.ID).Return(&fftypes.FFI{}, nil) - mbm.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.ContractAPI"), fftypes.SystemTagDefineContractAPI, false).Return(msg, nil) + mds.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.ContractAPI"), fftypes.SystemTagDefineContractAPI, false).Return(msg, nil) api, err := cm.BroadcastContractAPI(context.Background(), "http://localhost/api", "ns1", api, false) @@ -1964,7 +1964,7 @@ func TestBroadcastContractAPI(t *testing.T) { mbi.AssertExpectations(t) mdb.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestBroadcastContractAPIBadLocation(t *testing.T) { @@ -1994,7 +1994,7 @@ func TestBroadcastContractAPIExisting(t *testing.T) { cm := newTestContractManager() mbi := cm.blockchain.(*blockchainmocks.Plugin) mdb := cm.database.(*databasemocks.Plugin) - mbm := cm.broadcast.(*broadcastmocks.Manager) + mds := cm.defsender.(*defsendermocks.Sender) msg := &fftypes.Message{ Header: fftypes.MessageHeader{ @@ -2024,7 +2024,7 @@ func TestBroadcastContractAPIExisting(t *testing.T) { mbi.On("NormalizeContractLocation", context.Background(), api.Location).Return(api.Location, nil) mdb.On("GetContractAPIByName", mock.Anything, api.Namespace, api.Name).Return(existing, nil) mdb.On("GetFFIByID", mock.Anything, api.Interface.ID).Return(&fftypes.FFI{}, nil) - mbm.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.ContractAPI"), fftypes.SystemTagDefineContractAPI, false).Return(msg, nil) + mds.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.ContractAPI"), fftypes.SystemTagDefineContractAPI, false).Return(msg, nil) _, err := cm.BroadcastContractAPI(context.Background(), "http://localhost/api", "ns1", api, false) @@ -2032,7 +2032,7 @@ func TestBroadcastContractAPIExisting(t *testing.T) { mbi.AssertExpectations(t) mdb.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestBroadcastContractAPICannotChangeLocation(t *testing.T) { @@ -2075,7 +2075,7 @@ func TestBroadcastContractAPIInterfaceName(t *testing.T) { cm := newTestContractManager() mbi := cm.blockchain.(*blockchainmocks.Plugin) mdb := cm.database.(*databasemocks.Plugin) - mbm := cm.broadcast.(*broadcastmocks.Manager) + mds := cm.defsender.(*defsendermocks.Sender) msg := &fftypes.Message{ Header: fftypes.MessageHeader{ @@ -2097,7 +2097,7 @@ func TestBroadcastContractAPIInterfaceName(t *testing.T) { mbi.On("NormalizeContractLocation", context.Background(), api.Location).Return(api.Location, nil) mdb.On("GetContractAPIByName", mock.Anything, api.Namespace, api.Name).Return(nil, nil) mdb.On("GetFFI", mock.Anything, "ns1", "my-ffi", "1").Return(&fftypes.FFI{ID: interfaceID}, nil) - mbm.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.ContractAPI"), fftypes.SystemTagDefineContractAPI, false).Return(msg, nil) + mds.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.ContractAPI"), fftypes.SystemTagDefineContractAPI, false).Return(msg, nil) _, err := cm.BroadcastContractAPI(context.Background(), "http://localhost/api", "ns1", api, false) @@ -2106,14 +2106,14 @@ func TestBroadcastContractAPIInterfaceName(t *testing.T) { mbi.AssertExpectations(t) mdb.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestBroadcastContractAPIFail(t *testing.T) { cm := newTestContractManager() mbi := cm.blockchain.(*blockchainmocks.Plugin) mdb := cm.database.(*databasemocks.Plugin) - mbm := cm.broadcast.(*broadcastmocks.Manager) + mds := cm.defsender.(*defsendermocks.Sender) api := &fftypes.ContractAPI{ ID: fftypes.NewUUID(), @@ -2128,7 +2128,7 @@ func TestBroadcastContractAPIFail(t *testing.T) { mbi.On("NormalizeContractLocation", context.Background(), api.Location).Return(api.Location, nil) mdb.On("GetContractAPIByName", mock.Anything, api.Namespace, api.Name).Return(nil, nil) mdb.On("GetFFIByID", mock.Anything, api.Interface.ID).Return(&fftypes.FFI{}, nil) - mbm.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.ContractAPI"), fftypes.SystemTagDefineContractAPI, false).Return(nil, fmt.Errorf("pop")) + mds.On("BroadcastDefinitionAsNode", mock.Anything, "ns1", mock.AnythingOfType("*fftypes.ContractAPI"), fftypes.SystemTagDefineContractAPI, false).Return(nil, fmt.Errorf("pop")) _, err := cm.BroadcastContractAPI(context.Background(), "http://localhost/api", "ns1", api, false) @@ -2136,7 +2136,7 @@ func TestBroadcastContractAPIFail(t *testing.T) { mbi.AssertExpectations(t) mdb.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestBroadcastContractAPINoInterface(t *testing.T) { @@ -2331,7 +2331,7 @@ func TestCheckParamSchemaCompileFail(t *testing.T) { func TestAddJSONSchemaExtension(t *testing.T) { cm := &contractManager{ database: &databasemocks.Plugin{}, - broadcast: &broadcastmocks.Manager{}, + defsender: &defsendermocks.Sender{}, identity: &identitymanagermocks.Manager{}, blockchain: &blockchainmocks.Plugin{}, ffiParamValidator: &MockFFIParamValidator{}, diff --git a/internal/definitions/definition_handler_contracts.go b/internal/defhandler/contracts.go similarity index 99% rename from internal/definitions/definition_handler_contracts.go rename to internal/defhandler/contracts.go index 72f850cad1..e74df32dde 100644 --- a/internal/definitions/definition_handler_contracts.go +++ b/internal/defhandler/contracts.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_contracts_test.go b/internal/defhandler/contracts_test.go similarity index 99% rename from internal/definitions/definition_handler_contracts_test.go rename to internal/defhandler/contracts_test.go index cfd55c94c3..6ae1d3b93c 100644 --- a/internal/definitions/definition_handler_contracts_test.go +++ b/internal/defhandler/contracts_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_datatype.go b/internal/defhandler/datatype.go similarity index 99% rename from internal/definitions/definition_handler_datatype.go rename to internal/defhandler/datatype.go index 891e4d0f99..9b6615cad7 100644 --- a/internal/definitions/definition_handler_datatype.go +++ b/internal/defhandler/datatype.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_datatype_test.go b/internal/defhandler/datatype_test.go similarity index 99% rename from internal/definitions/definition_handler_datatype_test.go rename to internal/defhandler/datatype_test.go index 7719dc598d..3577613ddd 100644 --- a/internal/definitions/definition_handler_datatype_test.go +++ b/internal/defhandler/datatype_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler.go b/internal/defhandler/handler.go similarity index 99% rename from internal/definitions/definition_handler.go rename to internal/defhandler/handler.go index 59fcd3ccfa..1adf4c28e7 100644 --- a/internal/definitions/definition_handler.go +++ b/internal/defhandler/handler.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_test.go b/internal/defhandler/handler_test.go similarity index 99% rename from internal/definitions/definition_handler_test.go rename to internal/defhandler/handler_test.go index f9cff37598..86dea5f54c 100644 --- a/internal/definitions/definition_handler_test.go +++ b/internal/defhandler/handler_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_identity_claim.go b/internal/defhandler/identity_claim.go similarity index 99% rename from internal/definitions/definition_handler_identity_claim.go rename to internal/defhandler/identity_claim.go index c1f21a2d07..bdd8547c7a 100644 --- a/internal/definitions/definition_handler_identity_claim.go +++ b/internal/defhandler/identity_claim.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_identity_claim_test.go b/internal/defhandler/identity_claim_test.go similarity index 99% rename from internal/definitions/definition_handler_identity_claim_test.go rename to internal/defhandler/identity_claim_test.go index 9b27312dc9..bfe89096de 100644 --- a/internal/definitions/definition_handler_identity_claim_test.go +++ b/internal/defhandler/identity_claim_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_identity_update.go b/internal/defhandler/identity_update.go similarity index 99% rename from internal/definitions/definition_handler_identity_update.go rename to internal/defhandler/identity_update.go index 1cc175ddec..8530ac30a5 100644 --- a/internal/definitions/definition_handler_identity_update.go +++ b/internal/defhandler/identity_update.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_identity_update_test.go b/internal/defhandler/identity_update_test.go similarity index 99% rename from internal/definitions/definition_handler_identity_update_test.go rename to internal/defhandler/identity_update_test.go index fbabc23147..0ea7eaf4f2 100644 --- a/internal/definitions/definition_handler_identity_update_test.go +++ b/internal/defhandler/identity_update_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_identity_verification.go b/internal/defhandler/identity_verification.go similarity index 99% rename from internal/definitions/definition_handler_identity_verification.go rename to internal/defhandler/identity_verification.go index 90c979200e..c951d3eaf6 100644 --- a/internal/definitions/definition_handler_identity_verification.go +++ b/internal/defhandler/identity_verification.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_identity_verification_test.go b/internal/defhandler/identity_verification_test.go similarity index 99% rename from internal/definitions/definition_handler_identity_verification_test.go rename to internal/defhandler/identity_verification_test.go index b655c75ef4..b135317040 100644 --- a/internal/definitions/definition_handler_identity_verification_test.go +++ b/internal/defhandler/identity_verification_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_namespace.go b/internal/defhandler/namespace.go similarity index 99% rename from internal/definitions/definition_handler_namespace.go rename to internal/defhandler/namespace.go index 4854241c7a..25278b61d3 100644 --- a/internal/definitions/definition_handler_namespace.go +++ b/internal/defhandler/namespace.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_namespace_test.go b/internal/defhandler/namespace_test.go similarity index 99% rename from internal/definitions/definition_handler_namespace_test.go rename to internal/defhandler/namespace_test.go index dd59cbcba9..a479bcb118 100644 --- a/internal/definitions/definition_handler_namespace_test.go +++ b/internal/defhandler/namespace_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_network_node.go b/internal/defhandler/network_node.go similarity index 98% rename from internal/definitions/definition_handler_network_node.go rename to internal/defhandler/network_node.go index 5645e166ac..30737dd801 100644 --- a/internal/definitions/definition_handler_network_node.go +++ b/internal/defhandler/network_node.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_network_node_test.go b/internal/defhandler/network_node_test.go similarity index 99% rename from internal/definitions/definition_handler_network_node_test.go rename to internal/defhandler/network_node_test.go index e1b405dd90..660e1e6ae9 100644 --- a/internal/definitions/definition_handler_network_node_test.go +++ b/internal/defhandler/network_node_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_network_org.go b/internal/defhandler/network_org.go similarity index 98% rename from internal/definitions/definition_handler_network_org.go rename to internal/defhandler/network_org.go index 540e4bdb5c..96cfe21c67 100644 --- a/internal/definitions/definition_handler_network_org.go +++ b/internal/defhandler/network_org.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_network_org_test.go b/internal/defhandler/network_org_test.go similarity index 99% rename from internal/definitions/definition_handler_network_org_test.go rename to internal/defhandler/network_org_test.go index bb2c9902b2..be7e66d3b5 100644 --- a/internal/definitions/definition_handler_network_org_test.go +++ b/internal/defhandler/network_org_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_tokenpool.go b/internal/defhandler/tokenpool.go similarity index 99% rename from internal/definitions/definition_handler_tokenpool.go rename to internal/defhandler/tokenpool.go index 1cdccc020e..a355b16836 100644 --- a/internal/definitions/definition_handler_tokenpool.go +++ b/internal/defhandler/tokenpool.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/definitions/definition_handler_tokenpool_test.go b/internal/defhandler/tokenpool_test.go similarity index 99% rename from internal/definitions/definition_handler_tokenpool_test.go rename to internal/defhandler/tokenpool_test.go index 9962152017..d6eba0644e 100644 --- a/internal/definitions/definition_handler_tokenpool_test.go +++ b/internal/defhandler/tokenpool_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package definitions +package defhandler import ( "context" diff --git a/internal/broadcast/datatype.go b/internal/defsender/datatype.go similarity index 92% rename from internal/broadcast/datatype.go rename to internal/defsender/datatype.go index 7246423b0f..190b20ce42 100644 --- a/internal/broadcast/datatype.go +++ b/internal/defsender/datatype.go @@ -1,4 +1,4 @@ -// Copyright © 2021 Kaleido, Inc. +// Copyright © 2022 Kaleido, Inc. // // SPDX-License-Identifier: Apache-2.0 // @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package broadcast +package defsender import ( "context" @@ -22,7 +22,7 @@ import ( "github.com/hyperledger/firefly/pkg/fftypes" ) -func (bm *broadcastManager) BroadcastDatatype(ctx context.Context, ns string, datatype *fftypes.Datatype, waitConfirm bool) (*fftypes.Message, error) { +func (bm *definitionSender) BroadcastDatatype(ctx context.Context, ns string, datatype *fftypes.Datatype, waitConfirm bool) (*fftypes.Message, error) { // Validate the input data definition data datatype.ID = fftypes.NewUUID() diff --git a/internal/broadcast/datatype_test.go b/internal/defsender/datatype_test.go similarity index 59% rename from internal/broadcast/datatype_test.go rename to internal/defsender/datatype_test.go index f1b8bdc2df..34ea127c60 100644 --- a/internal/broadcast/datatype_test.go +++ b/internal/defsender/datatype_test.go @@ -14,37 +14,37 @@ // See the License for the specific language governing permissions and // limitations under the License. -package broadcast +package defsender import ( "context" "fmt" "testing" - "github.com/hyperledger/firefly/mocks/databasemocks" + "github.com/hyperledger/firefly/mocks/broadcastmocks" "github.com/hyperledger/firefly/mocks/datamocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" - "github.com/hyperledger/firefly/pkg/database" + "github.com/hyperledger/firefly/mocks/sysmessagingmocks" "github.com/hyperledger/firefly/pkg/fftypes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) func TestBroadcastDatatypeBadType(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - _, err := bm.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ + _, err := ds.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ Validator: fftypes.ValidatorType("wrong"), }, false) assert.Regexp(t, "FF00111.*validator", err) } func TestBroadcastDatatypeNSGetFail(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdm := bm.data.(*datamocks.Manager) + mdm := ds.data.(*datamocks.Manager) mdm.On("VerifyNamespaceExists", mock.Anything, "ns1").Return(fmt.Errorf("pop")) - _, err := bm.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ + _, err := ds.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ Name: "name1", Namespace: "ns1", Version: "0.0.1", @@ -54,14 +54,14 @@ func TestBroadcastDatatypeNSGetFail(t *testing.T) { } func TestBroadcastDatatypeBadValue(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdm := bm.data.(*datamocks.Manager) + mdm := ds.data.(*datamocks.Manager) mdm.On("VerifyNamespaceExists", mock.Anything, "ns1").Return(nil) mdm.On("CheckDatatype", mock.Anything, "ns1", mock.Anything).Return(nil) - mim := bm.identity.(*identitymanagermocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) mim.On("ResolveInputSigningIdentity", mock.Anything, "ns1", mock.Anything).Return(nil) - _, err := bm.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ + _, err := ds.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ Namespace: "ns1", Name: "ent1", Version: "0.0.1", @@ -70,42 +70,17 @@ func TestBroadcastDatatypeBadValue(t *testing.T) { assert.Regexp(t, "FF10137.*value", err) } -func TestBroadcastUpsertFail(t *testing.T) { - bm, cancel := newTestBroadcast(t) - defer cancel() - mdm := bm.data.(*datamocks.Manager) - mim := bm.identity.(*identitymanagermocks.Manager) - - mim.On("ResolveInputSigningIdentity", mock.Anything, "ns1", mock.Anything).Return(nil) - mdm.On("WriteNewMessage", mock.Anything, mock.Anything, mock.Anything).Return(fmt.Errorf("pop")) - mdm.On("VerifyNamespaceExists", mock.Anything, "ns1").Return(nil) - mdm.On("CheckDatatype", mock.Anything, "ns1", mock.Anything).Return(nil) - - _, err := bm.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ - Namespace: "ns1", - Name: "ent1", - Version: "0.0.1", - Value: fftypes.JSONAnyPtr(`{"some": "data"}`), - }, false) - assert.EqualError(t, err, "pop") - - mim.AssertExpectations(t) - mdm.AssertExpectations(t) -} - func TestBroadcastDatatypeInvalid(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdi := bm.database.(*databasemocks.Plugin) - mdm := bm.data.(*datamocks.Manager) - mim := bm.identity.(*identitymanagermocks.Manager) + mdm := ds.data.(*datamocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) mim.On("ResolveInputIdentity", mock.Anything, mock.Anything).Return(nil) - mdi.On("UpsertData", mock.Anything, mock.Anything, database.UpsertOptimizationNew).Return(nil) mdm.On("VerifyNamespaceExists", mock.Anything, "ns1").Return(nil) mdm.On("CheckDatatype", mock.Anything, "ns1", mock.Anything).Return(fmt.Errorf("pop")) - _, err := bm.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ + _, err := ds.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ Namespace: "ns1", Name: "ent1", Version: "0.0.1", @@ -115,17 +90,20 @@ func TestBroadcastDatatypeInvalid(t *testing.T) { } func TestBroadcastOk(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdm := bm.data.(*datamocks.Manager) - mim := bm.identity.(*identitymanagermocks.Manager) + mdm := ds.data.(*datamocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) + mbm := ds.broadcast.(*broadcastmocks.Manager) + mms := &sysmessagingmocks.MessageSender{} mim.On("ResolveInputSigningIdentity", mock.Anything, "ns1", mock.Anything).Return(nil) mdm.On("VerifyNamespaceExists", mock.Anything, "ns1").Return(nil) mdm.On("CheckDatatype", mock.Anything, "ns1", mock.Anything).Return(nil) - mdm.On("WriteNewMessage", mock.Anything, mock.Anything, mock.Anything).Return(nil) + mbm.On("NewBroadcast", "ns1", mock.Anything).Return(mms) + mms.On("Send", context.Background()).Return(nil) - _, err := bm.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ + _, err := ds.BroadcastDatatype(context.Background(), "ns1", &fftypes.Datatype{ Namespace: "ns1", Name: "ent1", Version: "0.0.1", @@ -135,4 +113,6 @@ func TestBroadcastOk(t *testing.T) { mdm.AssertExpectations(t) mim.AssertExpectations(t) + mbm.AssertExpectations(t) + mms.AssertExpectations(t) } diff --git a/internal/broadcast/definition.go b/internal/defsender/manager.go similarity index 51% rename from internal/broadcast/definition.go rename to internal/defsender/manager.go index fad4267468..b2bebe98fa 100644 --- a/internal/broadcast/definition.go +++ b/internal/defsender/manager.go @@ -14,12 +14,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -package broadcast +package defsender import ( "context" "encoding/json" + "github.com/hyperledger/firefly/internal/broadcast" "github.com/hyperledger/firefly/internal/coremsgs" "github.com/hyperledger/firefly/internal/data" "github.com/hyperledger/firefly/internal/identity" @@ -27,11 +28,45 @@ import ( "github.com/hyperledger/firefly/pkg/i18n" ) -func (bm *broadcastManager) BroadcastDefinitionAsNode(ctx context.Context, ns string, def fftypes.Definition, tag string, waitConfirm bool) (msg *fftypes.Message, err error) { +type Sender interface { + fftypes.Named + + BroadcastDatatype(ctx context.Context, ns string, datatype *fftypes.Datatype, waitConfirm bool) (msg *fftypes.Message, err error) + BroadcastNamespace(ctx context.Context, ns *fftypes.Namespace, waitConfirm bool) (msg *fftypes.Message, err error) + BroadcastDefinitionAsNode(ctx context.Context, ns string, def fftypes.Definition, tag string, waitConfirm bool) (msg *fftypes.Message, err error) + BroadcastDefinition(ctx context.Context, ns string, def fftypes.Definition, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (msg *fftypes.Message, err error) + BroadcastIdentityClaim(ctx context.Context, ns string, def *fftypes.IdentityClaim, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (msg *fftypes.Message, err error) + BroadcastTokenPool(ctx context.Context, ns string, pool *fftypes.TokenPoolAnnouncement, waitConfirm bool) (msg *fftypes.Message, err error) +} + +type definitionSender struct { + ctx context.Context + broadcast broadcast.Manager + identity identity.Manager + data data.Manager +} + +func NewDefinitionSender(ctx context.Context, bm broadcast.Manager, im identity.Manager, dm data.Manager) (Sender, error) { + if bm == nil || im == nil || dm == nil { + return nil, i18n.NewError(ctx, coremsgs.MsgInitializationNilDepError) + } + return &definitionSender{ + ctx: ctx, + broadcast: bm, + identity: im, + data: dm, + }, nil +} + +func (bm *definitionSender) Name() string { + return "DefinitionSender" +} + +func (bm *definitionSender) BroadcastDefinitionAsNode(ctx context.Context, ns string, def fftypes.Definition, tag string, waitConfirm bool) (msg *fftypes.Message, err error) { return bm.BroadcastDefinition(ctx, ns, def, &fftypes.SignerRef{ /* resolve to node default */ }, tag, waitConfirm) } -func (bm *broadcastManager) BroadcastDefinition(ctx context.Context, ns string, def fftypes.Definition, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (msg *fftypes.Message, err error) { +func (bm *definitionSender) BroadcastDefinition(ctx context.Context, ns string, def fftypes.Definition, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (msg *fftypes.Message, err error) { err = bm.identity.ResolveInputSigningIdentity(ctx, ns, signingIdentity) if err != nil { @@ -43,7 +78,7 @@ func (bm *broadcastManager) BroadcastDefinition(ctx context.Context, ns string, // BroadcastIdentityClaim is a special form of BroadcastDefinitionAsNode where the signing identity does not need to have been pre-registered // The blockchain "key" will be normalized, but the "author" will pass through unchecked -func (bm *broadcastManager) BroadcastIdentityClaim(ctx context.Context, ns string, def *fftypes.IdentityClaim, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (msg *fftypes.Message, err error) { +func (bm *definitionSender) BroadcastIdentityClaim(ctx context.Context, ns string, def *fftypes.IdentityClaim, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (msg *fftypes.Message, err error) { signingIdentity.Key, err = bm.identity.NormalizeSigningKey(ctx, signingIdentity.Key, identity.KeyNormalizationBlockchainPlugin) if err != nil { @@ -53,57 +88,36 @@ func (bm *broadcastManager) BroadcastIdentityClaim(ctx context.Context, ns strin return bm.broadcastDefinitionCommon(ctx, ns, def, signingIdentity, tag, waitConfirm) } -func (bm *broadcastManager) broadcastDefinitionCommon(ctx context.Context, ns string, def fftypes.Definition, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (*fftypes.Message, error) { +func (bm *definitionSender) broadcastDefinitionCommon(ctx context.Context, ns string, def fftypes.Definition, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (*fftypes.Message, error) { - // Serialize it into a data object, as a piece of data we can write to a message - d := &fftypes.Data{ - Validator: fftypes.ValidatorTypeSystemDefinition, - ID: fftypes.NewUUID(), - Namespace: ns, - Created: fftypes.Now(), - } b, err := json.Marshal(&def) - if err == nil { - d.Value = fftypes.JSONAnyPtrBytes(b) - err = d.Seal(ctx, nil) - } if err != nil { return nil, i18n.WrapError(ctx, err, coremsgs.MsgSerializationFailed) } - // Create a broadcast message referring to the data - newMsg := &data.NewMessage{ - Message: &fftypes.MessageInOut{ - Message: fftypes.Message{ - Header: fftypes.MessageHeader{ - Namespace: ns, - Type: fftypes.MessageTypeDefinition, - SignerRef: *signingIdentity, - Topics: fftypes.FFStringArray{def.Topic()}, - Tag: tag, - TxType: fftypes.TransactionTypeBatchPin, - }, - Data: fftypes.DataRefs{ - {ID: d.ID, Hash: d.Hash, ValueSize: d.ValueSize}, - }, + message := &fftypes.MessageInOut{ + Message: fftypes.Message{ + Header: fftypes.MessageHeader{ + Namespace: ns, + Type: fftypes.MessageTypeDefinition, + SignerRef: *signingIdentity, + Topics: fftypes.FFStringArray{def.Topic()}, + Tag: tag, + TxType: fftypes.TransactionTypeBatchPin, + }, + }, + InlineData: fftypes.InlineData{ + &fftypes.DataRefOrValue{ + Value: fftypes.JSONAnyPtrBytes(b), }, }, - NewData: fftypes.DataArray{d}, - AllData: fftypes.DataArray{d}, } + sender := bm.broadcast.NewBroadcast(ns, message) - // Broadcast the message - sender := broadcastSender{ - mgr: bm, - namespace: ns, - msg: newMsg, - resolved: true, - } - sender.setDefaults() if waitConfirm { err = sender.SendAndWait(ctx) } else { err = sender.Send(ctx) } - return &newMsg.Message.Message, err + return &message.Message, err } diff --git a/internal/broadcast/definition_test.go b/internal/defsender/manager_test.go similarity index 51% rename from internal/broadcast/definition_test.go rename to internal/defsender/manager_test.go index b0aaaebd10..c7fccf6977 100644 --- a/internal/broadcast/definition_test.go +++ b/internal/defsender/manager_test.go @@ -14,67 +14,98 @@ // See the License for the specific language governing permissions and // limitations under the License. -package broadcast +package defsender import ( + "context" "fmt" "testing" "github.com/hyperledger/firefly/internal/identity" + "github.com/hyperledger/firefly/mocks/broadcastmocks" + "github.com/hyperledger/firefly/mocks/datamocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" - "github.com/hyperledger/firefly/mocks/syncasyncmocks" + "github.com/hyperledger/firefly/mocks/sysmessagingmocks" "github.com/hyperledger/firefly/pkg/fftypes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) +func newTestDefinitionSender(t *testing.T) (*definitionSender, func()) { + mbm := &broadcastmocks.Manager{} + mim := &identitymanagermocks.Manager{} + mdm := &datamocks.Manager{} + + ctx, cancel := context.WithCancel(context.Background()) + b, err := NewDefinitionSender(ctx, mbm, mim, mdm) + assert.NoError(t, err) + return b.(*definitionSender), cancel +} + +func TestInitFail(t *testing.T) { + _, err := NewDefinitionSender(context.Background(), nil, nil, nil) + assert.Regexp(t, "FF10128", err) +} + +func TestName(t *testing.T) { + bm, cancel := newTestDefinitionSender(t) + defer cancel() + assert.Equal(t, "DefinitionSender", bm.Name()) +} + func TestBroadcastDefinitionAsNodeConfirm(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - msa := bm.syncasync.(*syncasyncmocks.Bridge) - mim := bm.identity.(*identitymanagermocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) + mbm := ds.broadcast.(*broadcastmocks.Manager) + mms := &sysmessagingmocks.MessageSender{} mim.On("ResolveInputSigningIdentity", mock.Anything, "ff_system", mock.Anything).Return(nil) - msa.On("WaitForMessage", bm.ctx, "ff_system", mock.Anything, mock.Anything).Return(nil, fmt.Errorf("pop")) + mbm.On("NewBroadcast", "ff_system", mock.Anything).Return(mms) + mms.On("SendAndWait", mock.Anything).Return(nil) - _, err := bm.BroadcastDefinitionAsNode(bm.ctx, fftypes.SystemNamespace, &fftypes.Namespace{}, fftypes.SystemTagDefineNamespace, true) - assert.EqualError(t, err, "pop") + _, err := ds.BroadcastDefinitionAsNode(ds.ctx, fftypes.SystemNamespace, &fftypes.Namespace{}, fftypes.SystemTagDefineNamespace, true) + assert.NoError(t, err) - msa.AssertExpectations(t) mim.AssertExpectations(t) + mbm.AssertExpectations(t) + mms.AssertExpectations(t) } func TestBroadcastIdentityClaim(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - msa := bm.syncasync.(*syncasyncmocks.Bridge) - mim := bm.identity.(*identitymanagermocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) + mbm := ds.broadcast.(*broadcastmocks.Manager) + mms := &sysmessagingmocks.MessageSender{} mim.On("NormalizeSigningKey", mock.Anything, "0x1234", identity.KeyNormalizationBlockchainPlugin).Return("", nil) - msa.On("WaitForMessage", bm.ctx, "ff_system", mock.Anything, mock.Anything).Return(nil, fmt.Errorf("pop")) + mbm.On("NewBroadcast", "ff_system", mock.Anything).Return(mms) + mms.On("SendAndWait", mock.Anything).Return(nil) - _, err := bm.BroadcastIdentityClaim(bm.ctx, fftypes.SystemNamespace, &fftypes.IdentityClaim{ + _, err := ds.BroadcastIdentityClaim(ds.ctx, fftypes.SystemNamespace, &fftypes.IdentityClaim{ Identity: &fftypes.Identity{}, }, &fftypes.SignerRef{ Key: "0x1234", }, fftypes.SystemTagDefineNamespace, true) - assert.EqualError(t, err, "pop") + assert.NoError(t, err) - msa.AssertExpectations(t) mim.AssertExpectations(t) + mbm.AssertExpectations(t) + mms.AssertExpectations(t) } func TestBroadcastIdentityClaimFail(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mim := bm.identity.(*identitymanagermocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) mim.On("NormalizeSigningKey", mock.Anything, "0x1234", identity.KeyNormalizationBlockchainPlugin).Return("", fmt.Errorf("pop")) - _, err := bm.BroadcastIdentityClaim(bm.ctx, fftypes.SystemNamespace, &fftypes.IdentityClaim{ + _, err := ds.BroadcastIdentityClaim(ds.ctx, fftypes.SystemNamespace, &fftypes.IdentityClaim{ Identity: &fftypes.Identity{}, }, &fftypes.SignerRef{ Key: "0x1234", @@ -85,30 +116,33 @@ func TestBroadcastIdentityClaimFail(t *testing.T) { } func TestBroadcastDatatypeDefinitionAsNodeConfirm(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - msa := bm.syncasync.(*syncasyncmocks.Bridge) - mim := bm.identity.(*identitymanagermocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) + mbm := ds.broadcast.(*broadcastmocks.Manager) + mms := &sysmessagingmocks.MessageSender{} ns := "customNamespace" mim.On("ResolveInputSigningIdentity", mock.Anything, ns, mock.Anything).Return(nil) - msa.On("WaitForMessage", bm.ctx, ns, mock.Anything, mock.Anything).Return(nil, fmt.Errorf("pop")) + mbm.On("NewBroadcast", ns, mock.Anything).Return(mms) + mms.On("SendAndWait", mock.Anything).Return(nil) - _, err := bm.BroadcastDefinitionAsNode(bm.ctx, ns, &fftypes.Datatype{}, fftypes.SystemTagDefineNamespace, true) - assert.EqualError(t, err, "pop") + _, err := ds.BroadcastDefinitionAsNode(ds.ctx, ns, &fftypes.Datatype{}, fftypes.SystemTagDefineNamespace, true) + assert.NoError(t, err) - msa.AssertExpectations(t) mim.AssertExpectations(t) + mbm.AssertExpectations(t) + mms.AssertExpectations(t) } func TestBroadcastDefinitionBadIdentity(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mim := bm.identity.(*identitymanagermocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) mim.On("ResolveInputSigningIdentity", mock.Anything, fftypes.SystemNamespace, mock.Anything).Return(fmt.Errorf("pop")) - _, err := bm.BroadcastDefinition(bm.ctx, fftypes.SystemNamespace, &fftypes.Namespace{}, &fftypes.SignerRef{ + _, err := ds.BroadcastDefinition(ds.ctx, fftypes.SystemNamespace, &fftypes.Namespace{}, &fftypes.SignerRef{ Author: "wrong", Key: "wrong", }, fftypes.SystemTagDefineNamespace, false) diff --git a/internal/broadcast/namespace.go b/internal/defsender/namespace.go similarity index 90% rename from internal/broadcast/namespace.go rename to internal/defsender/namespace.go index 6f1a8a3e65..3e44dea7e7 100644 --- a/internal/broadcast/namespace.go +++ b/internal/defsender/namespace.go @@ -1,4 +1,4 @@ -// Copyright © 2021 Kaleido, Inc. +// Copyright © 2022 Kaleido, Inc. // // SPDX-License-Identifier: Apache-2.0 // @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package broadcast +package defsender import ( "context" @@ -22,7 +22,7 @@ import ( "github.com/hyperledger/firefly/pkg/fftypes" ) -func (bm *broadcastManager) BroadcastNamespace(ctx context.Context, ns *fftypes.Namespace, waitConfirm bool) (*fftypes.Message, error) { +func (bm *definitionSender) BroadcastNamespace(ctx context.Context, ns *fftypes.Namespace, waitConfirm bool) (*fftypes.Message, error) { // Validate the input data definition data ns.ID = fftypes.NewUUID() diff --git a/internal/broadcast/namespace_test.go b/internal/defsender/namespace_test.go similarity index 59% rename from internal/broadcast/namespace_test.go rename to internal/defsender/namespace_test.go index a83757a6a3..55ca70005a 100644 --- a/internal/broadcast/namespace_test.go +++ b/internal/defsender/namespace_test.go @@ -14,45 +14,41 @@ // See the License for the specific language governing permissions and // limitations under the License. -package broadcast +package defsender import ( "context" "strings" "testing" - "github.com/hyperledger/firefly/mocks/databasemocks" - "github.com/hyperledger/firefly/mocks/datamocks" + "github.com/hyperledger/firefly/mocks/broadcastmocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" + "github.com/hyperledger/firefly/mocks/sysmessagingmocks" "github.com/hyperledger/firefly/pkg/fftypes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) func TestBroadcastNamespaceBadName(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdi := bm.database.(*databasemocks.Plugin) - mdi.On("GetNamespace", mock.Anything, mock.Anything).Return(&fftypes.Namespace{Name: "ns1"}, nil) - _, err := bm.BroadcastNamespace(context.Background(), &fftypes.Namespace{ + _, err := ds.BroadcastNamespace(context.Background(), &fftypes.Namespace{ Name: "!ns", }, false) assert.Regexp(t, "FF00140.*name", err) } func TestBroadcastNamespaceDescriptionTooLong(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdi := bm.database.(*databasemocks.Plugin) - mdi.On("GetNamespace", mock.Anything, mock.Anything).Return(&fftypes.Namespace{Name: "ns1"}, nil) buff := strings.Builder{} buff.Grow(4097) for i := 0; i < 4097; i++ { buff.WriteByte(byte('a' + i%26)) } - _, err := bm.BroadcastNamespace(context.Background(), &fftypes.Namespace{ + _, err := ds.BroadcastNamespace(context.Background(), &fftypes.Namespace{ Name: "ns1", Description: buff.String(), }, false) @@ -60,25 +56,28 @@ func TestBroadcastNamespaceDescriptionTooLong(t *testing.T) { } func TestBroadcastNamespaceBroadcastOk(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdi := bm.database.(*databasemocks.Plugin) - mdm := bm.data.(*datamocks.Manager) - mim := bm.identity.(*identitymanagermocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) + mbm := ds.broadcast.(*broadcastmocks.Manager) + mms := &sysmessagingmocks.MessageSender{} mim.On("ResolveInputSigningIdentity", mock.Anything, fftypes.SystemNamespace, mock.Anything).Return(nil) - mdi.On("GetNamespace", mock.Anything, mock.Anything).Return(&fftypes.Namespace{Name: "ns1"}, nil) - mdm.On("CheckDatatype", mock.Anything, "ns1", mock.Anything).Return(nil) - mdm.On("UpdateMessageCache", mock.Anything, mock.Anything).Return() - mdm.On("WriteNewMessage", mock.Anything, mock.Anything).Return(nil) + mbm.On("NewBroadcast", fftypes.SystemNamespace, mock.Anything).Return(mms) + mms.On("Send", context.Background()).Return(nil) + buff := strings.Builder{} buff.Grow(4097) for i := 0; i < 4097; i++ { buff.WriteByte(byte('a' + i%26)) } - _, err := bm.BroadcastNamespace(context.Background(), &fftypes.Namespace{ + _, err := ds.BroadcastNamespace(context.Background(), &fftypes.Namespace{ Name: "ns1", Description: "my namespace", }, false) assert.NoError(t, err) + + mim.AssertExpectations(t) + mbm.AssertExpectations(t) + mms.AssertExpectations(t) } diff --git a/internal/broadcast/tokenpool.go b/internal/defsender/tokenpool.go similarity index 90% rename from internal/broadcast/tokenpool.go rename to internal/defsender/tokenpool.go index 51cc8dc75c..cb3b2fb8db 100644 --- a/internal/broadcast/tokenpool.go +++ b/internal/defsender/tokenpool.go @@ -1,4 +1,4 @@ -// Copyright © 2021 Kaleido, Inc. +// Copyright © 2022 Kaleido, Inc. // // SPDX-License-Identifier: Apache-2.0 // @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package broadcast +package defsender import ( "context" @@ -22,7 +22,7 @@ import ( "github.com/hyperledger/firefly/pkg/fftypes" ) -func (bm *broadcastManager) BroadcastTokenPool(ctx context.Context, ns string, pool *fftypes.TokenPoolAnnouncement, waitConfirm bool) (msg *fftypes.Message, err error) { +func (bm *definitionSender) BroadcastTokenPool(ctx context.Context, ns string, pool *fftypes.TokenPoolAnnouncement, waitConfirm bool) (msg *fftypes.Message, err error) { if err := pool.Pool.Validate(ctx); err != nil { return nil, err } diff --git a/internal/broadcast/tokenpool_test.go b/internal/defsender/tokenpool_test.go similarity index 60% rename from internal/broadcast/tokenpool_test.go rename to internal/defsender/tokenpool_test.go index c79e94d665..ae50065f97 100644 --- a/internal/broadcast/tokenpool_test.go +++ b/internal/defsender/tokenpool_test.go @@ -14,25 +14,26 @@ // See the License for the specific language governing permissions and // limitations under the License. -package broadcast +package defsender import ( "context" "fmt" "testing" - "github.com/hyperledger/firefly/mocks/databasemocks" + "github.com/hyperledger/firefly/mocks/broadcastmocks" "github.com/hyperledger/firefly/mocks/datamocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" + "github.com/hyperledger/firefly/mocks/sysmessagingmocks" "github.com/hyperledger/firefly/pkg/fftypes" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" ) func TestBroadcastTokenPoolNSGetFail(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdm := bm.data.(*datamocks.Manager) + mdm := ds.data.(*datamocks.Manager) pool := &fftypes.TokenPoolAnnouncement{ Pool: &fftypes.TokenPool{ @@ -47,17 +48,16 @@ func TestBroadcastTokenPoolNSGetFail(t *testing.T) { mdm.On("VerifyNamespaceExists", mock.Anything, "ns1").Return(fmt.Errorf("pop")) - _, err := bm.BroadcastTokenPool(context.Background(), "ns1", pool, false) + _, err := ds.BroadcastTokenPool(context.Background(), "ns1", pool, false) assert.EqualError(t, err, "pop") mdm.AssertExpectations(t) } func TestBroadcastTokenPoolInvalid(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdi := bm.database.(*databasemocks.Plugin) - mdm := bm.data.(*datamocks.Manager) + mdm := ds.data.(*datamocks.Manager) pool := &fftypes.TokenPoolAnnouncement{ Pool: &fftypes.TokenPool{ @@ -70,46 +70,20 @@ func TestBroadcastTokenPoolInvalid(t *testing.T) { }, } - _, err := bm.BroadcastTokenPool(context.Background(), "ns1", pool, false) + _, err := ds.BroadcastTokenPool(context.Background(), "ns1", pool, false) assert.Regexp(t, "FF00140", err) - mdi.AssertExpectations(t) mdm.AssertExpectations(t) } -func TestBroadcastTokenPoolBroadcastFail(t *testing.T) { - bm, cancel := newTestBroadcast(t) - defer cancel() - mdm := bm.data.(*datamocks.Manager) - mim := bm.identity.(*identitymanagermocks.Manager) - - pool := &fftypes.TokenPoolAnnouncement{ - Pool: &fftypes.TokenPool{ - ID: fftypes.NewUUID(), - Namespace: "ns1", - Name: "mypool", - Type: fftypes.TokenTypeNonFungible, - Locator: "N1", - Symbol: "COIN", - }, - } - - mim.On("ResolveInputSigningIdentity", mock.Anything, "ns1", mock.Anything).Return(nil) - mdm.On("VerifyNamespaceExists", mock.Anything, "ns1").Return(nil) - mdm.On("WriteNewMessage", mock.Anything, mock.Anything).Return(fmt.Errorf("pop")) - - _, err := bm.BroadcastTokenPool(context.Background(), "ns1", pool, false) - assert.EqualError(t, err, "pop") - - mdm.AssertExpectations(t) - mim.AssertExpectations(t) -} - func TestBroadcastTokenPoolOk(t *testing.T) { - bm, cancel := newTestBroadcast(t) + ds, cancel := newTestDefinitionSender(t) defer cancel() - mdm := bm.data.(*datamocks.Manager) - mim := bm.identity.(*identitymanagermocks.Manager) + + mdm := ds.data.(*datamocks.Manager) + mim := ds.identity.(*identitymanagermocks.Manager) + mbm := ds.broadcast.(*broadcastmocks.Manager) + mms := &sysmessagingmocks.MessageSender{} pool := &fftypes.TokenPoolAnnouncement{ Pool: &fftypes.TokenPool{ @@ -124,11 +98,14 @@ func TestBroadcastTokenPoolOk(t *testing.T) { mim.On("ResolveInputSigningIdentity", mock.Anything, "ns1", mock.Anything).Return(nil) mdm.On("VerifyNamespaceExists", mock.Anything, "ns1").Return(nil) - mdm.On("WriteNewMessage", mock.Anything, mock.Anything).Return(nil) + mbm.On("NewBroadcast", "ns1", mock.Anything).Return(mms) + mms.On("Send", context.Background()).Return(nil) - _, err := bm.BroadcastTokenPool(context.Background(), "ns1", pool, false) + _, err := ds.BroadcastTokenPool(context.Background(), "ns1", pool, false) assert.NoError(t, err) mdm.AssertExpectations(t) mim.AssertExpectations(t) + mbm.AssertExpectations(t) + mms.AssertExpectations(t) } diff --git a/internal/events/aggregator.go b/internal/events/aggregator.go index c5cef5831e..5a2de183be 100644 --- a/internal/events/aggregator.go +++ b/internal/events/aggregator.go @@ -25,7 +25,7 @@ import ( "github.com/hyperledger/firefly/internal/coreconfig" "github.com/hyperledger/firefly/internal/data" - "github.com/hyperledger/firefly/internal/definitions" + "github.com/hyperledger/firefly/internal/defhandler" "github.com/hyperledger/firefly/internal/identity" "github.com/hyperledger/firefly/internal/metrics" "github.com/hyperledger/firefly/internal/privatemessaging" @@ -46,7 +46,7 @@ type aggregator struct { ctx context.Context database database.Plugin messaging privatemessaging.Manager - definitions definitions.DefinitionHandler + definitions defhandler.DefinitionHandler identity identity.Manager data data.Manager eventPoller *eventPoller @@ -63,7 +63,7 @@ type batchCacheEntry struct { manifest *fftypes.BatchManifest } -func newAggregator(ctx context.Context, di database.Plugin, bi blockchain.Plugin, pm privatemessaging.Manager, sh definitions.DefinitionHandler, im identity.Manager, dm data.Manager, en *eventNotifier, mm metrics.Manager) *aggregator { +func newAggregator(ctx context.Context, di database.Plugin, bi blockchain.Plugin, pm privatemessaging.Manager, sh defhandler.DefinitionHandler, im identity.Manager, dm data.Manager, en *eventNotifier, mm metrics.Manager) *aggregator { batchSize := config.GetInt(coreconfig.EventAggregatorBatchSize) ag := &aggregator{ ctx: log.WithLogField(ctx, "role", "aggregator"), @@ -532,14 +532,14 @@ func (ag *aggregator) attemptMessageDispatch(ctx context.Context, msg *fftypes.M // dispatched subsequent events before we have processed the definition events they depend on. handlerResult, err := ag.definitions.HandleDefinitionBroadcast(ctx, state, msg, data, tx) log.L(ctx).Infof("Result of definition broadcast '%s' [%s]: %s", msg.Header.Tag, msg.Header.ID, handlerResult.Action) - if handlerResult.Action == definitions.ActionRetry { + if handlerResult.Action == defhandler.ActionRetry { return "", false, err } - if handlerResult.Action == definitions.ActionWait { + if handlerResult.Action == defhandler.ActionWait { return "", false, nil } customCorrelator = handlerResult.CustomCorrelator - valid = handlerResult.Action == definitions.ActionConfirm + valid = handlerResult.Action == defhandler.ActionConfirm case msg.Header.Type == fftypes.MessageTypeGroupInit: // Already handled as part of resolving the context - do nothing. diff --git a/internal/events/aggregator_test.go b/internal/events/aggregator_test.go index 1358080cd4..1a0bf780b5 100644 --- a/internal/events/aggregator_test.go +++ b/internal/events/aggregator_test.go @@ -25,11 +25,11 @@ import ( "github.com/hyperledger/firefly/internal/coreconfig" "github.com/hyperledger/firefly/internal/data" - "github.com/hyperledger/firefly/internal/definitions" + "github.com/hyperledger/firefly/internal/defhandler" "github.com/hyperledger/firefly/mocks/blockchainmocks" "github.com/hyperledger/firefly/mocks/databasemocks" "github.com/hyperledger/firefly/mocks/datamocks" - "github.com/hyperledger/firefly/mocks/definitionsmocks" + "github.com/hyperledger/firefly/mocks/defhandlermocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/mocks/metricsmocks" "github.com/hyperledger/firefly/mocks/privatemessagingmocks" @@ -48,7 +48,7 @@ func newTestAggregatorCommon(metrics bool) (*aggregator, func()) { mdi := &databasemocks.Plugin{} mdm := &datamocks.Manager{} mpm := &privatemessagingmocks.Manager{} - msh := &definitionsmocks.DefinitionHandler{} + msh := &defhandlermocks.DefinitionHandler{} mim := &identitymanagermocks.Manager{} mmi := &metricsmocks.Manager{} mbi := &blockchainmocks.Plugin{} @@ -1515,9 +1515,9 @@ func TestDefinitionBroadcastActionRejectCustomCorrelator(t *testing.T) { mim.On("FindIdentityForVerifier", ag.ctx, mock.Anything, mock.Anything, mock.Anything).Return(org1, nil) customCorrelator := fftypes.NewUUID() - msh := ag.definitions.(*definitionsmocks.DefinitionHandler) + msh := ag.definitions.(*defhandlermocks.DefinitionHandler) msh.On("HandleDefinitionBroadcast", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). - Return(definitions.HandlerResult{Action: definitions.ActionReject, CustomCorrelator: customCorrelator}, nil) + Return(defhandler.HandlerResult{Action: defhandler.ActionReject, CustomCorrelator: customCorrelator}, nil) mdm := ag.data.(*datamocks.Manager) mdm.On("GetMessageData", ag.ctx, mock.Anything, true).Return(fftypes.DataArray{}, true, nil) @@ -1732,8 +1732,9 @@ func TestDefinitionBroadcastActionRetry(t *testing.T) { mim := ag.identity.(*identitymanagermocks.Manager) mim.On("FindIdentityForVerifier", ag.ctx, mock.Anything, mock.Anything, mock.Anything).Return(org1, nil) - msh := ag.definitions.(*definitionsmocks.DefinitionHandler) - msh.On("HandleDefinitionBroadcast", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(definitions.HandlerResult{Action: definitions.ActionRetry}, fmt.Errorf("pop")) + msh := ag.definitions.(*defhandlermocks.DefinitionHandler) + msh.On("HandleDefinitionBroadcast", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(defhandler.HandlerResult{Action: defhandler.ActionRetry}, fmt.Errorf("pop")) mdm := ag.data.(*datamocks.Manager) mdm.On("GetMessageWithDataCached", ag.ctx, mock.Anything).Return(msg1, fftypes.DataArray{}, true, nil) @@ -1798,8 +1799,9 @@ func TestDefinitionBroadcastParkUnregisteredSignerIdentityClaim(t *testing.T) { mim := ag.identity.(*identitymanagermocks.Manager) mim.On("FindIdentityForVerifier", ag.ctx, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil) - msh := ag.definitions.(*definitionsmocks.DefinitionHandler) - msh.On("HandleDefinitionBroadcast", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(definitions.HandlerResult{Action: definitions.ActionWait}, nil) + msh := ag.definitions.(*defhandlermocks.DefinitionHandler) + msh.On("HandleDefinitionBroadcast", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(defhandler.HandlerResult{Action: defhandler.ActionWait}, nil) newState, valid, err := ag.attemptMessageDispatch(ag.ctx, msg1, nil, nil, &batchState{}, &fftypes.Pin{Signer: "0x12345"}) assert.NoError(t, err) @@ -1835,8 +1837,9 @@ func TestDefinitionBroadcastActionWait(t *testing.T) { mim := ag.identity.(*identitymanagermocks.Manager) mim.On("FindIdentityForVerifier", ag.ctx, mock.Anything, mock.Anything, mock.Anything).Return(org1, nil) - msh := ag.definitions.(*definitionsmocks.DefinitionHandler) - msh.On("HandleDefinitionBroadcast", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(definitions.HandlerResult{Action: definitions.ActionWait}, nil) + msh := ag.definitions.(*defhandlermocks.DefinitionHandler) + msh.On("HandleDefinitionBroadcast", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(defhandler.HandlerResult{Action: defhandler.ActionWait}, nil) _, _, err := ag.attemptMessageDispatch(ag.ctx, msg1, nil, nil, &batchState{}, &fftypes.Pin{Signer: "0x12345"}) assert.NoError(t, err) diff --git a/internal/events/event_manager.go b/internal/events/event_manager.go index fb26653536..3271ff72ea 100644 --- a/internal/events/event_manager.go +++ b/internal/events/event_manager.go @@ -28,7 +28,8 @@ import ( "github.com/hyperledger/firefly/internal/coreconfig" "github.com/hyperledger/firefly/internal/coremsgs" "github.com/hyperledger/firefly/internal/data" - "github.com/hyperledger/firefly/internal/definitions" + "github.com/hyperledger/firefly/internal/defhandler" + "github.com/hyperledger/firefly/internal/defsender" "github.com/hyperledger/firefly/internal/events/eifactory" "github.com/hyperledger/firefly/internal/events/system" "github.com/hyperledger/firefly/internal/identity" @@ -91,7 +92,8 @@ type eventManager struct { database database.Plugin txHelper txcommon.Helper identity identity.Manager - definitions definitions.DefinitionHandler + defsender defsender.Sender + defhandler defhandler.DefinitionHandler data data.Manager subManager *subscriptionManager retry retry.Retry @@ -110,8 +112,8 @@ type eventManager struct { chainListenerCacheTTL time.Duration } -func NewEventManager(ctx context.Context, ni sysmessaging.LocalNodeInfo, si sharedstorage.Plugin, di database.Plugin, bi blockchain.Plugin, im identity.Manager, dh definitions.DefinitionHandler, dm data.Manager, bm broadcast.Manager, pm privatemessaging.Manager, am assets.Manager, sd shareddownload.Manager, mm metrics.Manager, txHelper txcommon.Helper) (EventManager, error) { - if ni == nil || si == nil || di == nil || bi == nil || im == nil || dh == nil || dm == nil || bm == nil || pm == nil || am == nil { +func NewEventManager(ctx context.Context, ni sysmessaging.LocalNodeInfo, si sharedstorage.Plugin, di database.Plugin, bi blockchain.Plugin, im identity.Manager, dh defhandler.DefinitionHandler, dm data.Manager, ds defsender.Sender, bm broadcast.Manager, pm privatemessaging.Manager, am assets.Manager, sd shareddownload.Manager, mm metrics.Manager, txHelper txcommon.Helper) (EventManager, error) { + if ni == nil || si == nil || di == nil || bi == nil || im == nil || dh == nil || dm == nil || ds == nil || bm == nil || pm == nil || am == nil { return nil, i18n.NewError(ctx, coremsgs.MsgInitializationNilDepError) } newPinNotifier := newEventNotifier(ctx, "pins") @@ -123,7 +125,8 @@ func NewEventManager(ctx context.Context, ni sysmessaging.LocalNodeInfo, si shar database: di, txHelper: txHelper, identity: im, - definitions: dh, + defsender: ds, + defhandler: dh, data: dm, broadcast: bm, messaging: pm, diff --git a/internal/events/event_manager_test.go b/internal/events/event_manager_test.go index 939918ebc6..f1bc5cf41e 100644 --- a/internal/events/event_manager_test.go +++ b/internal/events/event_manager_test.go @@ -29,7 +29,8 @@ import ( "github.com/hyperledger/firefly/mocks/broadcastmocks" "github.com/hyperledger/firefly/mocks/databasemocks" "github.com/hyperledger/firefly/mocks/datamocks" - "github.com/hyperledger/firefly/mocks/definitionsmocks" + "github.com/hyperledger/firefly/mocks/defhandlermocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/eventsmocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/mocks/metricsmocks" @@ -73,7 +74,8 @@ func newTestEventManagerCommon(t *testing.T, metrics, dbconcurrency bool) (*even mpi := &sharedstoragemocks.Plugin{} met := &eventsmocks.Plugin{} mdm := &datamocks.Manager{} - msh := &definitionsmocks.DefinitionHandler{} + msh := &defhandlermocks.DefinitionHandler{} + mds := &defsendermocks.Sender{} mbm := &broadcastmocks.Manager{} mpm := &privatemessagingmocks.Manager{} mam := &assetmocks.Manager{} @@ -89,7 +91,7 @@ func newTestEventManagerCommon(t *testing.T, metrics, dbconcurrency bool) (*even met.On("Name").Return("ut").Maybe() mbi.On("VerifierType").Return(fftypes.VerifierTypeEthAddress).Maybe() mdi.On("Capabilities").Return(&database.Capabilities{Concurrency: dbconcurrency}).Maybe() - emi, err := NewEventManager(ctx, mni, mpi, mdi, mbi, mim, msh, mdm, mbm, mpm, mam, mdd, mmi, txHelper) + emi, err := NewEventManager(ctx, mni, mpi, mdi, mbi, mim, msh, mdm, mds, mbm, mpm, mam, mdd, mmi, txHelper) em := emi.(*eventManager) em.txHelper = &txcommonmocks.Helper{} mockRunAsGroupPassthrough(mdi) @@ -124,7 +126,7 @@ func TestStartStop(t *testing.T) { } func TestStartStopBadDependencies(t *testing.T) { - _, err := NewEventManager(context.Background(), nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) + _, err := NewEventManager(context.Background(), nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil) assert.Regexp(t, "FF10128", err) } @@ -137,7 +139,8 @@ func TestStartStopBadTransports(t *testing.T) { mim := &identitymanagermocks.Manager{} mpi := &sharedstoragemocks.Plugin{} mdm := &datamocks.Manager{} - msh := &definitionsmocks.DefinitionHandler{} + msh := &defhandlermocks.DefinitionHandler{} + mds := &defsendermocks.Sender{} mbm := &broadcastmocks.Manager{} mpm := &privatemessagingmocks.Manager{} mni := &sysmessagingmocks.LocalNodeInfo{} @@ -147,7 +150,7 @@ func TestStartStopBadTransports(t *testing.T) { txHelper := txcommon.NewTransactionHelper(mdi, mdm) mdi.On("Capabilities").Return(&database.Capabilities{Concurrency: false}).Maybe() mbi.On("VerifierType").Return(fftypes.VerifierTypeEthAddress) - _, err := NewEventManager(context.Background(), mni, mpi, mdi, mbi, mim, msh, mdm, mbm, mpm, mam, msd, mm, txHelper) + _, err := NewEventManager(context.Background(), mni, mpi, mdi, mbi, mim, msh, mdm, mds, mbm, mpm, mam, msd, mm, txHelper) assert.Regexp(t, "FF10172", err) } diff --git a/internal/events/token_pool_created.go b/internal/events/token_pool_created.go index 868c2d2594..035f306470 100644 --- a/internal/events/token_pool_created.go +++ b/internal/events/token_pool_created.go @@ -185,7 +185,7 @@ func (em *eventManager) TokenPoolCreated(ti tokens.Plugin, pool *tokens.TokenPoo Pool: announcePool, } log.L(em.ctx).Infof("Announcing token pool, id=%s", announcePool.ID) - _, err = em.broadcast.BroadcastTokenPool(em.ctx, announcePool.Namespace, broadcast, false) + _, err = em.defsender.BroadcastTokenPool(em.ctx, announcePool.Namespace, broadcast, false) } } diff --git a/internal/events/token_pool_created_test.go b/internal/events/token_pool_created_test.go index 9fd5bba6fa..e16c12ba3f 100644 --- a/internal/events/token_pool_created_test.go +++ b/internal/events/token_pool_created_test.go @@ -21,9 +21,9 @@ import ( "testing" "github.com/hyperledger/firefly/mocks/assetmocks" - "github.com/hyperledger/firefly/mocks/broadcastmocks" "github.com/hyperledger/firefly/mocks/databasemocks" "github.com/hyperledger/firefly/mocks/datamocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/tokenmocks" "github.com/hyperledger/firefly/mocks/txcommonmocks" "github.com/hyperledger/firefly/pkg/blockchain" @@ -417,7 +417,7 @@ func TestTokenPoolCreatedAnnounce(t *testing.T) { defer cancel() mdi := em.database.(*databasemocks.Plugin) mti := &tokenmocks.Plugin{} - mbm := em.broadcast.(*broadcastmocks.Manager) + mds := em.defsender.(*defsendermocks.Sender) poolID := fftypes.NewUUID() txID := fftypes.NewUUID() @@ -450,7 +450,7 @@ func TestTokenPoolCreatedAnnounce(t *testing.T) { mdi.On("GetTokenPoolByLocator", em.ctx, "erc1155", "123").Return(nil, nil).Times(2) mdi.On("GetOperations", em.ctx, mock.Anything).Return(nil, nil, fmt.Errorf("pop")).Once() mdi.On("GetOperations", em.ctx, mock.Anything).Return(operations, nil, nil).Once() - mbm.On("BroadcastTokenPool", em.ctx, "test-ns", mock.MatchedBy(func(pool *fftypes.TokenPoolAnnouncement) bool { + mds.On("BroadcastTokenPool", em.ctx, "test-ns", mock.MatchedBy(func(pool *fftypes.TokenPoolAnnouncement) bool { return pool.Pool.Namespace == "test-ns" && pool.Pool.Name == "my-pool" && *pool.Pool.ID == *poolID }), false).Return(nil, nil) @@ -459,7 +459,7 @@ func TestTokenPoolCreatedAnnounce(t *testing.T) { mti.AssertExpectations(t) mdi.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestTokenPoolCreatedAnnounceBadOpInputID(t *testing.T) { diff --git a/internal/networkmap/manager.go b/internal/networkmap/manager.go index 3a7ba17866..01b6b2d56e 100644 --- a/internal/networkmap/manager.go +++ b/internal/networkmap/manager.go @@ -19,8 +19,8 @@ package networkmap import ( "context" - "github.com/hyperledger/firefly/internal/broadcast" "github.com/hyperledger/firefly/internal/coremsgs" + "github.com/hyperledger/firefly/internal/defsender" "github.com/hyperledger/firefly/internal/identity" "github.com/hyperledger/firefly/internal/syncasync" "github.com/hyperledger/firefly/pkg/database" @@ -59,21 +59,21 @@ type Manager interface { type networkMap struct { ctx context.Context database database.Plugin - broadcast broadcast.Manager + defsender defsender.Sender exchange dataexchange.Plugin identity identity.Manager syncasync syncasync.Bridge } -func NewNetworkMap(ctx context.Context, di database.Plugin, bm broadcast.Manager, dx dataexchange.Plugin, im identity.Manager, sa syncasync.Bridge) (Manager, error) { - if di == nil || bm == nil || dx == nil || im == nil { +func NewNetworkMap(ctx context.Context, di database.Plugin, ds defsender.Sender, dx dataexchange.Plugin, im identity.Manager, sa syncasync.Bridge) (Manager, error) { + if di == nil || ds == nil || dx == nil || im == nil { return nil, i18n.NewError(ctx, coremsgs.MsgInitializationNilDepError) } nm := &networkMap{ ctx: ctx, database: di, - broadcast: bm, + defsender: ds, exchange: dx, identity: im, syncasync: sa, diff --git a/internal/networkmap/manager_test.go b/internal/networkmap/manager_test.go index 273ac1a055..d9c11ddc8a 100644 --- a/internal/networkmap/manager_test.go +++ b/internal/networkmap/manager_test.go @@ -21,9 +21,9 @@ import ( "testing" "github.com/hyperledger/firefly/internal/coreconfig" - "github.com/hyperledger/firefly/mocks/broadcastmocks" "github.com/hyperledger/firefly/mocks/databasemocks" "github.com/hyperledger/firefly/mocks/dataexchangemocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/mocks/syncasyncmocks" "github.com/stretchr/testify/assert" @@ -33,11 +33,11 @@ func newTestNetworkmap(t *testing.T) (*networkMap, func()) { coreconfig.Reset() ctx, cancel := context.WithCancel(context.Background()) mdi := &databasemocks.Plugin{} - mbm := &broadcastmocks.Manager{} + mds := &defsendermocks.Sender{} mdx := &dataexchangemocks.Plugin{} mim := &identitymanagermocks.Manager{} msa := &syncasyncmocks.Bridge{} - nm, err := NewNetworkMap(ctx, mdi, mbm, mdx, mim, msa) + nm, err := NewNetworkMap(ctx, mdi, mds, mdx, mim, msa) assert.NoError(t, err) return nm.(*networkMap), cancel diff --git a/internal/networkmap/register_identity.go b/internal/networkmap/register_identity.go index f37ea0829c..f1e3d9a05f 100644 --- a/internal/networkmap/register_identity.go +++ b/internal/networkmap/register_identity.go @@ -113,7 +113,7 @@ func (nm *networkMap) RegisterIdentity(ctx context.Context, ns string, dto *ffty func (nm *networkMap) sendIdentityRequest(ctx context.Context, identity *fftypes.Identity, claimSigner *fftypes.SignerRef, parentSigner *fftypes.SignerRef) error { // Send the claim - we disable the check on the DID author here, as we are registering the identity so it will not exist - claimMsg, err := nm.broadcast.BroadcastIdentityClaim(ctx, identity.Namespace, &fftypes.IdentityClaim{ + claimMsg, err := nm.defsender.BroadcastIdentityClaim(ctx, identity.Namespace, &fftypes.IdentityClaim{ Identity: identity, }, claimSigner, fftypes.SystemTagIdentityClaim, false) if err != nil { @@ -123,7 +123,7 @@ func (nm *networkMap) sendIdentityRequest(ctx context.Context, identity *fftypes // Send the verification if one is required. if parentSigner != nil { - verifyMsg, err := nm.broadcast.BroadcastDefinition(ctx, identity.Namespace, &fftypes.IdentityVerification{ + verifyMsg, err := nm.defsender.BroadcastDefinition(ctx, identity.Namespace, &fftypes.IdentityVerification{ Claim: fftypes.MessageRef{ ID: claimMsg.Header.ID, Hash: claimMsg.Hash, diff --git a/internal/networkmap/register_identity_test.go b/internal/networkmap/register_identity_test.go index 3f6d41b709..3e5ab53f5c 100644 --- a/internal/networkmap/register_identity_test.go +++ b/internal/networkmap/register_identity_test.go @@ -22,7 +22,7 @@ import ( "testing" "github.com/hyperledger/firefly/internal/syncasync" - "github.com/hyperledger/firefly/mocks/broadcastmocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/mocks/syncasyncmocks" "github.com/hyperledger/firefly/pkg/fftypes" @@ -45,9 +45,9 @@ func TestRegisterIdentityOrgWithParentOk(t *testing.T) { mockMsg1 := &fftypes.Message{Header: fftypes.MessageHeader{ID: fftypes.NewUUID()}} mockMsg2 := &fftypes.Message{Header: fftypes.MessageHeader{ID: fftypes.NewUUID()}} - mbm := nm.broadcast.(*broadcastmocks.Manager) + mds := nm.defsender.(*defsendermocks.Sender) - mbm.On("BroadcastIdentityClaim", nm.ctx, + mds.On("BroadcastIdentityClaim", nm.ctx, fftypes.SystemNamespace, mock.AnythingOfType("*fftypes.IdentityClaim"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -55,7 +55,7 @@ func TestRegisterIdentityOrgWithParentOk(t *testing.T) { }), fftypes.SystemTagIdentityClaim, false).Return(mockMsg1, nil) - mbm.On("BroadcastDefinition", nm.ctx, + mds.On("BroadcastDefinition", nm.ctx, fftypes.SystemNamespace, mock.AnythingOfType("*fftypes.IdentityVerification"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -73,7 +73,7 @@ func TestRegisterIdentityOrgWithParentOk(t *testing.T) { assert.Equal(t, *mockMsg2.Header.ID, *org.Messages.Verification) mim.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestRegisterIdentityOrgWithParentWaitConfirmOk(t *testing.T) { @@ -103,9 +103,9 @@ func TestRegisterIdentityOrgWithParentWaitConfirmOk(t *testing.T) { mockMsg1 := &fftypes.Message{Header: fftypes.MessageHeader{ID: fftypes.NewUUID()}} mockMsg2 := &fftypes.Message{Header: fftypes.MessageHeader{ID: fftypes.NewUUID()}} - mbm := nm.broadcast.(*broadcastmocks.Manager) + mds := nm.defsender.(*defsendermocks.Sender) - mbm.On("BroadcastIdentityClaim", nm.ctx, + mds.On("BroadcastIdentityClaim", nm.ctx, fftypes.SystemNamespace, mock.AnythingOfType("*fftypes.IdentityClaim"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -113,7 +113,7 @@ func TestRegisterIdentityOrgWithParentWaitConfirmOk(t *testing.T) { }), fftypes.SystemTagIdentityClaim, false).Return(mockMsg1, nil) - mbm.On("BroadcastDefinition", nm.ctx, + mds.On("BroadcastDefinition", nm.ctx, fftypes.SystemNamespace, mock.AnythingOfType("*fftypes.IdentityVerification"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -129,7 +129,7 @@ func TestRegisterIdentityOrgWithParentWaitConfirmOk(t *testing.T) { assert.NoError(t, err) mim.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) msa.AssertExpectations(t) } @@ -153,9 +153,9 @@ func TestRegisterIdentityCustomWithParentFail(t *testing.T) { }, nil) mockMsg := &fftypes.Message{Header: fftypes.MessageHeader{ID: fftypes.NewUUID()}} - mbm := nm.broadcast.(*broadcastmocks.Manager) + mds := nm.defsender.(*defsendermocks.Sender) - mbm.On("BroadcastIdentityClaim", nm.ctx, + mds.On("BroadcastIdentityClaim", nm.ctx, "ns1", mock.AnythingOfType("*fftypes.IdentityClaim"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -163,7 +163,7 @@ func TestRegisterIdentityCustomWithParentFail(t *testing.T) { }), fftypes.SystemTagIdentityClaim, false).Return(mockMsg, nil) - mbm.On("BroadcastDefinition", nm.ctx, + mds.On("BroadcastDefinition", nm.ctx, "ns1", mock.AnythingOfType("*fftypes.IdentityVerification"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -179,7 +179,7 @@ func TestRegisterIdentityCustomWithParentFail(t *testing.T) { assert.Regexp(t, "pop", err) mim.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestRegisterIdentityGetParentMsgFail(t *testing.T) { @@ -211,8 +211,8 @@ func TestRegisterIdentityRootBroadcastFail(t *testing.T) { mim := nm.identity.(*identitymanagermocks.Manager) mim.On("VerifyIdentityChain", nm.ctx, mock.AnythingOfType("*fftypes.Identity")).Return(nil, false, nil) - mbm := nm.broadcast.(*broadcastmocks.Manager) - mbm.On("BroadcastIdentityClaim", nm.ctx, + mds := nm.defsender.(*defsendermocks.Sender) + mds.On("BroadcastIdentityClaim", nm.ctx, "ns1", mock.AnythingOfType("*fftypes.IdentityClaim"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -228,7 +228,7 @@ func TestRegisterIdentityRootBroadcastFail(t *testing.T) { assert.Regexp(t, "pop", err) mim.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestRegisterIdentityMissingKey(t *testing.T) { diff --git a/internal/networkmap/register_node_test.go b/internal/networkmap/register_node_test.go index 5510b63bd1..7af98d923a 100644 --- a/internal/networkmap/register_node_test.go +++ b/internal/networkmap/register_node_test.go @@ -21,8 +21,8 @@ import ( "testing" "github.com/hyperledger/firefly/internal/coreconfig" - "github.com/hyperledger/firefly/mocks/broadcastmocks" "github.com/hyperledger/firefly/mocks/dataexchangemocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/pkg/config" "github.com/hyperledger/firefly/pkg/fftypes" @@ -54,8 +54,8 @@ func TestRegisterNodeOk(t *testing.T) { }, nil) mockMsg := &fftypes.Message{Header: fftypes.MessageHeader{ID: fftypes.NewUUID()}} - mbm := nm.broadcast.(*broadcastmocks.Manager) - mbm.On("BroadcastIdentityClaim", nm.ctx, + mds := nm.defsender.(*defsendermocks.Sender) + mds.On("BroadcastIdentityClaim", nm.ctx, fftypes.SystemNamespace, mock.AnythingOfType("*fftypes.IdentityClaim"), signerRef, diff --git a/internal/networkmap/register_org_test.go b/internal/networkmap/register_org_test.go index 3c40e56e1f..5c84850b65 100644 --- a/internal/networkmap/register_org_test.go +++ b/internal/networkmap/register_org_test.go @@ -22,7 +22,7 @@ import ( "testing" "github.com/hyperledger/firefly/internal/coreconfig" - "github.com/hyperledger/firefly/mocks/broadcastmocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/pkg/config" "github.com/hyperledger/firefly/pkg/fftypes" @@ -67,8 +67,8 @@ func TestRegisterNodeOrgOk(t *testing.T) { mim.On("VerifyIdentityChain", nm.ctx, mock.AnythingOfType("*fftypes.Identity")).Return(nil, false, nil) mockMsg := &fftypes.Message{Header: fftypes.MessageHeader{ID: fftypes.NewUUID()}} - mbm := nm.broadcast.(*broadcastmocks.Manager) - mbm.On("BroadcastIdentityClaim", nm.ctx, + mds := nm.defsender.(*defsendermocks.Sender) + mds.On("BroadcastIdentityClaim", nm.ctx, fftypes.SystemNamespace, mock.AnythingOfType("*fftypes.IdentityClaim"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { diff --git a/internal/networkmap/update_identity.go b/internal/networkmap/update_identity.go index 8dc9a6fa06..31470fd424 100644 --- a/internal/networkmap/update_identity.go +++ b/internal/networkmap/update_identity.go @@ -55,7 +55,7 @@ func (nm *networkMap) updateIdentityID(ctx context.Context, ns string, id *fftyp } // Send the update - updateMsg, err := nm.broadcast.BroadcastDefinition(ctx, identity.Namespace, &fftypes.IdentityUpdate{ + updateMsg, err := nm.defsender.BroadcastDefinition(ctx, identity.Namespace, &fftypes.IdentityUpdate{ Identity: identity.IdentityBase, Updates: dto.IdentityProfile, }, updateSigner, fftypes.SystemTagIdentityUpdate, waitConfirm) diff --git a/internal/networkmap/update_identity_test.go b/internal/networkmap/update_identity_test.go index 015e38960d..60cfba7a86 100644 --- a/internal/networkmap/update_identity_test.go +++ b/internal/networkmap/update_identity_test.go @@ -20,7 +20,7 @@ import ( "fmt" "testing" - "github.com/hyperledger/firefly/mocks/broadcastmocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/pkg/fftypes" "github.com/stretchr/testify/assert" @@ -40,9 +40,9 @@ func TestUpdateIdentityProfileOk(t *testing.T) { mim.On("ResolveIdentitySigner", nm.ctx, identity).Return(signerRef, nil) mockMsg1 := &fftypes.Message{Header: fftypes.MessageHeader{ID: fftypes.NewUUID()}} - mbm := nm.broadcast.(*broadcastmocks.Manager) + mds := nm.defsender.(*defsendermocks.Sender) - mbm.On("BroadcastDefinition", nm.ctx, + mds.On("BroadcastDefinition", nm.ctx, fftypes.SystemNamespace, mock.AnythingOfType("*fftypes.IdentityUpdate"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -60,7 +60,7 @@ func TestUpdateIdentityProfileOk(t *testing.T) { assert.Equal(t, *mockMsg1.Header.ID, *org.Messages.Update) mim.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestUpdateIdentityProfileBroadcastFail(t *testing.T) { @@ -75,8 +75,8 @@ func TestUpdateIdentityProfileBroadcastFail(t *testing.T) { signerRef := &fftypes.SignerRef{Key: "0x12345"} mim.On("ResolveIdentitySigner", nm.ctx, identity).Return(signerRef, nil) - mbm := nm.broadcast.(*broadcastmocks.Manager) - mbm.On("BroadcastDefinition", nm.ctx, + mds := nm.defsender.(*defsendermocks.Sender) + mds.On("BroadcastDefinition", nm.ctx, fftypes.SystemNamespace, mock.AnythingOfType("*fftypes.IdentityUpdate"), mock.MatchedBy(func(sr *fftypes.SignerRef) bool { @@ -93,7 +93,7 @@ func TestUpdateIdentityProfileBroadcastFail(t *testing.T) { assert.Regexp(t, "pop", err) mim.AssertExpectations(t) - mbm.AssertExpectations(t) + mds.AssertExpectations(t) } func TestUpdateIdentityProfileBadProfile(t *testing.T) { diff --git a/internal/orchestrator/orchestrator.go b/internal/orchestrator/orchestrator.go index 66dd9d5224..ea664d9a06 100644 --- a/internal/orchestrator/orchestrator.go +++ b/internal/orchestrator/orchestrator.go @@ -32,7 +32,8 @@ import ( "github.com/hyperledger/firefly/internal/data" "github.com/hyperledger/firefly/internal/database/difactory" "github.com/hyperledger/firefly/internal/dataexchange/dxfactory" - "github.com/hyperledger/firefly/internal/definitions" + "github.com/hyperledger/firefly/internal/defhandler" + "github.com/hyperledger/firefly/internal/defsender" "github.com/hyperledger/firefly/internal/events" "github.com/hyperledger/firefly/internal/identity" "github.com/hyperledger/firefly/internal/identity/iifactory" @@ -78,6 +79,7 @@ type Orchestrator interface { Assets() assets.Manager BatchManager() batch.Manager Broadcast() broadcast.Manager + DefinitionSender() defsender.Sender Contracts() contracts.Manager Data() data.Manager Events() events.EventManager @@ -162,7 +164,8 @@ type orchestrator struct { batch batch.Manager broadcast broadcast.Manager messaging privatemessaging.Manager - definitions definitions.DefinitionHandler + defsender defsender.Sender + defhandler defhandler.DefinitionHandler data data.Manager syncasync syncasync.Bridge batchpin batchpin.Submitter @@ -297,6 +300,10 @@ func (or *orchestrator) PrivateMessaging() privatemessaging.Manager { return or.messaging } +func (or *orchestrator) DefinitionSender() defsender.Sender { + return or.defsender +} + func (or *orchestrator) Events() events.EventManager { return or.events } @@ -494,14 +501,7 @@ func (or *orchestrator) initPlugins(ctx context.Context) (err error) { return nil } -func (or *orchestrator) initComponents(ctx context.Context) (err error) { - - if or.data == nil { - or.data, err = data.NewDataManager(ctx, or.database, or.sharedstorage, or.dataexchange) - if err != nil { - return err - } - } +func (or *orchestrator) initManagers(ctx context.Context) (err error) { if or.txHelper == nil { or.txHelper = txcommon.NewTransactionHelper(or.database, or.data) @@ -527,14 +527,14 @@ func (or *orchestrator) initComponents(ctx context.Context) (err error) { } } - or.syncasync = syncasync.NewSyncAsyncBridge(ctx, or.database, or.data) - if or.batchpin == nil { if or.batchpin, err = batchpin.NewBatchPinSubmitter(ctx, or.database, or.identity, or.blockchain, or.metrics, or.operations); err != nil { return err } } + or.syncasync = syncasync.NewSyncAsyncBridge(ctx, or.database, or.data) + if or.messaging == nil { if or.messaging, err = privatemessaging.NewPrivateMessaging(ctx, or.database, or.identity, or.dataexchange, or.blockchain, or.batch, or.data, or.syncasync, or.batchpin, or.metrics, or.operations); err != nil { return err @@ -547,6 +547,13 @@ func (or *orchestrator) initComponents(ctx context.Context) (err error) { } } + if or.defsender == nil { + or.defsender, err = defsender.NewDefinitionSender(ctx, or.broadcast, or.identity, or.data) + if err != nil { + return err + } + } + if or.assets == nil { or.assets, err = assets.NewAssetManager(ctx, or.database, or.identity, or.data, or.syncasync, or.broadcast, or.messaging, or.tokens, or.metrics, or.operations, or.txHelper) if err != nil { @@ -555,28 +562,40 @@ func (or *orchestrator) initComponents(ctx context.Context) (err error) { } if or.contracts == nil { - or.contracts, err = contracts.NewContractManager(ctx, or.database, or.broadcast, or.identity, or.blockchain, or.operations, or.txHelper, or.syncasync) + or.contracts, err = contracts.NewContractManager(ctx, or.database, or.defsender, or.identity, or.blockchain, or.operations, or.txHelper, or.syncasync) if err != nil { return err } } - if or.definitions == nil { - or.definitions, err = definitions.NewDefinitionHandler(ctx, or.database, or.blockchain, or.dataexchange, or.data, or.identity, or.assets, or.contracts) + if or.sharedDownload == nil { + or.sharedDownload, err = shareddownload.NewDownloadManager(ctx, or.database, or.sharedstorage, or.dataexchange, or.operations, &or.bc) if err != nil { return err } } - if or.sharedDownload == nil { - or.sharedDownload, err = shareddownload.NewDownloadManager(ctx, or.database, or.sharedstorage, or.dataexchange, or.operations, &or.bc) + if or.networkmap == nil { + or.networkmap, err = networkmap.NewNetworkMap(ctx, or.database, or.defsender, or.dataexchange, or.identity, or.syncasync) + if err != nil { + return err + } + } + + return nil +} + +func (or *orchestrator) initEventHandlers(ctx context.Context) (err error) { + + if or.defhandler == nil { + or.defhandler, err = defhandler.NewDefinitionHandler(ctx, or.database, or.blockchain, or.dataexchange, or.data, or.identity, or.assets, or.contracts) if err != nil { return err } } if or.events == nil { - or.events, err = events.NewEventManager(ctx, or, or.sharedstorage, or.database, or.blockchain, or.identity, or.definitions, or.data, or.broadcast, or.messaging, or.assets, or.sharedDownload, or.metrics, or.txHelper) + or.events, err = events.NewEventManager(ctx, or, or.sharedstorage, or.database, or.blockchain, or.identity, or.defhandler, or.data, or.defsender, or.broadcast, or.messaging, or.assets, or.sharedDownload, or.metrics, or.txHelper) if err != nil { return err } @@ -586,13 +605,26 @@ func (or *orchestrator) initComponents(ctx context.Context) (err error) { or.adminEvents = adminevents.NewAdminEventManager(ctx) } - if or.networkmap == nil { - or.networkmap, err = networkmap.NewNetworkMap(ctx, or.database, or.broadcast, or.dataexchange, or.identity, or.syncasync) + return nil +} + +func (or *orchestrator) initComponents(ctx context.Context) (err error) { + + if or.data == nil { + or.data, err = data.NewDataManager(ctx, or.database, or.sharedstorage, or.dataexchange) if err != nil { return err } } + if err := or.initManagers(ctx); err != nil { + return err + } + + if err := or.initEventHandlers(ctx); err != nil { + return err + } + or.syncasync.Init(or.events) return nil diff --git a/internal/orchestrator/orchestrator_test.go b/internal/orchestrator/orchestrator_test.go index e16f20bdaa..a802c1b5e6 100644 --- a/internal/orchestrator/orchestrator_test.go +++ b/internal/orchestrator/orchestrator_test.go @@ -34,7 +34,8 @@ import ( "github.com/hyperledger/firefly/mocks/databasemocks" "github.com/hyperledger/firefly/mocks/dataexchangemocks" "github.com/hyperledger/firefly/mocks/datamocks" - "github.com/hyperledger/firefly/mocks/definitionsmocks" + "github.com/hyperledger/firefly/mocks/defhandlermocks" + "github.com/hyperledger/firefly/mocks/defsendermocks" "github.com/hyperledger/firefly/mocks/eventmocks" "github.com/hyperledger/firefly/mocks/identitymanagermocks" "github.com/hyperledger/firefly/mocks/identitymocks" @@ -81,7 +82,8 @@ type testOrchestrator struct { mth *txcommonmocks.Helper msd *shareddownloadmocks.Manager mae *admineventsmocks.Manager - mdh *definitionsmocks.DefinitionHandler + mdh *defhandlermocks.DefinitionHandler + mds *defsendermocks.Sender } func newTestOrchestrator() *testOrchestrator { @@ -113,7 +115,8 @@ func newTestOrchestrator() *testOrchestrator { mth: &txcommonmocks.Helper{}, msd: &shareddownloadmocks.Manager{}, mae: &admineventsmocks.Manager{}, - mdh: &definitionsmocks.DefinitionHandler{}, + mdh: &defhandlermocks.DefinitionHandler{}, + mds: &defsendermocks.Sender{}, } tor.orchestrator.database = tor.mdi tor.orchestrator.data = tor.mdm @@ -136,7 +139,8 @@ func newTestOrchestrator() *testOrchestrator { tor.orchestrator.sharedDownload = tor.msd tor.orchestrator.adminEvents = tor.mae tor.orchestrator.txHelper = tor.mth - tor.orchestrator.definitions = tor.mdh + tor.orchestrator.defhandler = tor.mdh + tor.orchestrator.defsender = tor.mds tor.mdi.On("Name").Return("mock-di").Maybe() tor.mem.On("Name").Return("mock-ei").Maybe() tor.mps.On("Name").Return("mock-ps").Maybe() @@ -589,11 +593,19 @@ func TestInitContractsComponentFail(t *testing.T) { func TestInitDefinitionsComponentFail(t *testing.T) { or := newTestOrchestrator() or.database = nil - or.definitions = nil + or.defhandler = nil err := or.initComponents(context.Background()) assert.Regexp(t, "FF10128", err) } +func TestInitDefinitionSenderComponentFail(t *testing.T) { + or := newTestOrchestrator() + or.data = nil + or.defsender = nil + err := or.initManagers(context.Background()) + assert.Regexp(t, "FF10128", err) +} + func TestInitBatchPinComponentFail(t *testing.T) { or := newTestOrchestrator() or.database = nil @@ -744,6 +756,7 @@ func TestInitOK(t *testing.T) { assert.False(t, or.IsPreInit()) assert.Equal(t, or.mbm, or.Broadcast()) assert.Equal(t, or.mpm, or.PrivateMessaging()) + assert.Equal(t, or.mds, or.DefinitionSender()) assert.Equal(t, or.mem, or.Events()) assert.Equal(t, or.mba, or.BatchManager()) assert.Equal(t, or.mnm, or.NetworkMap()) diff --git a/mocks/broadcastmocks/manager.go b/mocks/broadcastmocks/manager.go index e3745a46b4..8d65bc875c 100644 --- a/mocks/broadcastmocks/manager.go +++ b/mocks/broadcastmocks/manager.go @@ -16,98 +16,6 @@ type Manager struct { mock.Mock } -// BroadcastDatatype provides a mock function with given fields: ctx, ns, datatype, waitConfirm -func (_m *Manager) BroadcastDatatype(ctx context.Context, ns string, datatype *fftypes.Datatype, waitConfirm bool) (*fftypes.Message, error) { - ret := _m.Called(ctx, ns, datatype, waitConfirm) - - var r0 *fftypes.Message - if rf, ok := ret.Get(0).(func(context.Context, string, *fftypes.Datatype, bool) *fftypes.Message); ok { - r0 = rf(ctx, ns, datatype, waitConfirm) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*fftypes.Message) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, *fftypes.Datatype, bool) error); ok { - r1 = rf(ctx, ns, datatype, waitConfirm) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// BroadcastDefinition provides a mock function with given fields: ctx, ns, def, signingIdentity, tag, waitConfirm -func (_m *Manager) BroadcastDefinition(ctx context.Context, ns string, def fftypes.Definition, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (*fftypes.Message, error) { - ret := _m.Called(ctx, ns, def, signingIdentity, tag, waitConfirm) - - var r0 *fftypes.Message - if rf, ok := ret.Get(0).(func(context.Context, string, fftypes.Definition, *fftypes.SignerRef, string, bool) *fftypes.Message); ok { - r0 = rf(ctx, ns, def, signingIdentity, tag, waitConfirm) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*fftypes.Message) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, fftypes.Definition, *fftypes.SignerRef, string, bool) error); ok { - r1 = rf(ctx, ns, def, signingIdentity, tag, waitConfirm) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// BroadcastDefinitionAsNode provides a mock function with given fields: ctx, ns, def, tag, waitConfirm -func (_m *Manager) BroadcastDefinitionAsNode(ctx context.Context, ns string, def fftypes.Definition, tag string, waitConfirm bool) (*fftypes.Message, error) { - ret := _m.Called(ctx, ns, def, tag, waitConfirm) - - var r0 *fftypes.Message - if rf, ok := ret.Get(0).(func(context.Context, string, fftypes.Definition, string, bool) *fftypes.Message); ok { - r0 = rf(ctx, ns, def, tag, waitConfirm) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*fftypes.Message) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, fftypes.Definition, string, bool) error); ok { - r1 = rf(ctx, ns, def, tag, waitConfirm) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// BroadcastIdentityClaim provides a mock function with given fields: ctx, ns, def, signingIdentity, tag, waitConfirm -func (_m *Manager) BroadcastIdentityClaim(ctx context.Context, ns string, def *fftypes.IdentityClaim, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (*fftypes.Message, error) { - ret := _m.Called(ctx, ns, def, signingIdentity, tag, waitConfirm) - - var r0 *fftypes.Message - if rf, ok := ret.Get(0).(func(context.Context, string, *fftypes.IdentityClaim, *fftypes.SignerRef, string, bool) *fftypes.Message); ok { - r0 = rf(ctx, ns, def, signingIdentity, tag, waitConfirm) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*fftypes.Message) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, *fftypes.IdentityClaim, *fftypes.SignerRef, string, bool) error); ok { - r1 = rf(ctx, ns, def, signingIdentity, tag, waitConfirm) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // BroadcastMessage provides a mock function with given fields: ctx, ns, in, waitConfirm func (_m *Manager) BroadcastMessage(ctx context.Context, ns string, in *fftypes.MessageInOut, waitConfirm bool) (*fftypes.Message, error) { ret := _m.Called(ctx, ns, in, waitConfirm) @@ -131,52 +39,6 @@ func (_m *Manager) BroadcastMessage(ctx context.Context, ns string, in *fftypes. return r0, r1 } -// BroadcastNamespace provides a mock function with given fields: ctx, ns, waitConfirm -func (_m *Manager) BroadcastNamespace(ctx context.Context, ns *fftypes.Namespace, waitConfirm bool) (*fftypes.Message, error) { - ret := _m.Called(ctx, ns, waitConfirm) - - var r0 *fftypes.Message - if rf, ok := ret.Get(0).(func(context.Context, *fftypes.Namespace, bool) *fftypes.Message); ok { - r0 = rf(ctx, ns, waitConfirm) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*fftypes.Message) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, *fftypes.Namespace, bool) error); ok { - r1 = rf(ctx, ns, waitConfirm) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// BroadcastTokenPool provides a mock function with given fields: ctx, ns, pool, waitConfirm -func (_m *Manager) BroadcastTokenPool(ctx context.Context, ns string, pool *fftypes.TokenPoolAnnouncement, waitConfirm bool) (*fftypes.Message, error) { - ret := _m.Called(ctx, ns, pool, waitConfirm) - - var r0 *fftypes.Message - if rf, ok := ret.Get(0).(func(context.Context, string, *fftypes.TokenPoolAnnouncement, bool) *fftypes.Message); ok { - r0 = rf(ctx, ns, pool, waitConfirm) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*fftypes.Message) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(context.Context, string, *fftypes.TokenPoolAnnouncement, bool) error); ok { - r1 = rf(ctx, ns, pool, waitConfirm) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // Name provides a mock function with given fields: func (_m *Manager) Name() string { ret := _m.Called() diff --git a/mocks/definitionsmocks/definition_handler.go b/mocks/defhandlermocks/definition_handler.go similarity index 51% rename from mocks/definitionsmocks/definition_handler.go rename to mocks/defhandlermocks/definition_handler.go index 89990e72a5..00991bfedf 100644 --- a/mocks/definitionsmocks/definition_handler.go +++ b/mocks/defhandlermocks/definition_handler.go @@ -1,11 +1,11 @@ // Code generated by mockery v1.0.0. DO NOT EDIT. -package definitionsmocks +package defhandlermocks import ( context "context" - definitions "github.com/hyperledger/firefly/internal/definitions" + defhandler "github.com/hyperledger/firefly/internal/defhandler" fftypes "github.com/hyperledger/firefly/pkg/fftypes" mock "github.com/stretchr/testify/mock" @@ -17,18 +17,18 @@ type DefinitionHandler struct { } // HandleDefinitionBroadcast provides a mock function with given fields: ctx, state, msg, data, tx -func (_m *DefinitionHandler) HandleDefinitionBroadcast(ctx context.Context, state definitions.DefinitionBatchState, msg *fftypes.Message, data fftypes.DataArray, tx *fftypes.UUID) (definitions.HandlerResult, error) { +func (_m *DefinitionHandler) HandleDefinitionBroadcast(ctx context.Context, state defhandler.DefinitionBatchState, msg *fftypes.Message, data fftypes.DataArray, tx *fftypes.UUID) (defhandler.HandlerResult, error) { ret := _m.Called(ctx, state, msg, data, tx) - var r0 definitions.HandlerResult - if rf, ok := ret.Get(0).(func(context.Context, definitions.DefinitionBatchState, *fftypes.Message, fftypes.DataArray, *fftypes.UUID) definitions.HandlerResult); ok { + var r0 defhandler.HandlerResult + if rf, ok := ret.Get(0).(func(context.Context, defhandler.DefinitionBatchState, *fftypes.Message, fftypes.DataArray, *fftypes.UUID) defhandler.HandlerResult); ok { r0 = rf(ctx, state, msg, data, tx) } else { - r0 = ret.Get(0).(definitions.HandlerResult) + r0 = ret.Get(0).(defhandler.HandlerResult) } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, definitions.DefinitionBatchState, *fftypes.Message, fftypes.DataArray, *fftypes.UUID) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, defhandler.DefinitionBatchState, *fftypes.Message, fftypes.DataArray, *fftypes.UUID) error); ok { r1 = rf(ctx, state, msg, data, tx) } else { r1 = ret.Error(1) diff --git a/mocks/defsendermocks/sender.go b/mocks/defsendermocks/sender.go new file mode 100644 index 0000000000..468a567883 --- /dev/null +++ b/mocks/defsendermocks/sender.go @@ -0,0 +1,168 @@ +// Code generated by mockery v1.0.0. DO NOT EDIT. + +package defsendermocks + +import ( + context "context" + + fftypes "github.com/hyperledger/firefly/pkg/fftypes" + + mock "github.com/stretchr/testify/mock" +) + +// Sender is an autogenerated mock type for the Sender type +type Sender struct { + mock.Mock +} + +// BroadcastDatatype provides a mock function with given fields: ctx, ns, datatype, waitConfirm +func (_m *Sender) BroadcastDatatype(ctx context.Context, ns string, datatype *fftypes.Datatype, waitConfirm bool) (*fftypes.Message, error) { + ret := _m.Called(ctx, ns, datatype, waitConfirm) + + var r0 *fftypes.Message + if rf, ok := ret.Get(0).(func(context.Context, string, *fftypes.Datatype, bool) *fftypes.Message); ok { + r0 = rf(ctx, ns, datatype, waitConfirm) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*fftypes.Message) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string, *fftypes.Datatype, bool) error); ok { + r1 = rf(ctx, ns, datatype, waitConfirm) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// BroadcastDefinition provides a mock function with given fields: ctx, ns, def, signingIdentity, tag, waitConfirm +func (_m *Sender) BroadcastDefinition(ctx context.Context, ns string, def fftypes.Definition, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (*fftypes.Message, error) { + ret := _m.Called(ctx, ns, def, signingIdentity, tag, waitConfirm) + + var r0 *fftypes.Message + if rf, ok := ret.Get(0).(func(context.Context, string, fftypes.Definition, *fftypes.SignerRef, string, bool) *fftypes.Message); ok { + r0 = rf(ctx, ns, def, signingIdentity, tag, waitConfirm) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*fftypes.Message) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string, fftypes.Definition, *fftypes.SignerRef, string, bool) error); ok { + r1 = rf(ctx, ns, def, signingIdentity, tag, waitConfirm) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// BroadcastDefinitionAsNode provides a mock function with given fields: ctx, ns, def, tag, waitConfirm +func (_m *Sender) BroadcastDefinitionAsNode(ctx context.Context, ns string, def fftypes.Definition, tag string, waitConfirm bool) (*fftypes.Message, error) { + ret := _m.Called(ctx, ns, def, tag, waitConfirm) + + var r0 *fftypes.Message + if rf, ok := ret.Get(0).(func(context.Context, string, fftypes.Definition, string, bool) *fftypes.Message); ok { + r0 = rf(ctx, ns, def, tag, waitConfirm) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*fftypes.Message) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string, fftypes.Definition, string, bool) error); ok { + r1 = rf(ctx, ns, def, tag, waitConfirm) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// BroadcastIdentityClaim provides a mock function with given fields: ctx, ns, def, signingIdentity, tag, waitConfirm +func (_m *Sender) BroadcastIdentityClaim(ctx context.Context, ns string, def *fftypes.IdentityClaim, signingIdentity *fftypes.SignerRef, tag string, waitConfirm bool) (*fftypes.Message, error) { + ret := _m.Called(ctx, ns, def, signingIdentity, tag, waitConfirm) + + var r0 *fftypes.Message + if rf, ok := ret.Get(0).(func(context.Context, string, *fftypes.IdentityClaim, *fftypes.SignerRef, string, bool) *fftypes.Message); ok { + r0 = rf(ctx, ns, def, signingIdentity, tag, waitConfirm) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*fftypes.Message) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string, *fftypes.IdentityClaim, *fftypes.SignerRef, string, bool) error); ok { + r1 = rf(ctx, ns, def, signingIdentity, tag, waitConfirm) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// BroadcastNamespace provides a mock function with given fields: ctx, ns, waitConfirm +func (_m *Sender) BroadcastNamespace(ctx context.Context, ns *fftypes.Namespace, waitConfirm bool) (*fftypes.Message, error) { + ret := _m.Called(ctx, ns, waitConfirm) + + var r0 *fftypes.Message + if rf, ok := ret.Get(0).(func(context.Context, *fftypes.Namespace, bool) *fftypes.Message); ok { + r0 = rf(ctx, ns, waitConfirm) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*fftypes.Message) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, *fftypes.Namespace, bool) error); ok { + r1 = rf(ctx, ns, waitConfirm) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// BroadcastTokenPool provides a mock function with given fields: ctx, ns, pool, waitConfirm +func (_m *Sender) BroadcastTokenPool(ctx context.Context, ns string, pool *fftypes.TokenPoolAnnouncement, waitConfirm bool) (*fftypes.Message, error) { + ret := _m.Called(ctx, ns, pool, waitConfirm) + + var r0 *fftypes.Message + if rf, ok := ret.Get(0).(func(context.Context, string, *fftypes.TokenPoolAnnouncement, bool) *fftypes.Message); ok { + r0 = rf(ctx, ns, pool, waitConfirm) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*fftypes.Message) + } + } + + var r1 error + if rf, ok := ret.Get(1).(func(context.Context, string, *fftypes.TokenPoolAnnouncement, bool) error); ok { + r1 = rf(ctx, ns, pool, waitConfirm) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// Name provides a mock function with given fields: +func (_m *Sender) Name() string { + ret := _m.Called() + + var r0 string + if rf, ok := ret.Get(0).(func() string); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(string) + } + + return r0 +} diff --git a/mocks/orchestratormocks/orchestrator.go b/mocks/orchestratormocks/orchestrator.go index 5169958695..dd2c906bce 100644 --- a/mocks/orchestratormocks/orchestrator.go +++ b/mocks/orchestratormocks/orchestrator.go @@ -18,6 +18,8 @@ import ( database "github.com/hyperledger/firefly/pkg/database" + defsender "github.com/hyperledger/firefly/internal/defsender" + events "github.com/hyperledger/firefly/internal/events" fftypes "github.com/hyperledger/firefly/pkg/fftypes" @@ -180,6 +182,22 @@ func (_m *Orchestrator) Data() data.Manager { return r0 } +// DefinitionSender provides a mock function with given fields: +func (_m *Orchestrator) DefinitionSender() defsender.Sender { + ret := _m.Called() + + var r0 defsender.Sender + if rf, ok := ret.Get(0).(func() defsender.Sender); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(defsender.Sender) + } + } + + return r0 +} + // DeleteConfigRecord provides a mock function with given fields: ctx, key func (_m *Orchestrator) DeleteConfigRecord(ctx context.Context, key string) error { ret := _m.Called(ctx, key)