Skip to content

Commit a756227

Browse files
committed
clean up functions
1 parent 830edfa commit a756227

4 files changed

Lines changed: 31 additions & 30 deletions

File tree

pkg/cmd/grantssh/grantssh.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,7 @@ func runGrantSSH(ctx context.Context, t *terminal.Terminal, s GrantSSHStore, opt
139139
// Capture the target node
140140
var node *nodev1.ExternalNode
141141
if opts.interactive {
142-
resp, listErr := client.ListNodes(ctx, connect.NewRequest(&nodev1.ListNodesRequest{
143-
OrganizationId: org.ID,
144-
}))
145-
if listErr != nil {
146-
return breverrors.WrapAndTrace(listErr)
147-
}
148-
nodes := resp.Msg.GetItems()
149-
if len(nodes) == 0 {
150-
return fmt.Errorf("no nodes found in organization")
151-
}
152-
node, err = register.SelectNodeFromList(ctx, t, deps.prompter, deps.registrationStore, nodes)
142+
node, err = register.SelectNodeFromList(ctx, org.ID, t, deps.prompter, deps.registrationStore, client)
153143
} else {
154144
node, err = helpers.ResolveNodeByName(ctx, client, org.ID, opts.nodeName)
155145
}

pkg/cmd/register/sshkeys.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ import (
1212
"strings"
1313
"time"
1414

15+
nodev1connect "buf.build/gen/go/brevdev/devplane/connectrpc/go/devplaneapi/v1/devplaneapiv1connect"
1516
nodev1 "buf.build/gen/go/brevdev/devplane/protocolbuffers/go/devplaneapi/v1"
1617
"connectrpc.com/connect"
18+
breverrors "github.com/brevdev/brev-cli/pkg/errors"
1719

1820
"github.com/brevdev/brev-cli/pkg/config"
1921
"github.com/brevdev/brev-cli/pkg/entity"
@@ -25,7 +27,14 @@ import (
2527
// SelectNodeFromList prompts the user to select a node from the list, then fetches and returns the full node.
2628
// When this machine is registered, that node is marked " — this node" in the list.
2729
// Call this after ListNodes when in interactive mode (same pattern as SelectOrganizationInteractive).
28-
func SelectNodeFromList(ctx context.Context, t *terminal.Terminal, prompter terminal.Selector, registrationStore RegistrationStore, nodes []*nodev1.ExternalNode) (*nodev1.ExternalNode, error) {
30+
func SelectNodeFromList(ctx context.Context, orgID string, t *terminal.Terminal, prompter terminal.Selector, registrationStore RegistrationStore, client nodev1connect.ExternalNodeServiceClient) (*nodev1.ExternalNode, error) {
31+
resp, listErr := client.ListNodes(ctx, connect.NewRequest(&nodev1.ListNodesRequest{
32+
OrganizationId: orgID,
33+
}))
34+
if listErr != nil {
35+
return nil, breverrors.WrapAndTrace(listErr)
36+
}
37+
nodes := resp.Msg.GetItems()
2938
if len(nodes) == 0 {
3039
return nil, fmt.Errorf("no nodes found in organization")
3140
}

pkg/cmd/register/sshkeys_test.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import (
88
"strings"
99
"testing"
1010

11+
nodev1connect "buf.build/gen/go/brevdev/devplane/connectrpc/go/devplaneapi/v1/devplaneapiv1connect"
1112
nodev1 "buf.build/gen/go/brevdev/devplane/protocolbuffers/go/devplaneapi/v1"
13+
"connectrpc.com/connect"
1214

1315
"github.com/brevdev/brev-cli/pkg/terminal"
1416
)
@@ -249,6 +251,17 @@ func (s *captureSelector) Select(_ string, items []string) string {
249251
return items[s.returnIdx]
250252
}
251253

254+
// fakeNodeClient implements nodev1connect.ExternalNodeServiceClient, returning
255+
// canned nodes from ListNodes
256+
type fakeNodeClient struct {
257+
nodev1connect.ExternalNodeServiceClient
258+
nodes []*nodev1.ExternalNode
259+
}
260+
261+
func (f *fakeNodeClient) ListNodes(_ context.Context, _ *connect.Request[nodev1.ListNodesRequest]) (*connect.Response[nodev1.ListNodesResponse], error) {
262+
return connect.NewResponse(&nodev1.ListNodesResponse{Items: f.nodes}), nil
263+
}
264+
252265
func makeNodes(ids ...string) []*nodev1.ExternalNode {
253266
nodes := make([]*nodev1.ExternalNode, len(ids))
254267
for i, id := range ids {
@@ -265,9 +278,9 @@ func TestSelectNodeFromList_ThisNodeMovedToFront(t *testing.T) {
265278
regStore := &mockRegistrationStore{
266279
reg: &DeviceRegistration{ExternalNodeID: "c"},
267280
}
268-
nodes := makeNodes("a", "b", "c", "d")
281+
client := &fakeNodeClient{nodes: makeNodes("a", "b", "c", "d")}
269282

270-
got, err := SelectNodeFromList(context.Background(), terminal.New(), sel, regStore, nodes)
283+
got, err := SelectNodeFromList(context.Background(), "org1", terminal.New(), sel, regStore, client)
271284
if err != nil {
272285
t.Fatalf("unexpected error: %v", err)
273286
}
@@ -293,9 +306,9 @@ func TestSelectNodeFromList_ThisNodeAlreadyFirst(t *testing.T) {
293306
regStore := &mockRegistrationStore{
294307
reg: &DeviceRegistration{ExternalNodeID: "a"},
295308
}
296-
nodes := makeNodes("a", "b", "c")
309+
client := &fakeNodeClient{nodes: makeNodes("a", "b", "c")}
297310

298-
got, err := SelectNodeFromList(context.Background(), terminal.New(), sel, regStore, nodes)
311+
got, err := SelectNodeFromList(context.Background(), "org1", terminal.New(), sel, regStore, client)
299312
if err != nil {
300313
t.Fatalf("unexpected error: %v", err)
301314
}
@@ -311,10 +324,9 @@ func TestSelectNodeFromList_ThisNodeAlreadyFirst(t *testing.T) {
311324
func TestSelectNodeFromList_NoRegistration(t *testing.T) {
312325
sel := &captureSelector{returnIdx: 1}
313326
regStore := &mockRegistrationStore{} // no registration
327+
client := &fakeNodeClient{nodes: makeNodes("a", "b", "c")}
314328

315-
nodes := makeNodes("a", "b", "c")
316-
317-
got, err := SelectNodeFromList(context.Background(), terminal.New(), sel, regStore, nodes)
329+
got, err := SelectNodeFromList(context.Background(), "org1", terminal.New(), sel, regStore, client)
318330
if err != nil {
319331
t.Fatalf("unexpected error: %v", err)
320332
}

pkg/cmd/revokessh/revokessh.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -128,17 +128,7 @@ func runRevokeSSH(ctx context.Context, t *terminal.Terminal, s RevokeSSHStore, o
128128
// Capture the target node
129129
var selectedNode *nodev1.ExternalNode
130130
if opts.interactive {
131-
resp, listErr := client.ListNodes(ctx, connect.NewRequest(&nodev1.ListNodesRequest{
132-
OrganizationId: selectedOrg.ID,
133-
}))
134-
if listErr != nil {
135-
return breverrors.WrapAndTrace(listErr)
136-
}
137-
nodes := resp.Msg.GetItems()
138-
if len(nodes) == 0 {
139-
return fmt.Errorf("no nodes found in organization")
140-
}
141-
node, err := register.SelectNodeFromList(ctx, t, deps.prompter, deps.registrationStore, nodes)
131+
node, err := register.SelectNodeFromList(ctx, selectedOrg.ID, t, deps.prompter, deps.registrationStore, client)
142132
if err != nil {
143133
return err //nolint:wrapcheck // do not present stack trace for this error
144134
}

0 commit comments

Comments
 (0)