Skip to content

Commit

Permalink
Merge pull request GoogleCloudPlatform#1630 from justinsb/mockgcp_iam…
Browse files Browse the repository at this point in the history
…_serviceaccounts

mockgcp: update IAMServiceAccount mock for more fidelity
  • Loading branch information
google-oss-prow[bot] authored Apr 23, 2024
2 parents b8871c8 + ce69ca0 commit 609347b
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 32 deletions.
61 changes: 55 additions & 6 deletions mockgcp/mockiam/serviceaccounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ func (s *ServerV1) GetServiceAccount(ctx context.Context, req *pb.GetServiceAcco
}

if found == nil {
return nil, status.Errorf(codes.NotFound, "Service account %q not found", req.Name)
return nil, status.Errorf(codes.NotFound, "Unknown service account")
}

return found, nil
Expand All @@ -69,6 +69,9 @@ func (s *ServerV1) GetServiceAccount(ctx context.Context, req *pb.GetServiceAcco
sa := &pb.ServiceAccount{}
fqn := name.String()
if err := s.storage.Get(ctx, fqn, sa); err != nil {
if status.Code(err) == codes.NotFound {
return nil, status.Errorf(codes.NotFound, "Unknown service account")
}
return nil, err
}

Expand All @@ -87,8 +90,6 @@ func (s *ServerV1) CreateServiceAccount(ctx context.Context, req *pb.CreateServi
return nil, status.Errorf(codes.InvalidArgument, "AccountId is required")
}

displayName := req.GetServiceAccount().DisplayName

projectName, err := projects.ParseProjectName(req.Name)
if err != nil {
return nil, err
Expand All @@ -111,12 +112,11 @@ func (s *ServerV1) CreateServiceAccount(ctx context.Context, req *pb.CreateServi
uniqueID <<= 32
uniqueID |= id

sa := &pb.ServiceAccount{}
sa := proto.Clone(req.GetServiceAccount()).(*pb.ServiceAccount)
sa.Name = name.String()
sa.ProjectId = project.ID
sa.UniqueId = strconv.FormatInt(uniqueID, 10)
sa.Email = name.Email
sa.DisplayName = displayName
sa.Oauth2ClientId = sa.UniqueId

sa.Etag = computeEtag(sa)
Expand Down Expand Up @@ -175,7 +175,56 @@ func (s *ServerV1) PatchServiceAccount(ctx context.Context, req *pb.PatchService
if err := s.storage.Update(ctx, fqn, sa); err != nil {
return nil, err
}
return sa, nil

// Unclear exactly what's going on here, but it seems to only return some of the fields
// (maybe the ones we've patched?)
retVal := &pb.ServiceAccount{
Name: sa.Name,
DisplayName: sa.DisplayName,
}
return retVal, nil
}

func (s *ServerV1) DisableServiceAccount(ctx context.Context, req *pb.DisableServiceAccountRequest) (*emptypb.Empty, error) {
name, err := s.serverV1.parseServiceAccountName(ctx, req.GetName())
if err != nil {
return nil, err
}

fqn := name.String()
sa := &pb.ServiceAccount{}
if err := s.storage.Get(ctx, fqn, sa); err != nil {
return nil, err
}

sa.Disabled = true

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

return &emptypb.Empty{}, nil
}

func (s *ServerV1) EnableServiceAccount(ctx context.Context, req *pb.EnableServiceAccountRequest) (*emptypb.Empty, error) {
name, err := s.serverV1.parseServiceAccountName(ctx, req.GetName())
if err != nil {
return nil, err
}

fqn := name.String()
sa := &pb.ServiceAccount{}
if err := s.storage.Get(ctx, fqn, sa); err != nil {
return nil, err
}

sa.Disabled = false

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

return &emptypb.Empty{}, nil
}

func computeEtag(obj proto.Message) []byte {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,39 @@
GET https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

404 Not Found
Cache-Control: private
Content-Type: application/json; charset=UTF-8
Server: ESF
Vary: Origin
Vary: X-Origin
Vary: Referer
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 0

{
"error": {
"code": 404,
"errors": [
{
"domain": "global",
"message": "Unknown service account",
"reason": "notFound"
}
],
"message": "Unknown service account",
"status": "NOT_FOUND"
}
}

---

POST https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts?alt=json&prettyPrint=false
Content-Type: application/json
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

{
"accountId": "gsa-${uniqueId}",
Expand Down Expand Up @@ -34,8 +66,8 @@ X-Xss-Protection: 0
---

GET https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

200 OK
Cache-Control: private
Expand All @@ -61,8 +93,8 @@ X-Xss-Protection: 0
---

GET https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

200 OK
Cache-Control: private
Expand All @@ -88,8 +120,8 @@ X-Xss-Protection: 0
---

GET https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

200 OK
Cache-Control: private
Expand All @@ -115,8 +147,8 @@ X-Xss-Protection: 0
---

GET https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

200 OK
Cache-Control: private
Expand All @@ -142,8 +174,8 @@ X-Xss-Protection: 0
---

GET https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

200 OK
Cache-Control: private
Expand All @@ -169,8 +201,8 @@ X-Xss-Protection: 0
---

GET https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

200 OK
Cache-Control: private
Expand All @@ -197,8 +229,8 @@ X-Xss-Protection: 0

PATCH https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
Content-Type: application/json
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

{
"serviceAccount": {
Expand All @@ -221,19 +253,14 @@ X-Xss-Protection: 0

{
"displayName": "ExampleGSA2",
"email": "gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com",
"etag": "abcdef0123A=",
"name": "projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com",
"oauth2ClientId": "888888888888888888888",
"projectId": "${projectId}",
"uniqueId": "111111111111111111111"
"name": "projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com"
}

---

GET https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

200 OK
Cache-Control: private
Expand All @@ -259,8 +286,8 @@ X-Xss-Protection: 0
---

DELETE https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/gsa-${uniqueId}@${projectId}.iam.gserviceaccount.com?alt=json&prettyPrint=false
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/dev
X-Goog-Api-Client: gl-go/1.21.4 gdcl/0.139.0
User-Agent: google-api-go-client/0.5 Terraform/ (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google-beta/kcc/controller-manager
X-Goog-Api-Client: gl-go/1.22.0 gdcl/0.160.0

200 OK
Cache-Control: private
Expand Down

0 comments on commit 609347b

Please sign in to comment.