Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Imporve GKEhub mocks using startLRO #2230

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 39 additions & 7 deletions mockgcp/mockgkehub/gkehubfeature.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@ package mockgkehub
import (
"context"

"cloud.google.com/go/longrunning/autogen/longrunningpb"
"google.golang.org/genproto/googleapis/longrunning"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/timestamppb"

pb "github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/generated/mockgcp/cloud/gkehub/v1beta"
)
Expand Down Expand Up @@ -54,15 +56,26 @@ func (s *GKEHubFeature) CreateFeature(ctx context.Context, req *pb.CreateFeature
}

fqn := name.String()
now := timestamppb.Now()

obj := proto.Clone(req.Resource).(*pb.Feature)
obj.Name = fqn

if err := s.storage.Create(ctx, fqn, obj); err != nil {
return nil, err
}

return s.operations.NewLRO(ctx)
metadata := &pb.OperationMetadata{
Target: fqn,
CreateTime: now,
EndTime: now,
}
return s.operations.StartLRO(ctx, name.String(), metadata, func() (proto.Message, error) {
result := proto.Clone(obj).(*pb.Feature)
result.CreateTime = now
result.UpdateTime = now
result.ResourceState = &pb.FeatureResourceState{State: pb.FeatureResourceState_ACTIVE}
return result, nil
})
}

func (s *GKEHubFeature) UpdateFeature(ctx context.Context, req *pb.UpdateFeatureRequest) (*longrunning.Operation, error) {
Expand All @@ -78,7 +91,8 @@ func (s *GKEHubFeature) UpdateFeature(ctx context.Context, req *pb.UpdateFeature
if err := s.storage.Get(ctx, fqn, obj); err != nil {
return nil, err
}

now := timestamppb.Now()
obj.UpdateTime = now
// Required. A list of fields to be updated in this request.
paths := req.GetUpdateMask().GetPaths()

Expand All @@ -101,7 +115,17 @@ func (s *GKEHubFeature) UpdateFeature(ctx context.Context, req *pb.UpdateFeature
return nil, err
}

return s.operations.NewLRO(ctx)
metadata := &pb.OperationMetadata{
Target: fqn,
CreateTime: now,
EndTime: now,
}
return s.operations.StartLRO(ctx, name.String(), metadata, func() (proto.Message, error) {
result := proto.Clone(obj).(*pb.Feature)
result.UpdateTime = now
result.ResourceState = &pb.FeatureResourceState{State: pb.FeatureResourceState_ACTIVE}
return result, nil
})
}

func (s *GKEHubFeature) DeleteFeature(ctx context.Context, req *pb.DeleteFeatureRequest) (*longrunning.Operation, error) {
Expand All @@ -111,11 +135,19 @@ func (s *GKEHubFeature) DeleteFeature(ctx context.Context, req *pb.DeleteFeature
}

fqn := name.String()
now := timestamppb.Now()

oldObj := &pb.Feature{}
if err := s.storage.Delete(ctx, fqn, oldObj); err != nil {
return nil, err
if status.Code(err) == codes.NotFound {
return s.operations.NewLRO(ctx)
}
return &longrunningpb.Operation{}, err
}

return s.operations.NewLRO(ctx)
metadata := &pb.OperationMetadata{
Target: fqn,
CreateTime: now,
EndTime: now,
}
return s.operations.DoneLRO(ctx, name.String(), metadata, &pb.Feature{})
}
55 changes: 49 additions & 6 deletions mockgcp/mockgkehub/gkehubmembership.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@ package mockgkehub
import (
"context"

"cloud.google.com/go/longrunning/autogen/longrunningpb"
"google.golang.org/genproto/googleapis/longrunning"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/timestamppb"

pb "github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/generated/mockgcp/cloud/gkehub/v1beta1"
)
Expand Down Expand Up @@ -54,15 +56,37 @@ func (s *GKEHubMembership) CreateMembership(ctx context.Context, req *pb.CreateM
}

fqn := name.String()

now := timestamppb.Now()
obj := proto.Clone(req.Resource).(*pb.Membership)
obj.Name = fqn
// The real gcp generated the values below
obj.InfrastructureType = 2
obj.ExternalId = "c772f869-1d6c-4d50-a92e-816c48322246"
if obj.Authority != nil {
obj.Authority.IdentityProvider = obj.Authority.Issuer
obj.Authority.WorkloadIdentityPool = "${projectId}.svc.id.goog"
}
obj.UniqueId = "12345678"
obj.CreateTime = now
obj.State = &pb.MembershipState{Code: pb.MembershipState_READY}
obj.UpdateTime = now

if err := s.storage.Create(ctx, fqn, obj); err != nil {
return nil, err
}

return s.operations.NewLRO(ctx)
metadata := &pb.OperationMetadata{
Target: fqn,
CreateTime: now,
EndTime: now,
}
return s.operations.StartLRO(ctx, name.String(), metadata, func() (proto.Message, error) {
result := proto.Clone(obj).(*pb.Membership)
result.CreateTime = now
result.UpdateTime = now
result.State = &pb.MembershipState{Code: pb.MembershipState_READY}
return result, nil
})
}

func (s *GKEHubMembership) UpdateMembership(ctx context.Context, req *pb.UpdateMembershipRequest) (*longrunning.Operation, error) {
Expand All @@ -79,6 +103,7 @@ func (s *GKEHubMembership) UpdateMembership(ctx context.Context, req *pb.UpdateM
return nil, err
}

now := timestamppb.Now()
// Required. A list of fields to be updated in this request.
paths := req.GetUpdateMask().GetPaths()

Expand All @@ -96,7 +121,17 @@ func (s *GKEHubMembership) UpdateMembership(ctx context.Context, req *pb.UpdateM
return nil, err
}

return s.operations.NewLRO(ctx)
metadata := &pb.OperationMetadata{
Target: fqn,
CreateTime: now,
EndTime: now,
}
return s.operations.StartLRO(ctx, name.String(), metadata, func() (proto.Message, error) {
result := proto.Clone(obj).(*pb.Membership)
result.UpdateTime = now
result.State = &pb.MembershipState{Code: pb.MembershipState_READY}
return result, nil
})
}

func (s *GKEHubMembership) DeleteMembership(ctx context.Context, req *pb.DeleteMembershipRequest) (*longrunning.Operation, error) {
Expand All @@ -106,11 +141,19 @@ func (s *GKEHubMembership) DeleteMembership(ctx context.Context, req *pb.DeleteM
}

fqn := name.String()

now := timestamppb.Now()
oldObj := &pb.Membership{}
if err := s.storage.Delete(ctx, fqn, oldObj); err != nil {
return nil, err
if status.Code(err) == codes.NotFound {
return s.operations.NewLRO(ctx)
}
return &longrunningpb.Operation{}, err
}

return s.operations.NewLRO(ctx)
metadata := &pb.OperationMetadata{
Target: fqn,
CreateTime: now,
EndTime: now,
}
return s.operations.DoneLRO(ctx, name.String(), metadata, &pb.Membership{})
}
13 changes: 7 additions & 6 deletions mockgcp/mockgkehub/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ import (
"context"
"net/http"

"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"google.golang.org/grpc"

"github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/common"
"github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/common/httpmux"
"github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/common/operations"
v1betapb "github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/generated/mockgcp/cloud/gkehub/v1beta"
v1beta1pb "github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/generated/mockgcp/cloud/gkehub/v1beta1"
Expand Down Expand Up @@ -61,13 +61,14 @@ func (s *MockService) Register(grpcServer *grpc.Server) {
}

func (s *MockService) NewHTTPMux(ctx context.Context, conn *grpc.ClientConn) (http.Handler, error) {
mux := runtime.NewServeMux()

if err := v1betapb.RegisterGkeHubHandler(ctx, mux, conn); err != nil {
mux, err := httpmux.NewServeMux(ctx, conn, httpmux.Options{}, v1betapb.RegisterGkeHubHandler, v1beta1pb.RegisterGkeHubMembershipServiceHandler, s.operations.RegisterOperationsPath("/v1beta/{prefix=**}/operations/{name}"), s.operations.RegisterOperationsPath("/v1beta1/{prefix=**}/operations/{name}"))
if err != nil {
return nil, err
}
if err := v1beta1pb.RegisterGkeHubMembershipServiceHandler(ctx, mux, conn); err != nil {
return nil, err
mux.RewriteError = func(ctx context.Context, error *httpmux.ErrorResponse) {
if error.Code == 404 {
error.Errors = nil
}
}
return mux, nil
}
Loading
Loading