File: projectvalidator_test.go

package info (click to toggle)
golang-github-smallstep-certificates 0.29.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,720 kB
  • sloc: sh: 385; makefile: 129
file content (128 lines) | stat: -rw-r--r-- 3,922 bytes parent folder | download
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))
		})
	}
}