Skip to content

Commit f24fb3b

Browse files
Merge pull request GoogleCloudPlatform#2872 from maqiuyujoyce/202410-pam-full
Support full test cases for PrivilegedAccessManagerEntitlement
2 parents 4b35c75 + 7aef0ff commit f24fb3b

File tree

16 files changed

+2201
-15
lines changed

16 files changed

+2201
-15
lines changed

mockgcp/mockprivilegedaccessmanager/entitlement.go

+2-14
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ package mockprivilegedaccessmanager
1616

1717
import (
1818
"context"
19-
"crypto/md5"
20-
"encoding/base64"
21-
"fmt"
2219
"time"
2320

2421
"google.golang.org/genproto/googleapis/longrunning"
@@ -27,6 +24,7 @@ import (
2724
"google.golang.org/protobuf/proto"
2825
"google.golang.org/protobuf/types/known/timestamppb"
2926

27+
"github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/common/fields"
3028
pb "github.com/GoogleCloudPlatform/k8s-config-connector/mockgcp/generated/mockgcp/cloud/privilegedaccessmanager/v1"
3129
)
3230

@@ -68,7 +66,7 @@ func (s *PrivilegedAccessManager) CreateEntitlement(ctx context.Context, req *pb
6866
obj.Name = fqn
6967
obj.CreateTime = now
7068
obj.UpdateTime = now
71-
obj.Etag = computeEtag(obj)
69+
obj.Etag = fields.ComputeWeakEtag(obj)
7270
obj.State = pb.Entitlement_AVAILABLE
7371
if err := s.storage.Create(ctx, fqn, obj); err != nil {
7472
return nil, err
@@ -147,22 +145,12 @@ func (s *PrivilegedAccessManager) DeleteEntitlement(ctx context.Context, req *pb
147145
return s.operations.StartLRO(ctx, name.parent(), metadata, func() (proto.Message, error) {
148146
result := proto.Clone(oldObj).(*pb.Entitlement)
149147
result.State = pb.Entitlement_DELETED
150-
result.Name = "projects/${projectNumber}/locations/global/entitlements/privilegedaccessmanagerentitlement-${uniqueId}"
151148
now := timestamppb.New(time.Now())
152149
metadata.EndTime = now
153150
return result, nil
154151
})
155152
}
156153

157-
func computeEtag(obj proto.Message) string {
158-
b, err := proto.Marshal(obj)
159-
if err != nil {
160-
panic(fmt.Sprintf("converting to proto: %v", err))
161-
}
162-
hash := md5.Sum(b)
163-
return base64.URLEncoding.EncodeToString(hash[:])
164-
}
165-
166154
func constructOperationMetadata(target, verb string) *pb.OperationMetadata {
167155
now := timestamppb.New(time.Now())
168156
return &pb.OperationMetadata{

pkg/test/resourcefixture/testdata/basic/privilegedaccessmanager/v1alpha1/privilegedaccessmanagerentitlement/_http.log pkg/test/resourcefixture/testdata/basic/privilegedaccessmanager/v1alpha1/privilegedaccessmanagerentitlement/privilegedaccessmanagerentitlementbasicproject/_http.log

+1-1
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ X-Xss-Protection: 0
603603
],
604604
"etag": "abcdef0123A=",
605605
"maxRequestDuration": "3600s",
606-
"name": "projects/${projectNumber}/locations/global/entitlements/privilegedaccessmanagerentitlement-${uniqueId}",
606+
"name": "projects/${projectId}/locations/global/entitlements/privilegedaccessmanagerentitlement-${uniqueId}",
607607
"privilegedAccess": {
608608
"gcpIamAccess": {
609609
"resource": "//cloudresourcemanager.googleapis.com/projects/${projectId}",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
apiVersion: privilegedaccessmanager.cnrm.cloud.google.com/v1alpha1
2+
kind: PrivilegedAccessManagerEntitlement
3+
metadata:
4+
finalizers:
5+
- cnrm.cloud.google.com/finalizer
6+
- cnrm.cloud.google.com/deletion-defender
7+
generation: 2
8+
labels:
9+
cnrm-test: "true"
10+
name: privilegedaccessmanagerentitlement-${uniqueId}
11+
namespace: ${uniqueId}
12+
spec:
13+
additionalNotificationTargets:
14+
adminEmailRecipients:
15+
- gsa-1-${uniqueId}@${projectId}.iam.gserviceaccount.com
16+
- gsa-2-${uniqueId}@${projectId}.iam.gserviceaccount.com
17+
requesterEmailRecipients:
18+
- gsa-1-${uniqueId}@${projectId}.iam.gserviceaccount.com
19+
approvalWorkflow:
20+
manualApprovals:
21+
requireApproverJustification: true
22+
step:
23+
- approvalsNeeded: 1
24+
approverEmailRecipients:
25+
- gsa-1-${uniqueId}@${projectId}.iam.gserviceaccount.com
26+
approvers:
27+
- principals:
28+
29+
eligibleUsers:
30+
- principals:
31+
- serviceAccount:gsa-2-${uniqueId}@${projectId}.iam.gserviceaccount.com
32+
folderRef:
33+
external: folders/123451001
34+
location: global
35+
maxRequestDuration: 1h0m0s
36+
privilegedAccess:
37+
gcpIAMAccess:
38+
roleBindings:
39+
- conditionExpression: request.time > timestamp("2020-10-31T12:00:00.000Z")
40+
role: roles/storage.objectViewer
41+
requesterJustificationConfig:
42+
notMandatory: {}
43+
status:
44+
conditions:
45+
- lastTransitionTime: "1970-01-01T00:00:00Z"
46+
message: The resource is up to date
47+
reason: UpToDate
48+
status: "True"
49+
type: Ready
50+
externalRef: //privilegedaccessmanager.googleapis.com/folders/123451001/locations/global/entitlements/privilegedaccessmanagerentitlement-${uniqueId}
51+
observedGeneration: 2
52+
observedState:
53+
createTime: "1970-01-01T00:00:00Z"
54+
etag: abcdef123456
55+
state: AVAILABLE
56+
updateTime: "1970-01-01T00:00:00Z"

0 commit comments

Comments
 (0)