github.com/kaleido-io/firefly@v0.0.0-20210622132723-8b4b6aacb971/internal/broadcast/message_test.go (about) 1 // Copyright © 2021 Kaleido, Inc. 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 // 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 17 package broadcast 18 19 import ( 20 "context" 21 "fmt" 22 "testing" 23 24 "github.com/kaleido-io/firefly/mocks/blockchainmocks" 25 "github.com/kaleido-io/firefly/mocks/databasemocks" 26 "github.com/kaleido-io/firefly/mocks/datamocks" 27 "github.com/kaleido-io/firefly/pkg/fftypes" 28 "github.com/stretchr/testify/assert" 29 "github.com/stretchr/testify/mock" 30 ) 31 32 func TestBroadcastMessageOk(t *testing.T) { 33 bm, cancel := newTestBroadcast(t) 34 defer cancel() 35 mdi := bm.database.(*databasemocks.Plugin) 36 mdm := bm.data.(*datamocks.Manager) 37 mbi := bm.blockchain.(*blockchainmocks.Plugin) 38 39 ctx := context.Background() 40 rag := mdi.On("RunAsGroup", ctx, mock.Anything) 41 rag.RunFn = func(a mock.Arguments) { 42 var fn = a[1].(func(context.Context) error) 43 rag.ReturnArguments = mock.Arguments{fn(a[0].(context.Context))} 44 } 45 mbi.On("VerifyIdentitySyntax", ctx, "0x12345").Return("0x12345", nil) 46 mdm.On("ResolveInputData", ctx, "ns1", mock.Anything).Return(fftypes.DataRefs{ 47 {ID: fftypes.NewUUID(), Hash: fftypes.NewRandB32()}, 48 }, nil) 49 mdi.On("InsertMessageLocal", ctx, mock.Anything).Return(nil) 50 51 msg, err := bm.BroadcastMessage(ctx, "ns1", &fftypes.MessageInput{ 52 Message: fftypes.Message{ 53 Header: fftypes.MessageHeader{ 54 Author: "0x12345", 55 }, 56 }, 57 InputData: fftypes.InputData{ 58 {Value: fftypes.Byteable(`{"hello": "world"}`)}, 59 }, 60 }) 61 assert.NoError(t, err) 62 assert.NotNil(t, msg.Data[0].ID) 63 assert.NotNil(t, msg.Data[0].Hash) 64 assert.Equal(t, "ns1", msg.Header.Namespace) 65 66 mdi.AssertExpectations(t) 67 mdm.AssertExpectations(t) 68 } 69 70 func TestBroadcastMessageBadInput(t *testing.T) { 71 bm, cancel := newTestBroadcast(t) 72 defer cancel() 73 mdi := bm.database.(*databasemocks.Plugin) 74 mdm := bm.data.(*datamocks.Manager) 75 mbi := bm.blockchain.(*blockchainmocks.Plugin) 76 77 ctx := context.Background() 78 mbi.On("VerifyIdentitySyntax", ctx, mock.Anything).Return("0x12345", nil) 79 rag := mdi.On("RunAsGroup", ctx, mock.Anything) 80 rag.RunFn = func(a mock.Arguments) { 81 var fn = a[1].(func(context.Context) error) 82 rag.ReturnArguments = mock.Arguments{fn(a[0].(context.Context))} 83 } 84 mdm.On("ResolveInputData", ctx, "ns1", mock.Anything).Return(nil, fmt.Errorf("pop")) 85 86 _, err := bm.BroadcastMessage(ctx, "ns1", &fftypes.MessageInput{ 87 InputData: fftypes.InputData{ 88 {Value: fftypes.Byteable(`{"hello": "world"}`)}, 89 }, 90 }) 91 assert.EqualError(t, err, "pop") 92 93 mdi.AssertExpectations(t) 94 mdm.AssertExpectations(t) 95 }