Skip to content

Commit f4d01e2

Browse files
[PRIV-128] Add DONForCapability to capability registry
1 parent df24f46 commit f4d01e2

File tree

7 files changed

+356
-33
lines changed

7 files changed

+356
-33
lines changed

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

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

81+
func (cr *capabilitiesRegistryClient) DONForCapability(ctx context.Context, capabilityID string) (capabilities.DON, []capabilities.Node, error) {
82+
res, err := cr.grpc.DONForCapability(ctx, &pb.DONForCapabilityRequest{CapabilityID: capabilityID})
83+
if err != nil {
84+
return capabilities.DON{}, nil, err
85+
}
86+
87+
don := toDON(res.Don)
88+
89+
var nodes []capabilities.Node
90+
for _, n := range res.Nodes {
91+
nodes = append(nodes, cr.nodeFromNodeReply(n))
92+
}
93+
94+
return don, nodes, nil
95+
}
96+
8197
func (cr *capabilitiesRegistryClient) nodeFromNodeReply(nodeReply *pb.NodeReply) capabilities.Node {
8298
var pid *p2ptypes.PeerID
8399
if len(nodeReply.PeerID) > 0 {
@@ -365,6 +381,23 @@ func (c *capabilitiesRegistryServer) NodeByPeerID(ctx context.Context, nodeReque
365381
return c.nodeReplyFromNode(node), nil
366382
}
367383

384+
func (c *capabilitiesRegistryServer) DONForCapability(ctx context.Context, req *pb.DONForCapabilityRequest) (*pb.DONForCapabilityReply, error) {
385+
don, nodes, err := c.impl.DONForCapability(ctx, req.CapabilityID)
386+
if err != nil {
387+
return nil, err
388+
}
389+
390+
var nodesPb []*pb.NodeReply
391+
for _, n := range nodes {
392+
nodesPb = append(nodesPb, c.nodeReplyFromNode(n))
393+
}
394+
395+
return &pb.DONForCapabilityReply{
396+
Don: toPbDON(don),
397+
Nodes: nodesPb,
398+
}, nil
399+
}
400+
368401
func (c *capabilitiesRegistryServer) nodeReplyFromNode(node capabilities.Node) *pb.NodeReply {
369402
workflowDONpb := toPbDON(node.WorkflowDON)
370403

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

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,70 @@ func TestCapabilitiesRegistry_ConfigForCapability_RemoteExecutableConfig(t *test
496496
assert.Equal(t, 2*time.Minute, capConf.RemoteExecutableConfig.RegistrationExpiry)
497497
}
498498

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

pkg/loop/internal/pb/capabilities_registry.pb.go

Lines changed: 139 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/loop/internal/pb/capabilities_registry.proto

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ service CapabilitiesRegistry {
1111
rpc LocalNode (google.protobuf.Empty) returns (NodeReply) {}
1212
rpc NodeByPeerID(NodeRequest) returns (NodeReply) {}
1313
rpc ConfigForCapability (ConfigForCapabilityRequest) returns (ConfigForCapabilityReply) {}
14+
rpc DONForCapability (DONForCapabilityRequest) returns (DONForCapabilityReply) {}
1415
rpc Get (GetRequest) returns (GetReply) {}
1516
rpc GetTrigger (GetTriggerRequest) returns (GetTriggerReply) {}
1617
rpc GetExecutable (GetExecutableRequest) returns (GetExecutableReply) {}
@@ -112,3 +113,12 @@ message ConfigForCapabilityRequest {
112113
message ConfigForCapabilityReply {
113114
loop.CapabilityConfig capability_config = 1;
114115
}
116+
117+
message DONForCapabilityRequest {
118+
string capabilityID = 1;
119+
}
120+
121+
message DONForCapabilityReply {
122+
DON don = 1;
123+
repeated NodeReply nodes = 2;
124+
}

0 commit comments

Comments
 (0)