Skip to content
This repository was archived by the owner on Feb 2, 2021. It is now read-only.

Commit 68b1ffb

Browse files
Martin Dekovalexellis
authored andcommitted
Add secrets filter functionality for GitLab
Adding secrets filtering for GitLab and changing the functionality to determine whether GitLab or GitHub secrets will be created on the scm field in the init.yaml file. Also adding unit test along with fixing existing ones and fixing couple of spelling mistakes Signed-off-by: Martin Dekov <mdekov@vmware.com>
1 parent 6649ad6 commit 68b1ffb

File tree

4 files changed

+119
-26
lines changed

4 files changed

+119
-26
lines changed

main

3.12 MB
Binary file not shown.

main.go

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,10 @@ func main() {
105105
os.Exit(1)
106106
}
107107

108-
var featuersErr error
109-
plan, featuersErr = filterFeatures(plan)
110-
if featuersErr != nil {
111-
fmt.Fprintf(os.Stderr, "error while retreiving features: %s\n", featuersErr.Error())
108+
var featuresErr error
109+
plan, featuresErr = filterFeatures(plan)
110+
if featuresErr != nil {
111+
fmt.Fprintf(os.Stderr, "error while retreiving features: %s\n", featuresErr.Error())
112112
os.Exit(1)
113113
}
114114

@@ -631,14 +631,15 @@ func filterFeatures(plan types.Plan) (types.Plan, error) {
631631

632632
plan.Features = append(plan.Features, types.DefaultFeature)
633633

634-
if (plan.Github != types.Github{}) {
635-
plan.Features = append(plan.Features, types.GitHub)
634+
plan, err = filterGitRepositoryManager(plan)
635+
if err != nil {
636+
return plan, fmt.Errorf("Error while filtering features: %s", err.Error())
636637
}
637638

638639
if plan.TLS == true {
639640
plan, err = filterDNSFeature(plan)
640641
if err != nil {
641-
return plan, err
642+
return plan, fmt.Errorf("Error while filtering features: %s", err.Error())
642643
}
643644
}
644645

@@ -661,3 +662,14 @@ func filterDNSFeature(plan types.Plan) (types.Plan, error) {
661662
}
662663
return plan, nil
663664
}
665+
666+
func filterGitRepositoryManager(plan types.Plan) (types.Plan, error) {
667+
if plan.SCM == types.GitLabManager {
668+
plan.Features = append(plan.Features, types.GitLabSCM)
669+
} else if plan.SCM == types.GitHubManager {
670+
plan.Features = append(plan.Features, types.GitHubSCM)
671+
} else {
672+
return plan, fmt.Errorf("Error unsupported Git repository manager: %s", plan.SCM)
673+
}
674+
return plan, nil
675+
}

main_test.go

Lines changed: 90 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -72,48 +72,125 @@ func Test_filterFeatures(t *testing.T) {
7272
expectedError: nil,
7373
},
7474
{
75-
title: "Every field which defines populated feature is populated",
75+
title: "Every field which defines populated feature is populated for github",
7676
planConfig: types.Plan{
77-
Github: types.Github{
78-
AppID: "example ID",
79-
PrivateKeyFile: "~/home/private_key.pem",
77+
SCM: types.GitHubManager,
78+
TLS: true,
79+
TLSConfig: types.TLSConfig{
80+
DNSService: types.Route53,
8081
},
82+
EnableOAuth: true,
83+
},
84+
expectedFeatures: []string{types.DefaultFeature, types.GitHubSCM, types.Auth, types.Route53DNS},
85+
expectedError: nil,
86+
},
87+
{
88+
title: "Every field which defines populated feature is populated for gitlab",
89+
planConfig: types.Plan{
90+
SCM: types.GitLabManager,
8191
TLS: true,
8292
TLSConfig: types.TLSConfig{
8393
DNSService: types.Route53,
8494
},
8595
EnableOAuth: true,
8696
},
87-
expectedFeatures: []string{types.DefaultFeature, types.GitHub, types.Auth, types.Route53DNS},
97+
expectedFeatures: []string{types.DefaultFeature, types.GitLabSCM, types.Auth, types.Route53DNS},
8898
expectedError: nil,
8999
},
90100
{
91-
title: "Auth and TLS are enabled",
101+
title: "Example in which the function throws error in this case the SCM field is empty",
92102
planConfig: types.Plan{
93103
TLS: true,
94104
TLSConfig: types.TLSConfig{
95105
DNSService: types.Route53,
96106
},
97107
EnableOAuth: true,
98108
},
109+
expectedFeatures: []string{types.DefaultFeature},
110+
expectedError: errors.New("Error while filtering features"),
111+
},
112+
{
113+
title: "Auth and TLS are enabled along with GitLab",
114+
planConfig: types.Plan{
115+
TLS: true,
116+
TLSConfig: types.TLSConfig{
117+
DNSService: types.Route53,
118+
},
119+
EnableOAuth: true,
120+
SCM: types.GitHubManager,
121+
},
99122
expectedFeatures: []string{types.DefaultFeature, types.Auth, types.Route53DNS},
100123
expectedError: nil,
101124
},
102125
}
103126
for _, test := range tests {
104127
t.Run(test.title, func(t *testing.T) {
105-
test.planConfig, _ = filterFeatures(test.planConfig)
106-
for _, feature := range test.planConfig.Features {
107-
t.Logf("Searching for feature: %s, ", feature)
108-
for allFeatures, expectedFeature := range test.expectedFeatures {
109-
if feature == expectedFeature {
128+
var filterError error
129+
test.planConfig, filterError = filterFeatures(test.planConfig)
130+
t.Logf("Features in the plan: %v", test.planConfig.Features)
131+
if filterError != nil && test.expectedError != nil {
132+
if !strings.Contains(filterError.Error(), test.expectedError.Error()) {
133+
t.Errorf("Expected error to contain: `%s` got: `%s`", test.expectedError.Error(), filterError.Error())
134+
}
135+
}
136+
for _, expectedFeature := range test.expectedFeatures {
137+
for allPlanFeatures, enabledFeature := range test.planConfig.Features {
138+
if len(test.planConfig.Features) == 0 {
139+
t.Errorf("Feature 'default' should always be present")
140+
}
141+
if expectedFeature == enabledFeature {
110142
break
111143
}
112-
if allFeatures == len(test.expectedFeatures) {
113-
t.Errorf("Feature: %s not found in the expected features", feature)
144+
if allPlanFeatures == len(test.planConfig.Features)-1 {
145+
t.Errorf("Feature: '%s' not found in: %v", expectedFeature, test.planConfig.Features)
114146
}
115147
}
116148
}
117149
})
118150
}
119151
}
152+
153+
func Test_filterGitRepositoryManager(t *testing.T) {
154+
tests := []struct {
155+
title string
156+
planConfig types.Plan
157+
expectedFeature []string
158+
expectedError error
159+
}{
160+
{
161+
title: "SCM field is populated for gitlab",
162+
planConfig: types.Plan{
163+
SCM: types.GitLabManager,
164+
},
165+
expectedFeature: []string{types.GitLabSCM},
166+
expectedError: nil,
167+
},
168+
{
169+
title: "SCM field is populated for github",
170+
planConfig: types.Plan{
171+
SCM: types.GitHubManager,
172+
},
173+
expectedFeature: []string{types.GitHubSCM},
174+
expectedError: nil,
175+
},
176+
{
177+
title: "SCM field is populated for with unsupported Git repository manager",
178+
planConfig: types.Plan{
179+
SCM: "bitbucket",
180+
},
181+
expectedFeature: []string{},
182+
expectedError: errors.New("Error unsupported Git repository manager: bitbucket"),
183+
},
184+
}
185+
for _, test := range tests {
186+
t.Run(test.title, func(t *testing.T) {
187+
var configErr error
188+
test.planConfig, configErr = filterGitRepositoryManager(test.planConfig)
189+
if configErr != nil && test.expectedError != nil {
190+
if !strings.EqualFold(configErr.Error(), test.expectedError.Error()) {
191+
t.Errorf("Expected error: '%s' got: '%s'", test.expectedError, configErr)
192+
}
193+
}
194+
})
195+
}
196+
}

pkg/types/types.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,29 @@ import (
88
const (
99
// DefaultFeature filter is for the features which are mandatory
1010
DefaultFeature = "default"
11-
// GitHub filter enables secrets created with the scm_github filter
12-
GitHub = "scm_github"
13-
// GitLab filter is the feature
14-
GitLab = "scm_gitlab"
11+
// GitHubSCM filter enables secrets created with the scm_github filter
12+
GitHubSCM = "scm_github"
13+
// GitLabSCM filter is the feature which enables secret creation for GitLab
14+
GitLabSCM = "scm_gitlab"
1515
// Auth filter enables OAuth secret creation
1616
Auth = "auth"
1717
// GCPDNS filter enables the creation of secrets for Google Cloud Platform DNS when TLS is enabled
1818
GCPDNS = "gcp_dns01"
1919
// DODNS filter enables the creation of secrets for Digital Ocean DNS when TLS is enabled
2020
DODNS = "do_dns01"
21-
// DODNS filter enables the creation of secrets for Amazon Route53 DNS when TLS is enabled
21+
// Route53DNS filter enables the creation of secrets for Amazon Route53 DNS when TLS is enabled
2222
Route53DNS = "route53_dns01"
2323

2424
// CloudDNS is the dns_service field in yaml file for Google Cloud Platform
2525
CloudDNS = "clouddns"
26-
// CloudDns is the dns_service field in yaml file for Digital Ocean
26+
// DigitalOcean is the dns_service field in yaml file for Digital Ocean
2727
DigitalOcean = "digitalocean"
2828
// Route53 is the dns_service field in yaml file for Amazon
2929
Route53 = "route53"
30+
// GitLabManager repository manager name as displayed in the init.yaml file
31+
GitLabManager = "gitlab"
32+
// GitHubManager repository manager name as displayed in the init.yaml file
33+
GitHubManager = "github"
3034
)
3135

3236
type Plan struct {

0 commit comments

Comments
 (0)