Skip to content

Commit

Permalink
Add more endpoints
Browse files Browse the repository at this point in the history
- Added AddNode and SetDependency to the Graph service

Signed-off-by: neilnaveen <[email protected]>
  • Loading branch information
neilnaveen committed Nov 26, 2024
1 parent d8d9397 commit 58db48d
Show file tree
Hide file tree
Showing 7 changed files with 503 additions and 127 deletions.
28 changes: 28 additions & 0 deletions api/v1/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,34 @@ func (s *Service) GetNodesByGlob(ctx context.Context, req *connect.Request[servi
return connect.NewResponse(&service.GetNodesByGlobResponse{Nodes: serviceNodes}), nil
}

func (s *Service) AddNode(ctx context.Context, req *connect.Request[service.AddNodeRequest]) (*connect.Response[service.AddNodeResponse], error) {
resultNode, err := graph.AddNode(s.storage, req.Msg.Node.Type, req.Msg.Node.Metadata, req.Msg.Node.Name)
if err != nil {
return nil, err
}

Check warning on line 96 in api/v1/service.go

View check run for this annotation

Codecov / codecov/patch

api/v1/service.go#L95-L96

Added lines #L95 - L96 were not covered by tests
serviceNode, err := NodeToServiceNode(resultNode)
if err != nil {
return nil, err
}

Check warning on line 100 in api/v1/service.go

View check run for this annotation

Codecov / codecov/patch

api/v1/service.go#L99-L100

Added lines #L99 - L100 were not covered by tests
return connect.NewResponse(&service.AddNodeResponse{Node: serviceNode}), nil
}

func (s *Service) SetDependency(ctx context.Context, req *connect.Request[service.SetDependencyRequest]) (*connect.Response[emptypb.Empty], error) {
fromNode, err := s.storage.GetNode(req.Msg.NodeId)
if err != nil {
return nil, err
}

Check warning on line 108 in api/v1/service.go

View check run for this annotation

Codecov / codecov/patch

api/v1/service.go#L107-L108

Added lines #L107 - L108 were not covered by tests
toNode, err := s.storage.GetNode(req.Msg.DependencyID)
if err != nil {
return nil, err
}

Check warning on line 112 in api/v1/service.go

View check run for this annotation

Codecov / codecov/patch

api/v1/service.go#L111-L112

Added lines #L111 - L112 were not covered by tests
err = fromNode.SetDependency(s.storage, toNode)
if err != nil {
return nil, err
}

Check warning on line 116 in api/v1/service.go

View check run for this annotation

Codecov / codecov/patch

api/v1/service.go#L115-L116

Added lines #L115 - L116 were not covered by tests
return connect.NewResponse(&emptypb.Empty{}), nil
}

func (s *Service) Cache(ctx context.Context, req *connect.Request[emptypb.Empty]) (*connect.Response[emptypb.Empty], error) {
err := graph.Cache(s.storage)
if err != nil {
Expand Down
15 changes: 15 additions & 0 deletions api/v1/service.proto
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,19 @@ message GetNodesByGlobResponse {
repeated Node nodes = 1;
}

message AddNodeRequest {
Node node = 1;
}

message AddNodeResponse {
Node node = 1;
}

message SetDependencyRequest {
uint32 nodeId = 1;
uint32 dependencyID = 2;
}

message IngestSBOMRequest {
bytes sbom = 1;
}
Expand Down Expand Up @@ -98,6 +111,8 @@ service GraphService {
rpc GetNode(GetNodeRequest) returns (GetNodeResponse) {}
rpc GetNodesByGlob(GetNodesByGlobRequest) returns (GetNodesByGlobResponse) {}
rpc GetNodeByName(GetNodeByNameRequest) returns (GetNodeByNameResponse) {}
rpc AddNode(AddNodeRequest) returns (AddNodeResponse) {}
rpc SetDependency(SetDependencyRequest) returns (google.protobuf.Empty) {}
}

service IngestService {
Expand Down
39 changes: 39 additions & 0 deletions api/v1/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,45 @@ func TestIngestScorecard(t *testing.T) {
require.NoError(t, err)
}

func TestAddNode(t *testing.T) {
s := setupService()
addNodeReq := connect.NewRequest(&service.AddNodeRequest{
Node: &service.Node{Name: "test_node", Type: "type1"},
})
_, err := s.AddNode(context.Background(), addNodeReq)
require.NoError(t, err)
getNodeReq := connect.NewRequest(&service.GetNodeByNameRequest{Name: "test_node"})
resp, err := s.GetNodeByName(context.Background(), getNodeReq)
require.NoError(t, err)
assert.NotNil(t, resp.Msg.Node)
assert.Equal(t, "test_node", resp.Msg.Node.Name)
}

func TestSetDependency(t *testing.T) {
s := setupService()
addNodeReq := connect.NewRequest(&service.AddNodeRequest{
Node: &service.Node{Name: "test_node"},
})
node1, err := s.AddNode(context.Background(), addNodeReq)
require.NoError(t, err)
addNodeReq2 := connect.NewRequest(&service.AddNodeRequest{
Node: &service.Node{Name: "test_node2"},
})
node2, err := s.AddNode(context.Background(), addNodeReq2)
require.NoError(t, err)
setDependencyReq := connect.NewRequest(&service.SetDependencyRequest{
NodeId: node1.Msg.Node.Id,
DependencyID: node2.Msg.Node.Id,
})
_, err = s.SetDependency(context.Background(), setDependencyReq)
require.NoError(t, err)
getNodeReq := connect.NewRequest(&service.GetNodeByNameRequest{Name: "test_node"})
resp, err := s.GetNodeByName(context.Background(), getNodeReq)
require.NoError(t, err)
assert.NotNil(t, resp.Msg.Node)
assert.Equal(t, resp.Msg.Node.Dependencies[0], node2.Msg.Node.Id)
}

func TestHealthCheck(t *testing.T) {
s := setupService()
req := connect.NewRequest(&emptypb.Empty{})
Expand Down
11 changes: 11 additions & 0 deletions cmd/query/getMetadata/getMetadata_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
apiv1 "github.com/bitbomdev/minefield/gen/api/v1"
"github.com/spf13/cobra"
"github.com/zeebo/assert"
"google.golang.org/protobuf/types/known/emptypb"
)

func TestFormatTable(t *testing.T) {
Expand Down Expand Up @@ -48,6 +49,8 @@ type mockGraphServiceClient struct {
GetNodesByGlobFunc func(ctx context.Context, req *connect.Request[apiv1.GetNodesByGlobRequest]) (*connect.Response[apiv1.GetNodesByGlobResponse], error)
GetNodeFunc func(ctx context.Context, req *connect.Request[apiv1.GetNodeRequest]) (*connect.Response[apiv1.GetNodeResponse], error)
GetNodeByNameFunc func(ctx context.Context, req *connect.Request[apiv1.GetNodeByNameRequest]) (*connect.Response[apiv1.GetNodeByNameResponse], error)
AddNodeFunc func(ctx context.Context, req *connect.Request[apiv1.AddNodeRequest]) (*connect.Response[apiv1.AddNodeResponse], error)
SetDependencyFunc func(ctx context.Context, req *connect.Request[apiv1.SetDependencyRequest]) (*connect.Response[emptypb.Empty], error)
}

func (m *mockGraphServiceClient) GetNodesByGlob(ctx context.Context, req *connect.Request[apiv1.GetNodesByGlobRequest]) (*connect.Response[apiv1.GetNodesByGlobResponse], error) {
Expand All @@ -62,6 +65,14 @@ func (m *mockGraphServiceClient) GetNodeByName(ctx context.Context, req *connect
return m.GetNodeByNameFunc(ctx, req)
}

func (m *mockGraphServiceClient) AddNode(ctx context.Context, req *connect.Request[apiv1.AddNodeRequest]) (*connect.Response[apiv1.AddNodeResponse], error) {
return m.AddNodeFunc(ctx, req)
}

func (m *mockGraphServiceClient) SetDependency(ctx context.Context, req *connect.Request[apiv1.SetDependencyRequest]) (*connect.Response[emptypb.Empty], error) {
return m.SetDependencyFunc(ctx, req)
}

func TestRun(t *testing.T) {
tests := []struct {
name string
Expand Down
10 changes: 10 additions & 0 deletions cmd/query/globsearch/globsearch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
apiv1 "github.com/bitbomdev/minefield/gen/api/v1"
"github.com/spf13/cobra"
"github.com/zeebo/assert"
"google.golang.org/protobuf/types/known/emptypb"
)

func TestFormatTable(t *testing.T) {
Expand Down Expand Up @@ -163,6 +164,8 @@ type mockGraphServiceClient struct {
GetNodesByGlobFunc func(ctx context.Context, req *connect.Request[apiv1.GetNodesByGlobRequest]) (*connect.Response[apiv1.GetNodesByGlobResponse], error)
GetNodeFunc func(ctx context.Context, req *connect.Request[apiv1.GetNodeRequest]) (*connect.Response[apiv1.GetNodeResponse], error)
GetNodeByNameFunc func(ctx context.Context, req *connect.Request[apiv1.GetNodeByNameRequest]) (*connect.Response[apiv1.GetNodeByNameResponse], error)
SetDependencyFunc func(ctx context.Context, req *connect.Request[apiv1.SetDependencyRequest]) (*connect.Response[emptypb.Empty], error)
AddNodeFunc func(ctx context.Context, req *connect.Request[apiv1.AddNodeRequest]) (*connect.Response[apiv1.AddNodeResponse], error)
}

func (m *mockGraphServiceClient) GetNodesByGlob(ctx context.Context, req *connect.Request[apiv1.GetNodesByGlobRequest]) (*connect.Response[apiv1.GetNodesByGlobResponse], error) {
Expand All @@ -177,6 +180,13 @@ func (m *mockGraphServiceClient) GetNodeByName(ctx context.Context, req *connect
return m.GetNodeByNameFunc(ctx, req)
}

func (m *mockGraphServiceClient) AddNode(ctx context.Context, req *connect.Request[apiv1.AddNodeRequest]) (*connect.Response[apiv1.AddNodeResponse], error) {
return m.AddNodeFunc(ctx, req)
}

func (m *mockGraphServiceClient) SetDependency(ctx context.Context, req *connect.Request[apiv1.SetDependencyRequest]) (*connect.Response[emptypb.Empty], error) {
return m.SetDependencyFunc(ctx, req)
}
func TestRun(t *testing.T) {
tests := []struct {
name string
Expand Down
59 changes: 59 additions & 0 deletions gen/api/v1/apiv1connect/service.connect.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 58db48d

Please sign in to comment.