github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/network/proxy/network_test.go (about) 1 package proxy_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/mock" 7 "github.com/stretchr/testify/suite" 8 9 "github.com/onflow/flow-go/model/flow" 10 "github.com/onflow/flow-go/network" 11 "github.com/onflow/flow-go/network/channels" 12 "github.com/onflow/flow-go/network/mocknetwork" 13 "github.com/onflow/flow-go/network/proxy" 14 "github.com/onflow/flow-go/utils/unittest" 15 ) 16 17 func getEvent() interface{} { 18 return struct { 19 foo string 20 }{ 21 foo: "bar", 22 } 23 } 24 25 type Suite struct { 26 suite.Suite 27 net network.EngineRegistry 28 targetNodeID flow.Identifier 29 proxyNet *proxy.ProxyNetwork 30 con *mocknetwork.Conduit 31 engine network.Engine 32 } 33 34 func TestProxyNetwork(t *testing.T) { 35 suite.Run(t, new(Suite)) 36 } 37 38 func (suite *Suite) SetupTest() { 39 net := new(mocknetwork.Network) 40 suite.net = net 41 suite.con = new(mocknetwork.Conduit) 42 suite.targetNodeID = unittest.IdentifierFixture() 43 suite.proxyNet = proxy.NewProxyNetwork(suite.net, suite.targetNodeID) 44 suite.engine = new(mocknetwork.Engine) 45 46 net.On("Register", mock.AnythingOfType("channels.Channel"), mock.Anything).Return(suite.con, nil) 47 } 48 49 // TestUnicast tests that the Unicast method is translated to a unicast to the target node 50 // on the underlying network instance. 51 func (suite *Suite) TestUnicast() { 52 channel := channels.TestNetworkChannel 53 targetID := unittest.IdentifierFixture() 54 event := getEvent() 55 56 con, err := suite.proxyNet.Register(channel, suite.engine) 57 suite.Assert().NoError(err) 58 59 suite.con.On("Unicast", event, suite.targetNodeID).Return(nil).Once() 60 61 err = con.Unicast(event, targetID) 62 suite.Assert().NoError(err) 63 64 suite.con.AssertNumberOfCalls(suite.T(), "Unicast", 1) 65 suite.con.AssertExpectations(suite.T()) 66 } 67 68 // TestPublish tests that the Publish method is translated to a publish to the target node 69 // on the underlying network instance. 70 func (suite *Suite) TestPublish() { 71 channel := channels.TestNetworkChannel 72 targetIDs := make([]flow.Identifier, 10) 73 74 for i := 0; i < 10; i++ { 75 targetIDs = append(targetIDs, unittest.IdentifierFixture()) 76 } 77 78 event := getEvent() 79 80 con, err := suite.proxyNet.Register(channel, suite.engine) 81 suite.Assert().NoError(err) 82 83 suite.con.On("Publish", event, suite.targetNodeID).Return(nil).Once() 84 85 err = con.Publish(event, targetIDs...) 86 suite.Assert().NoError(err) 87 88 suite.con.AssertNumberOfCalls(suite.T(), "Publish", 1) 89 suite.con.AssertExpectations(suite.T()) 90 } 91 92 // TestUnicast tests that the Multicast method is translated to a multicast to the target node 93 // on the underlying network instance. 94 func (suite *Suite) TestMulticast() { 95 channel := channels.TestNetworkChannel 96 targetIDs := make([]flow.Identifier, 10) 97 98 for i := 0; i < 10; i++ { 99 targetIDs = append(targetIDs, unittest.IdentifierFixture()) 100 } 101 102 event := getEvent() 103 104 con, err := suite.proxyNet.Register(channel, suite.engine) 105 suite.Assert().NoError(err) 106 107 suite.con.On("Multicast", event, uint(1), suite.targetNodeID).Return(nil).Once() 108 109 err = con.Multicast(event, 5, targetIDs...) 110 suite.Assert().NoError(err) 111 112 suite.con.AssertNumberOfCalls(suite.T(), "Multicast", 1) 113 suite.con.AssertExpectations(suite.T()) 114 } 115 116 // TestClose tests that closing the proxy conduit closes the wrapped conduit. 117 func (suite *Suite) TestClose() { 118 channel := channels.TestNetworkChannel 119 120 con, err := suite.proxyNet.Register(channel, suite.engine) 121 suite.Assert().NoError(err) 122 123 suite.con.On("Close").Return(nil).Once() 124 125 err = con.Close() 126 suite.Assert().NoError(err) 127 128 suite.con.AssertNumberOfCalls(suite.T(), "Close", 1) 129 suite.con.AssertExpectations(suite.T()) 130 }