1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
package gcp
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"google.golang.org/api/cloudresourcemanager/v1"
)
func TestProjectValidator_ValidateProject(t *testing.T) {
ctx := context.Background()
type fields struct {
ProjectIDs []string
}
type args struct {
in0 context.Context
projectID string
}
tests := []struct {
name string
fields fields
args args
assertion assert.ErrorAssertionFunc
}{
{"allowed-1", fields{[]string{"allowed-1", "allowed-2"}}, args{ctx, "allowed-1"}, assert.NoError},
{"allowed-2", fields{[]string{"allowed-1", "allowed-2"}}, args{ctx, "allowed-2"}, assert.NoError},
{"empty", fields{nil}, args{ctx, "allowed-1"}, assert.NoError},
{"not allowed", fields{[]string{"allowed-1", "allowed-2"}}, args{ctx, "not-allowed"}, assert.Error},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &ProjectValidator{
ProjectIDs: tt.fields.ProjectIDs,
}
tt.assertion(t, p.ValidateProject(tt.args.in0, tt.args.projectID))
})
}
}
func TestNewOrganizationValidator(t *testing.T) {
ctx := context.Background()
_, err := cloudresourcemanager.NewService(ctx)
skip := (err != nil)
type args struct {
projectIDs []string
organizationID string
}
tests := []struct {
name string
skip bool
args args
want *OrganizationValidator
assertion assert.ErrorAssertionFunc
}{
{"ok projects", false, args{[]string{"project-1", "project-2"}, ""}, &OrganizationValidator{
ProjectValidator: &ProjectValidator{[]string{"project-1", "project-2"}},
}, assert.NoError},
{"ok organization", skip, args{[]string{}, "organization"}, &OrganizationValidator{
ProjectValidator: &ProjectValidator{[]string{}},
OrganizationID: "organization",
projectsService: &cloudresourcemanager.ProjectsService{},
}, assert.NoError},
{"ok projects organization", skip, args{[]string{"project-1"}, "organization"}, &OrganizationValidator{
ProjectValidator: &ProjectValidator{[]string{"project-1"}},
OrganizationID: "organization",
projectsService: &cloudresourcemanager.ProjectsService{},
}, assert.NoError},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.skip {
t.SkipNow()
return
}
got, err := NewOrganizationValidator(tt.args.projectIDs, tt.args.organizationID)
tt.assertion(t, err)
assert.EqualExportedValues(t, tt.want, got)
})
}
}
func TestOrganizationValidator_ValidateProject(t *testing.T) {
ctx := context.Background()
svc, err := cloudresourcemanager.NewService(ctx)
skip := (err != nil)
var projectsService *cloudresourcemanager.ProjectsService
if !skip {
projectsService = svc.Projects
}
type fields struct {
ProjectValidator *ProjectValidator
OrganizationID string
projectsService *cloudresourcemanager.ProjectsService
}
type args struct {
ctx context.Context
projectID string
}
tests := []struct {
name string
skip bool
fields fields
args args
assertion assert.ErrorAssertionFunc
}{
{"ok projects", false, fields{&ProjectValidator{ProjectIDs: []string{"allowed"}}, "", projectsService}, args{ctx, "allowed"}, assert.NoError},
{"fail projects", false, fields{&ProjectValidator{ProjectIDs: []string{"allowed"}}, "organization", projectsService}, args{ctx, "not-allowed"}, assert.Error},
{"fail organization", skip, fields{&ProjectValidator{ProjectIDs: []string{"allowed"}}, "fake-organization", projectsService}, args{ctx, "allowed"}, assert.Error},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &OrganizationValidator{
ProjectValidator: tt.fields.ProjectValidator,
OrganizationID: tt.fields.OrganizationID,
projectsService: tt.fields.projectsService,
}
if tt.skip {
t.SkipNow()
return
}
tt.assertion(t, p.ValidateProject(tt.args.ctx, tt.args.projectID))
})
}
}
|