Skip to content

Commit 1e9f71c

Browse files
mamgainparasGerrit Code Review
authored andcommitted
Merge "New Patch for Workbench Integration Test" into main
2 parents 07cabe0 + 7e62fec commit 1e9f71c

File tree

1 file changed

+9
-52
lines changed

1 file changed

+9
-52
lines changed

execution/test/integration/consumer/Workbench/terraform_integration_test.go

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import (
3333
"github.com/stretchr/testify/assert"
3434
"github.com/tidwall/gjson"
3535
"golang.org/x/oauth2/google"
36-
"google.golang.org/api/cloudresourcemanager/v1"
3736
"google.golang.org/api/option"
3837
"gopkg.in/yaml.v2"
3938
)
@@ -456,71 +455,29 @@ func deleteFirewallRule(t *testing.T, projectID, firewallRuleName string) {
456455

457456
// validateAndAssignRoles validates and assigns necessary roles to the service account.
458457
func validateAndAssignRoles(t *testing.T, serviceAccountEmail string, projectID string) error {
459-
ctx := context.Background()
460-
credentials, err := google.FindDefaultCredentials(ctx)
461-
if err != nil {
462-
return fmt.Errorf("failed to get default credentials: %w", err)
463-
}
464-
465-
resourceManagerClient, err := cloudresourcemanager.NewService(ctx, option.WithCredentials(credentials))
466-
if err != nil {
467-
return fmt.Errorf("failed to create resource manager client: %w", err)
468-
}
469-
470-
policy, err := resourceManagerClient.Projects.GetIamPolicy(projectID, &cloudresourcemanager.GetIamPolicyRequest{}).Do()
471-
if err != nil {
472-
return fmt.Errorf("failed to get IAM policy for project %s: %w", projectID, err)
473-
}
474-
458+
t.Helper()
475459
requiredRoles := []string{
476460
"roles/bigquery.jobUser",
477461
"roles/bigquery.dataViewer",
478462
"roles/serviceusage.serviceUsageConsumer",
479-
// Add necessary permissions for interacting with the Workbench API
480463
"roles/notebooks.admin", // Or a more specific role if needed
481464
"roles/iam.serviceAccountUser", // To allow the SA to act as itself
482465
}
483466

484467
member := fmt.Sprintf("serviceAccount:%s", serviceAccountEmail)
485468

486-
policyUpdated := false
487469
for _, role := range requiredRoles {
488-
roleAssigned := false
489-
for _, binding := range policy.Bindings {
490-
if binding.Role == role {
491-
for _, m := range binding.Members {
492-
if m == member {
493-
roleAssigned = true
494-
break
495-
}
496-
}
497-
if roleAssigned {
498-
break
499-
}
500-
if !roleAssigned {
501-
binding.Members = append(binding.Members, member)
502-
policyUpdated = true
503-
}
504-
505-
}
506-
}
507-
if !roleAssigned {
508-
policy.Bindings = append(policy.Bindings, &cloudresourcemanager.Binding{
509-
Role: role,
510-
Members: []string{member},
511-
})
512-
policyUpdated = true
470+
t.Logf("Adding role %s to %s for project %s", role, member, projectID)
471+
cmd := shell.Command{
472+
Command: "gcloud",
473+
Args: []string{"projects", "add-iam-policy-binding", projectID, "--member=" + member, "--role=" + role, "--condition=None"},
513474
}
514-
515-
}
516-
if policyUpdated {
517-
_, err = resourceManagerClient.Projects.SetIamPolicy(projectID, &cloudresourcemanager.SetIamPolicyRequest{Policy: policy}).Do()
475+
output, err := shell.RunCommandAndGetOutputE(t, cmd)
518476
if err != nil {
519-
return fmt.Errorf("failed to set IAM policy for project %s: %w", projectID, err)
477+
t.Logf("Failed to add IAM binding '%s' for member '%s' to project '%s'. Output:\n%s, Error: %v", role, member, projectID, output, err)
478+
return fmt.Errorf("failed to add IAM binding '%s' for member '%s': %w", role, member, err)
520479
}
521-
t.Logf("Successfully assigned required roles to service account: %s", serviceAccountEmail)
522-
} else {
523-
t.Logf("All required roles already assigned to service account: %s", serviceAccountEmail)
480+
t.Logf("Successfully added role %s to %s for project %s", role, member, projectID)
524481
}
525482

526483
return nil

0 commit comments

Comments
 (0)