diff --git a/go.sum b/go.sum index 7184caf8e8..e8a55523ed 100644 --- a/go.sum +++ b/go.sum @@ -341,8 +341,6 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/getkin/kin-openapi v0.76.1-0.20211007120119-47bb0b2707dc h1:JUXgvs86/exZ9TA9k+TvuqXgcWMYNLFx6KrJmaNbjgM= -github.com/getkin/kin-openapi v0.76.1-0.20211007120119-47bb0b2707dc/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getkin/kin-openapi v0.77.0 h1:yeShypHFCtG6L0ZyIFWAPZuitkybgyIs9Pg3iFVECgQ= github.com/getkin/kin-openapi v0.77.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= diff --git a/internal/broadcast/message_test.go b/internal/broadcast/message_test.go index 874d786ca8..f944a51e7a 100644 --- a/internal/broadcast/message_test.go +++ b/internal/broadcast/message_test.go @@ -19,6 +19,8 @@ package broadcast import ( "bytes" "context" + "encoding/json" + "errors" "fmt" "io" "io/ioutil" @@ -77,6 +79,109 @@ func TestBroadcastMessageOk(t *testing.T) { mdm.AssertExpectations(t) } +func TestBroadcastRootOrg(t *testing.T) { + bm, cancel := newTestBroadcast(t) + defer cancel() + mdi := bm.database.(*databasemocks.Plugin) + mdm := bm.data.(*datamocks.Manager) + mim := bm.identity.(*identitymanagermocks.Manager) + + ctx := context.Background() + rag := mdi.On("RunAsGroup", ctx, mock.Anything) + rag.RunFn = func(a mock.Arguments) { + var fn = a[1].(func(context.Context) error) + rag.ReturnArguments = mock.Arguments{fn(a[0].(context.Context))} + } + + org := fftypes.Organization{ + ID: fftypes.NewUUID(), + Name: "org1", + Parent: "", // root + } + orgBytes, err := json.Marshal(&org) + assert.NoError(t, err) + + data := &fftypes.Data{ + ID: fftypes.NewUUID(), + Value: orgBytes, + Validator: fftypes.MessageTypeDefinition, + } + + mdm.On("GetMessageData", ctx, mock.Anything, mock.Anything).Return([]*fftypes.Data{data}, true, nil) + mdm.On("ResolveInlineDataBroadcast", ctx, "ns1", mock.Anything).Return(fftypes.DataRefs{ + {ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32()}, + }, []*fftypes.DataAndBlob{}, nil) + mdi.On("InsertMessageLocal", ctx, mock.Anything).Return(nil) + mim.On("ResolveInputIdentity", ctx, mock.Anything).Return(nil) + + msg, err := bm.BroadcastMessage(ctx, "ns1", &fftypes.MessageInOut{ + Message: fftypes.Message{ + Header: fftypes.MessageHeader{ + ID: fftypes.NewUUID(), + Type: fftypes.MessageTypeDefinition, + Identity: fftypes.Identity{ + Author: "did:firefly:org/12345", + Key: "0x12345", + }, + }, + Data: fftypes.DataRefs{ + { + ID: data.ID, + Hash: data.Hash, + }, + }, + }, + }, false) + assert.NoError(t, err) + assert.NotNil(t, msg.Data[0].ID) + assert.NotNil(t, msg.Data[0].Hash) + assert.Equal(t, "ns1", msg.Header.Namespace) + + mdi.AssertExpectations(t) + mdm.AssertExpectations(t) +} + +func TestBroadcastRootOrgBadData(t *testing.T) { + bm, cancel := newTestBroadcast(t) + defer cancel() + mdi := bm.database.(*databasemocks.Plugin) + mdm := bm.data.(*datamocks.Manager) + mim := bm.identity.(*identitymanagermocks.Manager) + + ctx := context.Background() + data := &fftypes.Data{ + ID: fftypes.NewUUID(), + Value: []byte("not an org"), + Validator: fftypes.MessageTypeDefinition, + } + + mdm.On("GetMessageData", ctx, mock.Anything, mock.Anything).Return([]*fftypes.Data{data}, true, nil) + mim.On("ResolveInputIdentity", ctx, mock.Anything).Return(errors.New("not registered")) + + _, err := bm.BroadcastMessage(ctx, "ns1", &fftypes.MessageInOut{ + Message: fftypes.Message{ + Header: fftypes.MessageHeader{ + ID: fftypes.NewUUID(), + Type: fftypes.MessageTypeDefinition, + Identity: fftypes.Identity{ + Author: "did:firefly:org/12345", + Key: "0x12345", + }, + }, + Data: fftypes.DataRefs{ + { + ID: data.ID, + Hash: data.Hash, + }, + }, + }, + }, false) + assert.Error(t, err, "not registered") + + mdi.AssertExpectations(t) + mdm.AssertExpectations(t) +} + func TestBroadcastMessageWaitConfirmOk(t *testing.T) { bm, cancel := newTestBroadcast(t) defer cancel()