github.com/onflow/flow-go@v0.35.7-crescendo-preview.23-atree-inlining/network/internal/testutils/wrapper.go (about) 1 package testutils 2 3 import ( 4 "fmt" 5 6 "github.com/onflow/flow-go/model/flow" 7 "github.com/onflow/flow-go/network" 8 ) 9 10 // ConduitSendWrapperFunc is a wrapper around the set of methods offered by the 11 // Conduit (e.g., Publish). This data type is solely introduced at the test level. 12 // Its primary purpose is to make the same test reusable on different Conduit methods. 13 type ConduitSendWrapperFunc func(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error 14 15 type ConduitWrapper struct{} 16 17 // Publish defines a function that receives a message, conduit of an engine instance, and 18 // a set target IDs. It then sends the message to the target IDs using the Publish method of conduit. 19 func (c *ConduitWrapper) Publish(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error { 20 return conduit.Publish(msg, targetIDs...) 21 } 22 23 // Unicast defines a function that receives a message, conduit of an engine instance, and 24 // a set of target IDs. It then sends the message to the target IDs using individual Unicasts to each 25 // target in the underlying network. 26 func (c *ConduitWrapper) Unicast(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error { 27 for _, id := range targetIDs { 28 if err := conduit.Unicast(msg, id); err != nil { 29 return fmt.Errorf("could not unicast to node ID %x: %w", id, err) 30 } 31 } 32 return nil 33 } 34 35 // Multicast defines a function that receives a message, conduit of an engine instance, and 36 // a set of target ID. It then sends the message to the target IDs using the Multicast method of conduit. 37 func (c *ConduitWrapper) Multicast(msg interface{}, conduit network.Conduit, targetIDs ...flow.Identifier) error { 38 return conduit.Multicast(msg, uint(len(targetIDs)), targetIDs...) 39 }