@@ -19,8 +19,13 @@ package envtest
19
19
import (
20
20
"testing"
21
21
22
+ "k8s.io/apimachinery/pkg/runtime"
23
+
22
24
. "github.com/onsi/ginkgo"
23
25
. "github.com/onsi/gomega"
26
+ admissionv1beta1 "k8s.io/api/admissionregistration/v1beta1"
27
+ admissionv1 "k8s.io/api/admissionregistration/v1"
28
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24
29
logf "sigs.k8s.io/controller-runtime/pkg/log"
25
30
"sigs.k8s.io/controller-runtime/pkg/log/zap"
26
31
)
@@ -35,12 +40,101 @@ var env *Environment
35
40
var _ = BeforeSuite (func (done Done ) {
36
41
logf .SetLogger (zap .LoggerTo (GinkgoWriter , true ))
37
42
env = & Environment {}
43
+ // we're initializing webhook here and not in webhook.go to also test the envtest install code via WebhookOptions
44
+ initializeWebhookInEnvironment ()
38
45
_ , err := env .Start ()
39
46
Expect (err ).NotTo (HaveOccurred ())
40
47
41
48
close (done )
42
49
}, StartTimeout )
43
50
51
+ func initializeWebhookInEnvironment () {
52
+ namespacedScopeV1Beta1 := admissionv1beta1 .NamespacedScope
53
+ namespacedScopeV1 := admissionv1 .NamespacedScope
54
+ failedTypeV1Beta1 := admissionv1beta1 .Fail
55
+ failedTypeV1 := admissionv1 .Fail
56
+ equivalentTypeV1Beta1 := admissionv1beta1 .Equivalent
57
+ equivalentTypeV1 := admissionv1 .Equivalent
58
+ noSideEffectsV1Beta1 := admissionv1beta1 .SideEffectClassNone
59
+ noSideEffectsV1 := admissionv1 .SideEffectClassNone
60
+ webhookPathV1 := "/failing"
61
+
62
+ env .WebhookInstallOptions = WebhookInstallOptions {
63
+ ValidatingWebhooks : []runtime.Object {
64
+ & admissionv1beta1.ValidatingWebhookConfiguration {
65
+ ObjectMeta : metav1.ObjectMeta {
66
+ Name : "deployment-validation-webhook-config" ,
67
+ },
68
+ TypeMeta : metav1.TypeMeta {
69
+ Kind : "ValidatingWebhookConfiguration" ,
70
+ APIVersion : "admissionregistration.k8s.io/v1beta1" ,
71
+ },
72
+ Webhooks : []admissionv1beta1.ValidatingWebhook {
73
+ {
74
+ Name : "deployment-validation.kubebuilder.io" ,
75
+ Rules : []admissionv1beta1.RuleWithOperations {
76
+ {
77
+ Operations : []admissionv1beta1.OperationType {"CREATE" , "UPDATE" },
78
+ Rule : admissionv1beta1.Rule {
79
+ APIGroups : []string {"apps" },
80
+ APIVersions : []string {"v1" },
81
+ Resources : []string {"deployments" },
82
+ Scope : & namespacedScopeV1Beta1 ,
83
+ },
84
+ },
85
+ },
86
+ FailurePolicy : & failedTypeV1Beta1 ,
87
+ MatchPolicy : & equivalentTypeV1Beta1 ,
88
+ SideEffects : & noSideEffectsV1Beta1 ,
89
+ ClientConfig : admissionv1beta1.WebhookClientConfig {
90
+ Service : & admissionv1beta1.ServiceReference {
91
+ Name : "deployment-validation-service" ,
92
+ Namespace : "default" ,
93
+ Path : & webhookPathV1 ,
94
+ },
95
+ },
96
+ },
97
+ },
98
+ },
99
+ & admissionv1.ValidatingWebhookConfiguration {
100
+ ObjectMeta : metav1.ObjectMeta {
101
+ Name : "deployment-validation-webhook-config" ,
102
+ },
103
+ TypeMeta : metav1.TypeMeta {
104
+ Kind : "ValidatingWebhookConfiguration" ,
105
+ APIVersion : "admissionregistration.k8s.io/v1beta1" ,
106
+ },
107
+ Webhooks : []admissionv1.ValidatingWebhook {
108
+ {
109
+ Name : "deployment-validation.kubebuilder.io" ,
110
+ Rules : []admissionv1.RuleWithOperations {
111
+ {
112
+ Operations : []admissionv1.OperationType {"CREATE" , "UPDATE" },
113
+ Rule : admissionv1.Rule {
114
+ APIGroups : []string {"apps" },
115
+ APIVersions : []string {"v1" },
116
+ Resources : []string {"deployments" },
117
+ Scope : & namespacedScopeV1 ,
118
+ },
119
+ },
120
+ },
121
+ FailurePolicy : & failedTypeV1 ,
122
+ MatchPolicy : & equivalentTypeV1 ,
123
+ SideEffects : & noSideEffectsV1 ,
124
+ ClientConfig : admissionv1.WebhookClientConfig {
125
+ Service : & admissionv1.ServiceReference {
126
+ Name : "deployment-validation-service" ,
127
+ Namespace : "default" ,
128
+ Path : & webhookPathV1 ,
129
+ },
130
+ },
131
+ },
132
+ },
133
+ },
134
+ },
135
+ }
136
+ }
137
+
44
138
var _ = AfterSuite (func (done Done ) {
45
139
Expect (env .Stop ()).NotTo (HaveOccurred ())
46
140
0 commit comments