@@ -5,7 +5,7 @@ Licensed under the Apache License, Version 2.0 (the "License");
5
5
you may not use this file except in compliance with the License.
6
6
You may obtain a copy of the License at
7
7
8
- http://www.apache.org/licenses/LICENSE-2.0
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
9
10
10
Unless required by applicable law or agreed to in writing, software
11
11
distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,20 +17,196 @@ limitations under the License.
17
17
package cert
18
18
19
19
import (
20
- "testing"
20
+ . "github.com/onsi/ginkgo"
21
+ . "github.com/onsi/gomega"
21
22
22
- "k8s.io/api/admissionregistration/v1beta1"
23
- "sigs.k8s.io/controller-runtime/pkg/client/fake"
23
+ admissionregistrationv1beta1 "k8s.io/api/admissionregistration/v1beta1"
24
+ corev1 "k8s.io/api/core/v1"
25
+ "k8s.io/apimachinery/pkg/runtime"
26
+ "sigs.k8s.io/controller-runtime/pkg/webhook/internal/cert/generator"
27
+ "sigs.k8s.io/controller-runtime/pkg/webhook/internal/cert/writer"
24
28
)
25
29
26
- func TestCertProvisionerInit (t * testing.T ) {
27
- p := & Provisioner {
28
- Client : fake .NewFakeClient (),
29
- }
30
- config := & v1beta1.MutatingWebhookConfiguration {}
30
+ var _ = Describe ("provisioner" , func () {
31
+ Context ("Invalid Provisioner" , func () {
32
+ It ("should return error" , func () {
33
+ p := Provisioner {}
34
+ _ , err := p .Provision (Options {})
35
+ Expect (err ).To (MatchError ("CertWriter need to be set" ))
36
+ })
37
+ })
31
38
32
- err := p .Sync (config )
33
- if err != nil {
34
- t .Fatalf ("expect nil; got %q" , err )
35
- }
39
+ Context ("No objects in the options" , func () {
40
+ It ("should return no error" , func () {
41
+ fcw := & fakeCertWriter {}
42
+ p := Provisioner {CertWriter : fcw }
43
+ changed , err := p .Provision (Options {})
44
+ Expect (err ).NotTo (HaveOccurred ())
45
+ Expect (changed ).To (BeFalse ())
46
+ Expect (fcw .invokedEnsureCert ).To (BeFalse ())
47
+ Expect (fcw .invokedInject ).To (BeFalse ())
48
+ })
49
+ })
50
+
51
+ Context ("WebhookClientConfig is missing in the options" , func () {
52
+ It ("should return error" , func () {
53
+ p := Provisioner {CertWriter : & fakeCertWriter {}}
54
+ _ , err := p .Provision (Options {
55
+ Objects : []runtime.Object {
56
+ & corev1.Pod {},
57
+ },
58
+ })
59
+ Expect (err ).To (MatchError ("clientConfig should not be empty" ))
60
+ })
61
+ })
62
+
63
+ Context ("object is not support for injecting webhookClientConfig" , func () {
64
+ It ("should return no error" , func () {
65
+ p := Provisioner {CertWriter : & fakeCertWriter {}}
66
+ _ , err := p .Provision (Options {
67
+ ClientConfig : & admissionregistrationv1beta1.WebhookClientConfig {
68
+ Service : & admissionregistrationv1beta1.ServiceReference {
69
+ Namespace : "test-svc-namespace" ,
70
+ Name : "test-service" ,
71
+ },
72
+ },
73
+ Objects : []runtime.Object {
74
+ & corev1.Pod {},
75
+ },
76
+ })
77
+ Expect (err .Error ()).To (ContainSubstring ("not supported for injecting a webhookClientConfig" ))
78
+ })
79
+ })
80
+
81
+ Context ("webhookConfig has 0 webhook" , func () {
82
+ It ("should return no error" , func () {
83
+ fcw := & fakeCertWriter {}
84
+ p := Provisioner {CertWriter : fcw }
85
+ _ , err := p .Provision (Options {
86
+ ClientConfig : & admissionregistrationv1beta1.WebhookClientConfig {
87
+ Service : & admissionregistrationv1beta1.ServiceReference {
88
+ Namespace : "test-svc-namespace" ,
89
+ Name : "test-service" ,
90
+ },
91
+ },
92
+ Objects : []runtime.Object {
93
+ & admissionregistrationv1beta1.MutatingWebhookConfiguration {},
94
+ },
95
+ })
96
+ Expect (err ).To (BeNil ())
97
+ Expect (fcw .invokedEnsureCert ).To (BeTrue ())
98
+ Expect (fcw .invokedInject ).To (BeTrue ())
99
+ })
100
+ })
101
+
102
+ Context ("happy path" , func () {
103
+ It ("should return no error" , func () {
104
+ fcw := & fakeCertWriter {}
105
+ mwc := & admissionregistrationv1beta1.MutatingWebhookConfiguration {
106
+ Webhooks : []admissionregistrationv1beta1.Webhook {
107
+ {
108
+ Name : "foo-webhook" ,
109
+ },
110
+ },
111
+ }
112
+ vwc := & admissionregistrationv1beta1.ValidatingWebhookConfiguration {
113
+ Webhooks : []admissionregistrationv1beta1.Webhook {
114
+ {
115
+ Name : "foo-webhook" ,
116
+ },
117
+ },
118
+ }
119
+ p := Provisioner {CertWriter : fcw }
120
+ _ , err := p .Provision (Options {
121
+ ClientConfig : & admissionregistrationv1beta1.WebhookClientConfig {
122
+ Service : & admissionregistrationv1beta1.ServiceReference {
123
+ Namespace : "test-svc-namespace" ,
124
+ Name : "test-service" ,
125
+ },
126
+ },
127
+ Objects : []runtime.Object {mwc , vwc },
128
+ })
129
+ Expect (err ).To (BeNil ())
130
+ Expect (fcw .invokedEnsureCert ).To (BeTrue ())
131
+ Expect (fcw .invokedInject ).To (BeTrue ())
132
+ })
133
+ })
134
+ })
135
+
136
+ var _ = Describe ("dnsNameFromClientConfig" , func () {
137
+ Context ("Invalid WebhookClientConfig" , func () {
138
+ It ("should return error" , func () {
139
+ _ , err := dnsNameFromClientConfig (nil )
140
+ Expect (err ).To (MatchError ("clientConfig should not be empty" ))
141
+ })
142
+ })
143
+
144
+ Context ("Neither Service nor URL is set" , func () {
145
+ It ("should return error" , func () {
146
+ urlStr := "foo.example.com"
147
+ cc := & admissionregistrationv1beta1.WebhookClientConfig {
148
+ Service : & admissionregistrationv1beta1.ServiceReference {},
149
+ URL : & urlStr ,
150
+ }
151
+ _ , err := dnsNameFromClientConfig (cc )
152
+ Expect (err .Error ()).To (ContainSubstring ("service and URL can't be set at the same time in a webhook" ))
153
+ })
154
+ })
155
+
156
+ Context ("Both Service and URL are set" , func () {
157
+ It ("should return error" , func () {
158
+ urlStr := "https://foo.example.com"
159
+ cc := & admissionregistrationv1beta1.WebhookClientConfig {
160
+ Service : & admissionregistrationv1beta1.ServiceReference {},
161
+ URL : & urlStr ,
162
+ }
163
+ _ , err := dnsNameFromClientConfig (cc )
164
+ Expect (err .Error ()).To (ContainSubstring ("service and URL can't be set at the same time in a webhook" ))
165
+ })
166
+ })
167
+
168
+ Context ("Only service is set" , func () {
169
+ It ("should return a DNS name" , func () {
170
+ path := "somepath"
171
+ cc := & admissionregistrationv1beta1.WebhookClientConfig {
172
+ Service : & admissionregistrationv1beta1.ServiceReference {
173
+ Namespace : "test-svc-namespace" ,
174
+ Name : "test-service" ,
175
+ Path : & path ,
176
+ },
177
+ }
178
+ dnsName , err := dnsNameFromClientConfig (cc )
179
+ Expect (err ).NotTo (HaveOccurred ())
180
+ Expect (dnsName ).To (Equal ("test-service.test-svc-namespace.svc" ))
181
+ })
182
+ })
183
+
184
+ Context ("Only URL is set" , func () {
185
+ It ("should return a DNS name" , func () {
186
+ urlStr := "https://foo.example.com/webhookendpoint"
187
+ cc := & admissionregistrationv1beta1.WebhookClientConfig {
188
+ URL : & urlStr ,
189
+ }
190
+ dnsName , err := dnsNameFromClientConfig (cc )
191
+ Expect (err ).NotTo (HaveOccurred ())
192
+ Expect (dnsName ).To (Equal ("foo.example.com" ))
193
+ })
194
+ })
195
+ })
196
+
197
+ type fakeCertWriter struct {
198
+ invokedEnsureCert bool
199
+ invokedInject bool
200
+ }
201
+
202
+ var _ writer.CertWriter = & fakeCertWriter {}
203
+
204
+ func (f * fakeCertWriter ) EnsureCert (dnsName string , dryrun bool ) (* generator.Artifacts , bool , error ) {
205
+ f .invokedEnsureCert = true
206
+ return & generator.Artifacts {}, true , nil
207
+ }
208
+
209
+ func (f * fakeCertWriter ) Inject (objs ... runtime.Object ) error {
210
+ f .invokedInject = true
211
+ return nil
36
212
}
0 commit comments