Skip to content

Commit 75474ab

Browse files
authored
Merge branch 'main' into feature/update-relayer-ccip-provider-interface
2 parents 2f136ca + fcae05e commit 75474ab

8 files changed

Lines changed: 424 additions & 33 deletions

File tree

pkg/capabilities/capabilities.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,11 @@ type ExecutableAndTriggerCapability interface {
292292
ExecutableCapability
293293
}
294294

295+
type DONWithNodes struct {
296+
DON DON
297+
Nodes []Node
298+
}
299+
295300
// DON represents a network of connected nodes.
296301
//
297302
// For an example of an empty DON check, see the following link:

pkg/loop/internal/core/services/capability/capabilities_registry.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,27 @@ func (cr *capabilitiesRegistryClient) NodeByPeerID(ctx context.Context, peerID p
7878
return cr.nodeFromNodeReply(res), nil
7979
}
8080

81+
func (cr *capabilitiesRegistryClient) DONsForCapability(ctx context.Context, capabilityID string) ([]capabilities.DONWithNodes, error) {
82+
res, err := cr.grpc.DONsForCapability(ctx, &pb.DONForCapabilityRequest{CapabilityID: capabilityID})
83+
if err != nil {
84+
return nil, err
85+
}
86+
87+
donsWithNodes := []capabilities.DONWithNodes{}
88+
for _, d := range res.Dons {
89+
don := toDON(d.Don)
90+
var nodes []capabilities.Node
91+
for _, n := range d.Nodes {
92+
nodes = append(nodes, cr.nodeFromNodeReply(n))
93+
}
94+
donsWithNodes = append(donsWithNodes, capabilities.DONWithNodes{
95+
DON: don,
96+
Nodes: nodes,
97+
})
98+
}
99+
return donsWithNodes, nil
100+
}
101+
81102
func (cr *capabilitiesRegistryClient) nodeFromNodeReply(nodeReply *pb.NodeReply) capabilities.Node {
82103
var pid *p2ptypes.PeerID
83104
if len(nodeReply.PeerID) > 0 {
@@ -365,6 +386,30 @@ func (c *capabilitiesRegistryServer) NodeByPeerID(ctx context.Context, nodeReque
365386
return c.nodeReplyFromNode(node), nil
366387
}
367388

389+
func (c *capabilitiesRegistryServer) DONsForCapability(ctx context.Context, req *pb.DONForCapabilityRequest) (*pb.DONForCapabilityReply, error) {
390+
dons, err := c.impl.DONsForCapability(ctx, req.CapabilityID)
391+
if err != nil {
392+
return nil, err
393+
}
394+
395+
donWithNodes := []*pb.DONWithNodes{}
396+
for _, d := range dons {
397+
pbDon := toPbDON(d.DON)
398+
nodes := []*pb.NodeReply{}
399+
for _, n := range d.Nodes {
400+
nodes = append(nodes, c.nodeReplyFromNode(n))
401+
}
402+
donWithNodes = append(donWithNodes, &pb.DONWithNodes{
403+
Don: pbDon,
404+
Nodes: nodes,
405+
})
406+
}
407+
408+
return &pb.DONForCapabilityReply{
409+
Dons: donWithNodes,
410+
}, nil
411+
}
412+
368413
func (c *capabilitiesRegistryServer) nodeReplyFromNode(node capabilities.Node) *pb.NodeReply {
369414
workflowDONpb := toPbDON(node.WorkflowDON)
370415

pkg/loop/internal/core/services/capability/capabilities_registry_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,7 @@ func testCapabilityInfo(t *testing.T, expectedInfo capabilities.CapabilityInfo,
364364
require.Equal(t, expectedInfo.Description, gotInfo.Description)
365365
require.Equal(t, expectedInfo.Version(), gotInfo.Version())
366366
}
367+
367368
func TestToDON(t *testing.T) {
368369
don := &pb.DON{
369370
Id: 0,
@@ -496,6 +497,75 @@ func TestCapabilitiesRegistry_ConfigForCapability_RemoteExecutableConfig(t *test
496497
assert.Equal(t, 2*time.Minute, capConf.RemoteExecutableConfig.RegistrationExpiry)
497498
}
498499

500+
func TestCapabilitiesRegistry_DONsForCapability(t *testing.T) {
501+
stopCh := make(chan struct{})
502+
logger := logger.Test(t)
503+
reg := mocks.NewCapabilitiesRegistry(t)
504+
505+
pluginName := "registry-test"
506+
client, server := plugin.TestPluginGRPCConn(
507+
t,
508+
true,
509+
map[string]plugin.Plugin{
510+
pluginName: &testRegistryPlugin{
511+
impl: reg,
512+
brokerExt: &net.BrokerExt{
513+
BrokerConfig: net.BrokerConfig{
514+
StopCh: stopCh,
515+
Logger: logger,
516+
},
517+
},
518+
},
519+
},
520+
)
521+
522+
defer client.Close()
523+
defer server.Stop()
524+
525+
regClient, err := client.Dispense(pluginName)
526+
require.NoError(t, err)
527+
528+
rc, ok := regClient.(*capabilitiesRegistryClient)
529+
require.True(t, ok)
530+
531+
capID := "some-cap@1.0.0"
532+
533+
donID := uint32(1)
534+
expectedDON := capabilities.DON{
535+
ID: donID,
536+
F: 1,
537+
Members: []p2ptypes.PeerID{
538+
[32]byte{0: 1},
539+
[32]byte{0: 2},
540+
},
541+
}
542+
expectedNodes := []capabilities.Node{
543+
{
544+
PeerID: &p2ptypes.PeerID{0: 1},
545+
NodeOperatorID: 1,
546+
EncryptionPublicKey: [32]byte{0: 1},
547+
CapabilityDONs: []capabilities.DON{},
548+
},
549+
{
550+
PeerID: &p2ptypes.PeerID{0: 2},
551+
NodeOperatorID: 2,
552+
EncryptionPublicKey: [32]byte{0: 2},
553+
CapabilityDONs: []capabilities.DON{},
554+
},
555+
}
556+
expectedDONs := []capabilities.DONWithNodes{
557+
{
558+
DON: expectedDON,
559+
Nodes: expectedNodes,
560+
},
561+
}
562+
reg.On("DONsForCapability", mock.Anything, capID).Once().Return(expectedDONs, nil)
563+
564+
dons, err := rc.DONsForCapability(t.Context(), capID)
565+
require.NoError(t, err)
566+
assert.Equal(t, expectedDONs, dons)
567+
}
568+
499569
func ensureEqual(t *testing.T, expectedNode, actualNode capabilities.Node) {
500570
// check local node struct
501571
require.Equal(t, expectedNode.PeerID, actualNode.PeerID)

0 commit comments

Comments
 (0)