From a7e5df718260448cec141b378c416553c7b0383f Mon Sep 17 00:00:00 2001 From: Jason Costello Date: Mon, 8 Apr 2024 18:24:00 -0400 Subject: [PATCH 1/7] Adding API defaults unit test + testfile fixture Signed-off-by: Jason Costello --- .../cainjector/v1alpha1/defaults_test.go | 40 +++++++++++++++++++ .../cainjector/v1alpha1/test/apidefaults.go | 23 +++++++++++ .../cainjector/v1alpha1/test/defaults.json | 1 + make/test.mk | 4 ++ 4 files changed, 68 insertions(+) create mode 100644 internal/apis/config/cainjector/v1alpha1/defaults_test.go create mode 100644 internal/apis/config/cainjector/v1alpha1/test/apidefaults.go create mode 100644 internal/apis/config/cainjector/v1alpha1/test/defaults.json diff --git a/internal/apis/config/cainjector/v1alpha1/defaults_test.go b/internal/apis/config/cainjector/v1alpha1/defaults_test.go new file mode 100644 index 000000000..5aa29a681 --- /dev/null +++ b/internal/apis/config/cainjector/v1alpha1/defaults_test.go @@ -0,0 +1,40 @@ +package v1alpha1 + +import ( + "encoding/json" + "github.com/cert-manager/cert-manager/pkg/apis/config/cainjector/v1alpha1" + "os" + "reflect" + "testing" +) + +func TestCAInjectorConfigurationDefaults(t *testing.T) { + tests := []struct { + name string + config *v1alpha1.CAInjectorConfiguration + }{ + { + "cainjection", + &v1alpha1.CAInjectorConfiguration{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + SetObjectDefaults_CAInjectorConfiguration(tt.config) + + var expected *v1alpha1.CAInjectorConfiguration + expectedData, err := os.ReadFile("./test/defaults.json") + err = json.Unmarshal(expectedData, &expected) + + if err != nil { + t.Errorf("testfile not found") + } + + if !reflect.DeepEqual(tt.config, expected) { + prettyExpected, _ := json.MarshalIndent(expected, "", "\t") + prettyGot, _ := json.MarshalIndent(tt.config, "", "\t") + t.Errorf("expected defaults\n %v \n but got \n %v", string(prettyExpected), string(prettyGot)) + } + }) + } +} diff --git a/internal/apis/config/cainjector/v1alpha1/test/apidefaults.go b/internal/apis/config/cainjector/v1alpha1/test/apidefaults.go new file mode 100644 index 000000000..d157545a0 --- /dev/null +++ b/internal/apis/config/cainjector/v1alpha1/test/apidefaults.go @@ -0,0 +1,23 @@ +package main + +import ( + "encoding/json" + "fmt" + v1alpha1_pkg "github.com/cert-manager/cert-manager/internal/apis/config/cainjector/v1alpha1" + "github.com/cert-manager/cert-manager/pkg/apis/config/cainjector/v1alpha1" + "os" +) + +func main() { + config := &v1alpha1.CAInjectorConfiguration{} + v1alpha1_pkg.SetObjectDefaults_CAInjectorConfiguration(config) + data, err := json.Marshal(config) + if err != nil { + panic(err) + } + err = os.WriteFile("./defaults.json", data, 0644) + if err != nil { + panic(err) + } + fmt.Println("cainjector api defaults updated") +} diff --git a/internal/apis/config/cainjector/v1alpha1/test/defaults.json b/internal/apis/config/cainjector/v1alpha1/test/defaults.json new file mode 100644 index 000000000..eb726c08e --- /dev/null +++ b/internal/apis/config/cainjector/v1alpha1/test/defaults.json @@ -0,0 +1 @@ +{"leaderElectionConfig":{"enabled":true,"namespace":"kube-system","leaseDuration":60000000000,"renewDeadline":40000000000,"retryPeriod":15000000000},"enableDataSourceConfig":{"certificates":true},"enableInjectableConfig":{"validatingWebhookConfigurations":true,"mutatingWebhookConfigurations":true,"customResourceDefinitions":true,"apiServices":true},"enablePprof":false,"pprofAddress":"localhost:6060","logging":{"format":"text","flushFrequency":"5s","verbosity":0,"options":{"json":{"infoBufferSize":"0"}}}} \ No newline at end of file diff --git a/make/test.mk b/make/test.mk index 32d288717..e02d0768e 100644 --- a/make/test.mk +++ b/make/test.mk @@ -87,6 +87,10 @@ unit-test-controller: | $(NEEDS_GOTESTSUM) unit-test-webhook: | $(NEEDS_GOTESTSUM) cd cmd/webhook && $(GOTESTSUM) ./... +.PHONY: update-apidefaults-cainjector +update-apidefaults-cainjector: + cd internal/apis/config/cainjector/v1alpha1/test && bash -c "$(GO) run apidefaults.go" + .PHONY: setup-integration-tests setup-integration-tests: templated-crds From bcac7c43cc3f1a8908d14748f7ee0acc96905e50 Mon Sep 17 00:00:00 2001 From: Jason Costello Date: Thu, 11 Apr 2024 17:17:48 -0400 Subject: [PATCH 2/7] Tidying test + update defaults mode Signed-off-by: Jason Costello --- .../cainjector/v1alpha1/defaults_test.go | 18 +++++++++++++-- .../cainjector/v1alpha1/test/apidefaults.go | 23 ------------------- .../v1alpha1/{test => testdata}/defaults.json | 0 make/test.mk | 4 ++-- 4 files changed, 18 insertions(+), 27 deletions(-) delete mode 100644 internal/apis/config/cainjector/v1alpha1/test/apidefaults.go rename internal/apis/config/cainjector/v1alpha1/{test => testdata}/defaults.json (100%) diff --git a/internal/apis/config/cainjector/v1alpha1/defaults_test.go b/internal/apis/config/cainjector/v1alpha1/defaults_test.go index 5aa29a681..a35d3ce93 100644 --- a/internal/apis/config/cainjector/v1alpha1/defaults_test.go +++ b/internal/apis/config/cainjector/v1alpha1/defaults_test.go @@ -8,7 +8,21 @@ import ( "testing" ) +const TestFileLocation = "testdata/defaults.json" + func TestCAInjectorConfigurationDefaults(t *testing.T) { + if os.Getenv("UPDATE_DEFAULTS") == "true" { + config := &v1alpha1.CAInjectorConfiguration{} + SetObjectDefaults_CAInjectorConfiguration(config) + defaultData, err := json.Marshal(config) + if err != nil { + panic(err) + } + if err := os.WriteFile(TestFileLocation, defaultData, 0644); err != nil { + t.Fatal(err) + } + t.Log("cainjector api defaults updated") + } tests := []struct { name string config *v1alpha1.CAInjectorConfiguration @@ -23,11 +37,11 @@ func TestCAInjectorConfigurationDefaults(t *testing.T) { SetObjectDefaults_CAInjectorConfiguration(tt.config) var expected *v1alpha1.CAInjectorConfiguration - expectedData, err := os.ReadFile("./test/defaults.json") + expectedData, err := os.ReadFile(TestFileLocation) err = json.Unmarshal(expectedData, &expected) if err != nil { - t.Errorf("testfile not found") + t.Fatal("testfile not found") } if !reflect.DeepEqual(tt.config, expected) { diff --git a/internal/apis/config/cainjector/v1alpha1/test/apidefaults.go b/internal/apis/config/cainjector/v1alpha1/test/apidefaults.go deleted file mode 100644 index d157545a0..000000000 --- a/internal/apis/config/cainjector/v1alpha1/test/apidefaults.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - v1alpha1_pkg "github.com/cert-manager/cert-manager/internal/apis/config/cainjector/v1alpha1" - "github.com/cert-manager/cert-manager/pkg/apis/config/cainjector/v1alpha1" - "os" -) - -func main() { - config := &v1alpha1.CAInjectorConfiguration{} - v1alpha1_pkg.SetObjectDefaults_CAInjectorConfiguration(config) - data, err := json.Marshal(config) - if err != nil { - panic(err) - } - err = os.WriteFile("./defaults.json", data, 0644) - if err != nil { - panic(err) - } - fmt.Println("cainjector api defaults updated") -} diff --git a/internal/apis/config/cainjector/v1alpha1/test/defaults.json b/internal/apis/config/cainjector/v1alpha1/testdata/defaults.json similarity index 100% rename from internal/apis/config/cainjector/v1alpha1/test/defaults.json rename to internal/apis/config/cainjector/v1alpha1/testdata/defaults.json diff --git a/make/test.mk b/make/test.mk index e02d0768e..4f4ade006 100644 --- a/make/test.mk +++ b/make/test.mk @@ -88,8 +88,8 @@ unit-test-webhook: | $(NEEDS_GOTESTSUM) cd cmd/webhook && $(GOTESTSUM) ./... .PHONY: update-apidefaults-cainjector -update-apidefaults-cainjector: - cd internal/apis/config/cainjector/v1alpha1/test && bash -c "$(GO) run apidefaults.go" +update-apidefaults-cainjector: | $(NEEDS_GOTESTSUM) + cd internal/apis/config/cainjector/v1alpha1/ && UPDATE_DEFAULTS=true $(GOTESTSUM) . && echo "cainjector api defaults updated" .PHONY: setup-integration-tests setup-integration-tests: templated-crds From 2e30c87d31ba2d6f53bb0b072bba6b82cf7dbcc6 Mon Sep 17 00:00:00 2001 From: Jason Costello Date: Thu, 11 Apr 2024 17:29:22 -0400 Subject: [PATCH 3/7] Fixing boilerplate on test Signed-off-by: Jason Costello --- .../config/cainjector/v1alpha1/defaults_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/internal/apis/config/cainjector/v1alpha1/defaults_test.go b/internal/apis/config/cainjector/v1alpha1/defaults_test.go index a35d3ce93..aaea66e1d 100644 --- a/internal/apis/config/cainjector/v1alpha1/defaults_test.go +++ b/internal/apis/config/cainjector/v1alpha1/defaults_test.go @@ -1,3 +1,19 @@ +/* +Copyright 2021 The cert-manager Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package v1alpha1 import ( From f447eb18768fb98be58b9e1efbaf52101b67009d Mon Sep 17 00:00:00 2001 From: Jason Costello Date: Thu, 11 Apr 2024 17:58:57 -0400 Subject: [PATCH 4/7] Fixing from goimports Signed-off-by: Jason Costello --- internal/apis/config/cainjector/v1alpha1/defaults_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/apis/config/cainjector/v1alpha1/defaults_test.go b/internal/apis/config/cainjector/v1alpha1/defaults_test.go index aaea66e1d..b407bc253 100644 --- a/internal/apis/config/cainjector/v1alpha1/defaults_test.go +++ b/internal/apis/config/cainjector/v1alpha1/defaults_test.go @@ -18,10 +18,11 @@ package v1alpha1 import ( "encoding/json" - "github.com/cert-manager/cert-manager/pkg/apis/config/cainjector/v1alpha1" "os" "reflect" "testing" + + "github.com/cert-manager/cert-manager/pkg/apis/config/cainjector/v1alpha1" ) const TestFileLocation = "testdata/defaults.json" From b363fd9b3fed1d849640ef6e3677f2a2b5803c66 Mon Sep 17 00:00:00 2001 From: Jason Costello Date: Sun, 21 Apr 2024 09:15:38 -0400 Subject: [PATCH 5/7] Applying API default tests to rest of configuration modules Signed-off-by: Jason Costello --- .../cainjector/v1alpha1/defaults_test.go | 4 +- .../controller/v1alpha1/defaults_test.go | 56 +++++++++++++++++++ .../v1alpha1/testdata/defaults.json | 1 + .../config/webhook/v1alpha1/defaults_test.go | 54 ++++++++++++++++++ .../webhook/v1alpha1/testdata/defaults.json | 1 + make/test.mk | 8 ++- 6 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 internal/apis/config/controller/v1alpha1/defaults_test.go create mode 100644 internal/apis/config/controller/v1alpha1/testdata/defaults.json create mode 100644 internal/apis/config/webhook/v1alpha1/defaults_test.go create mode 100644 internal/apis/config/webhook/v1alpha1/testdata/defaults.json diff --git a/internal/apis/config/cainjector/v1alpha1/defaults_test.go b/internal/apis/config/cainjector/v1alpha1/defaults_test.go index b407bc253..004998052 100644 --- a/internal/apis/config/cainjector/v1alpha1/defaults_test.go +++ b/internal/apis/config/cainjector/v1alpha1/defaults_test.go @@ -38,14 +38,14 @@ func TestCAInjectorConfigurationDefaults(t *testing.T) { if err := os.WriteFile(TestFileLocation, defaultData, 0644); err != nil { t.Fatal(err) } - t.Log("cainjector api defaults updated") + t.Log("cainjector config api defaults updated") } tests := []struct { name string config *v1alpha1.CAInjectorConfiguration }{ { - "cainjection", + "v1alpha1", &v1alpha1.CAInjectorConfiguration{}, }, } diff --git a/internal/apis/config/controller/v1alpha1/defaults_test.go b/internal/apis/config/controller/v1alpha1/defaults_test.go new file mode 100644 index 000000000..c09d271f3 --- /dev/null +++ b/internal/apis/config/controller/v1alpha1/defaults_test.go @@ -0,0 +1,56 @@ +package v1alpha1 + +import ( + "encoding/json" + "github.com/cert-manager/cert-manager/pkg/apis/config/controller/v1alpha1" + "os" + "reflect" + "testing" +) + +const TestFileLocation = "testdata/defaults.json" + +func TestControllerConfigurationDefaults(t *testing.T) { + if os.Getenv("UPDATE_DEFAULTS") == "true" { + config := &v1alpha1.ControllerConfiguration{} + SetObjectDefaults_ControllerConfiguration(config) + defaultData, err := json.Marshal(config) + if err != nil { + panic(err) + } + if err := os.WriteFile(TestFileLocation, defaultData, 0644); err != nil { + t.Fatal(err) + } + t.Log("controller api defaults updated") + } + tests := []struct { + name string + config *v1alpha1.ControllerConfiguration + }{ + { + "v1alpha1", + &v1alpha1.ControllerConfiguration{}, + }, + } + for _, tt := range tests { + SetObjectDefaults_ControllerConfiguration(tt.config) + + var expected *v1alpha1.ControllerConfiguration + expectedData, err := os.ReadFile(TestFileLocation) + err = json.Unmarshal(expectedData, &expected) + + // need re-initialised post-unmarshal to avoid nil slice + SetDefaults_ACMEHTTP01Config(&expected.ACMEHTTP01Config) + SetDefaults_ACMEDNS01Config(&expected.ACMEDNS01Config) + + if err != nil { + t.Fatal("testfile not found") + } + + if !reflect.DeepEqual(tt.config, expected) { + prettyExpected, _ := json.MarshalIndent(expected, "", "\t") + prettyGot, _ := json.MarshalIndent(tt.config, "", "\t") + t.Errorf("expected defaults\n %v \n but got \n %v", string(prettyExpected), string(prettyGot)) + } + } +} diff --git a/internal/apis/config/controller/v1alpha1/testdata/defaults.json b/internal/apis/config/controller/v1alpha1/testdata/defaults.json new file mode 100644 index 000000000..5f9ee823d --- /dev/null +++ b/internal/apis/config/controller/v1alpha1/testdata/defaults.json @@ -0,0 +1 @@ +{"kubernetesAPIQPS":20,"kubernetesAPIBurst":50,"clusterResourceNamespace":"kube-system","leaderElectionConfig":{"enabled":true,"namespace":"kube-system","leaseDuration":60000000000,"renewDeadline":40000000000,"retryPeriod":15000000000,"healthzTimeout":20000000000},"controllers":["*"],"issuerAmbientCredentials":false,"clusterIssuerAmbientCredentials":true,"enableCertificateOwnerRef":false,"copiedAnnotationPrefixes":["*","-kubectl.kubernetes.io/","-fluxcd.io/","-argocd.argoproj.io/"],"numberOfConcurrentWorkers":5,"maxConcurrentChallenges":60,"metricsListenAddress":"0.0.0.0:9402","metricsTLSConfig":{"filesystem":{},"dynamic":{"LeafDuration":0}},"healthzListenAddress":"0.0.0.0:9403","enablePprof":false,"pprofAddress":"localhost:6060","logging":{"format":"text","flushFrequency":"5s","verbosity":0,"options":{"json":{"infoBufferSize":"0"}}},"ingressShimConfig":{"defaultIssuerKind":"Issuer","defaultIssuerGroup":"cert-manager.io","defaultAutoCertificateAnnotations":["kubernetes.io/tls-acme"]},"acmeHTTP01Config":{"solverImage":"quay.io/jetstack/cert-manager-acmesolver:canary","solverResourceRequestCPU":"10m","solverResourceRequestMemory":"64Mi","solverResourceLimitsCPU":"100m","solverResourceLimitsMemory":"64Mi","solverRunAsNonRoot":true},"acmeDNS01Config":{"recursiveNameserversOnly":false,"checkRetryPeriod":10000000000}} \ No newline at end of file diff --git a/internal/apis/config/webhook/v1alpha1/defaults_test.go b/internal/apis/config/webhook/v1alpha1/defaults_test.go new file mode 100644 index 000000000..1bb4beb02 --- /dev/null +++ b/internal/apis/config/webhook/v1alpha1/defaults_test.go @@ -0,0 +1,54 @@ +package v1alpha1 + +import ( + "encoding/json" + "github.com/cert-manager/cert-manager/pkg/apis/config/webhook/v1alpha1" + "os" + "reflect" + "testing" +) + +const TestFileLocation = "testdata/defaults.json" + +func TestWebhookConfigurationDefaults(t *testing.T) { + if os.Getenv("UPDATE_DEFAULTS") == "true" { + config := &v1alpha1.WebhookConfiguration{} + SetObjectDefaults_WebhookConfiguration(config) + defaultData, err := json.Marshal(config) + if err != nil { + panic(err) + } + if err := os.WriteFile(TestFileLocation, defaultData, 0644); err != nil { + t.Fatal(err) + } + t.Log("webhook config api defaults updated") + } + tests := []struct { + name string + config *v1alpha1.WebhookConfiguration + }{ + { + "v1alpha1", + &v1alpha1.WebhookConfiguration{}, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + SetObjectDefaults_WebhookConfiguration(tt.config) + + var expected *v1alpha1.WebhookConfiguration + expectedData, err := os.ReadFile(TestFileLocation) + err = json.Unmarshal(expectedData, &expected) + + if err != nil { + t.Fatal("testfile not found") + } + + if !reflect.DeepEqual(tt.config, expected) { + prettyExpected, _ := json.MarshalIndent(expected, "", "\t") + prettyGot, _ := json.MarshalIndent(tt.config, "", "\t") + t.Errorf("expected defaults\n %v \n but got \n %v", string(prettyExpected), string(prettyGot)) + } + }) + } +} diff --git a/internal/apis/config/webhook/v1alpha1/testdata/defaults.json b/internal/apis/config/webhook/v1alpha1/testdata/defaults.json new file mode 100644 index 000000000..a13c42327 --- /dev/null +++ b/internal/apis/config/webhook/v1alpha1/testdata/defaults.json @@ -0,0 +1 @@ +{"securePort":6443,"healthzPort":6080,"tlsConfig":{"filesystem":{},"dynamic":{"LeafDuration":0}},"enablePprof":false,"pprofAddress":"localhost:6060","logging":{"format":"text","flushFrequency":"5s","verbosity":0,"options":{"json":{"infoBufferSize":"0"}}}} \ No newline at end of file diff --git a/make/test.mk b/make/test.mk index 207907dc2..8a14f4d75 100644 --- a/make/test.mk +++ b/make/test.mk @@ -87,9 +87,11 @@ unit-test-controller: | $(NEEDS_GOTESTSUM) unit-test-webhook: | $(NEEDS_GOTESTSUM) cd cmd/webhook && $(GOTESTSUM) ./... -.PHONY: update-apidefaults-cainjector -update-apidefaults-cainjector: | $(NEEDS_GOTESTSUM) - cd internal/apis/config/cainjector/v1alpha1/ && UPDATE_DEFAULTS=true $(GOTESTSUM) . && echo "cainjector api defaults updated" +.PHONY: update-config-api-defaults +update-config-api-defaults: | $(NEEDS_GOTESTSUM) + cd internal/apis/config/cainjector/v1alpha1/ && UPDATE_DEFAULTS=true $(GOTESTSUM) . && echo "cainjector config api defaults updated" + cd internal/apis/config/controller/v1alpha1/ && UPDATE_DEFAULTS=true $(GOTESTSUM) . && echo "controller config api defaults updated" + cd internal/apis/config/webhook/v1alpha1/ && UPDATE_DEFAULTS=true $(GOTESTSUM) . && echo "webhook config api defaults updated" .PHONY: setup-integration-tests setup-integration-tests: templated-crds From 610a066fef26c0878c5f3d261d0a2a9a86ad681f Mon Sep 17 00:00:00 2001 From: Jason Costello Date: Sun, 21 Apr 2024 15:12:02 -0400 Subject: [PATCH 6/7] Adding missing boilerplate Signed-off-by: Jason Costello --- .../config/controller/v1alpha1/defaults_test.go | 16 ++++++++++++++++ .../config/webhook/v1alpha1/defaults_test.go | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/internal/apis/config/controller/v1alpha1/defaults_test.go b/internal/apis/config/controller/v1alpha1/defaults_test.go index c09d271f3..fbc3cd70d 100644 --- a/internal/apis/config/controller/v1alpha1/defaults_test.go +++ b/internal/apis/config/controller/v1alpha1/defaults_test.go @@ -1,3 +1,19 @@ +/* +Copyright 2021 The cert-manager Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package v1alpha1 import ( diff --git a/internal/apis/config/webhook/v1alpha1/defaults_test.go b/internal/apis/config/webhook/v1alpha1/defaults_test.go index 1bb4beb02..ed2a79938 100644 --- a/internal/apis/config/webhook/v1alpha1/defaults_test.go +++ b/internal/apis/config/webhook/v1alpha1/defaults_test.go @@ -1,3 +1,19 @@ +/* +Copyright 2021 The cert-manager Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package v1alpha1 import ( From a26e2dc21e24e140b55fa721f76c0b7f09b51dc3 Mon Sep 17 00:00:00 2001 From: Tim Ramlot <42113979+inteon@users.noreply.github.com> Date: Tue, 23 Apr 2024 13:02:55 +0200 Subject: [PATCH 7/7] cleanup code Signed-off-by: Tim Ramlot <42113979+inteon@users.noreply.github.com> --- .../cainjector/v1alpha1/defaults_test.go | 45 ++++++------- .../v1alpha1/testdata/defaults.json | 31 ++++++++- .../controller/v1alpha1/defaults_test.go | 50 ++++++-------- .../v1alpha1/testdata/defaults.json | 67 ++++++++++++++++++- .../config/webhook/v1alpha1/defaults_test.go | 48 ++++++------- .../webhook/v1alpha1/testdata/defaults.json | 23 ++++++- make/test.mk | 8 +-- 7 files changed, 183 insertions(+), 89 deletions(-) diff --git a/internal/apis/config/cainjector/v1alpha1/defaults_test.go b/internal/apis/config/cainjector/v1alpha1/defaults_test.go index 004998052..4fa0b377e 100644 --- a/internal/apis/config/cainjector/v1alpha1/defaults_test.go +++ b/internal/apis/config/cainjector/v1alpha1/defaults_test.go @@ -19,53 +19,46 @@ package v1alpha1 import ( "encoding/json" "os" - "reflect" "testing" "github.com/cert-manager/cert-manager/pkg/apis/config/cainjector/v1alpha1" + "github.com/stretchr/testify/require" ) -const TestFileLocation = "testdata/defaults.json" - func TestCAInjectorConfigurationDefaults(t *testing.T) { - if os.Getenv("UPDATE_DEFAULTS") == "true" { - config := &v1alpha1.CAInjectorConfiguration{} - SetObjectDefaults_CAInjectorConfiguration(config) - defaultData, err := json.Marshal(config) - if err != nil { - panic(err) - } - if err := os.WriteFile(TestFileLocation, defaultData, 0644); err != nil { - t.Fatal(err) - } - t.Log("cainjector config api defaults updated") - } tests := []struct { - name string - config *v1alpha1.CAInjectorConfiguration + name string + config *v1alpha1.CAInjectorConfiguration + jsonFilePath string }{ { "v1alpha1", &v1alpha1.CAInjectorConfiguration{}, + "testdata/defaults.json", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { SetObjectDefaults_CAInjectorConfiguration(tt.config) - var expected *v1alpha1.CAInjectorConfiguration - expectedData, err := os.ReadFile(TestFileLocation) - err = json.Unmarshal(expectedData, &expected) - + defaultData, err := json.MarshalIndent(tt.config, "", "\t") if err != nil { - t.Fatal("testfile not found") + t.Fatal(err) } - if !reflect.DeepEqual(tt.config, expected) { - prettyExpected, _ := json.MarshalIndent(expected, "", "\t") - prettyGot, _ := json.MarshalIndent(tt.config, "", "\t") - t.Errorf("expected defaults\n %v \n but got \n %v", string(prettyExpected), string(prettyGot)) + if os.Getenv("UPDATE_DEFAULTS") == "true" { + if err := os.WriteFile(tt.jsonFilePath, defaultData, 0644); err != nil { + t.Fatal(err) + } + t.Log("cainjector config api defaults updated") } + + expectedData, err := os.ReadFile(tt.jsonFilePath) + if err != nil { + t.Fatal(err) + } + + require.Equal(t, expectedData, defaultData) }) } } diff --git a/internal/apis/config/cainjector/v1alpha1/testdata/defaults.json b/internal/apis/config/cainjector/v1alpha1/testdata/defaults.json index eb726c08e..ee6066438 100644 --- a/internal/apis/config/cainjector/v1alpha1/testdata/defaults.json +++ b/internal/apis/config/cainjector/v1alpha1/testdata/defaults.json @@ -1 +1,30 @@ -{"leaderElectionConfig":{"enabled":true,"namespace":"kube-system","leaseDuration":60000000000,"renewDeadline":40000000000,"retryPeriod":15000000000},"enableDataSourceConfig":{"certificates":true},"enableInjectableConfig":{"validatingWebhookConfigurations":true,"mutatingWebhookConfigurations":true,"customResourceDefinitions":true,"apiServices":true},"enablePprof":false,"pprofAddress":"localhost:6060","logging":{"format":"text","flushFrequency":"5s","verbosity":0,"options":{"json":{"infoBufferSize":"0"}}}} \ No newline at end of file +{ + "leaderElectionConfig": { + "enabled": true, + "namespace": "kube-system", + "leaseDuration": 60000000000, + "renewDeadline": 40000000000, + "retryPeriod": 15000000000 + }, + "enableDataSourceConfig": { + "certificates": true + }, + "enableInjectableConfig": { + "validatingWebhookConfigurations": true, + "mutatingWebhookConfigurations": true, + "customResourceDefinitions": true, + "apiServices": true + }, + "enablePprof": false, + "pprofAddress": "localhost:6060", + "logging": { + "format": "text", + "flushFrequency": "5s", + "verbosity": 0, + "options": { + "json": { + "infoBufferSize": "0" + } + } + } +} \ No newline at end of file diff --git a/internal/apis/config/controller/v1alpha1/defaults_test.go b/internal/apis/config/controller/v1alpha1/defaults_test.go index fbc3cd70d..a6927829f 100644 --- a/internal/apis/config/controller/v1alpha1/defaults_test.go +++ b/internal/apis/config/controller/v1alpha1/defaults_test.go @@ -18,55 +18,47 @@ package v1alpha1 import ( "encoding/json" - "github.com/cert-manager/cert-manager/pkg/apis/config/controller/v1alpha1" "os" - "reflect" "testing" + + "github.com/cert-manager/cert-manager/pkg/apis/config/controller/v1alpha1" + "github.com/stretchr/testify/require" ) const TestFileLocation = "testdata/defaults.json" func TestControllerConfigurationDefaults(t *testing.T) { - if os.Getenv("UPDATE_DEFAULTS") == "true" { - config := &v1alpha1.ControllerConfiguration{} - SetObjectDefaults_ControllerConfiguration(config) - defaultData, err := json.Marshal(config) - if err != nil { - panic(err) - } - if err := os.WriteFile(TestFileLocation, defaultData, 0644); err != nil { - t.Fatal(err) - } - t.Log("controller api defaults updated") - } tests := []struct { - name string - config *v1alpha1.ControllerConfiguration + name string + config *v1alpha1.ControllerConfiguration + jsonFilePath string }{ { "v1alpha1", &v1alpha1.ControllerConfiguration{}, + "testdata/defaults.json", }, } for _, tt := range tests { SetObjectDefaults_ControllerConfiguration(tt.config) - var expected *v1alpha1.ControllerConfiguration - expectedData, err := os.ReadFile(TestFileLocation) - err = json.Unmarshal(expectedData, &expected) - - // need re-initialised post-unmarshal to avoid nil slice - SetDefaults_ACMEHTTP01Config(&expected.ACMEHTTP01Config) - SetDefaults_ACMEDNS01Config(&expected.ACMEDNS01Config) - + defaultData, err := json.MarshalIndent(tt.config, "", "\t") if err != nil { - t.Fatal("testfile not found") + t.Fatal(err) } - if !reflect.DeepEqual(tt.config, expected) { - prettyExpected, _ := json.MarshalIndent(expected, "", "\t") - prettyGot, _ := json.MarshalIndent(tt.config, "", "\t") - t.Errorf("expected defaults\n %v \n but got \n %v", string(prettyExpected), string(prettyGot)) + if os.Getenv("UPDATE_DEFAULTS") == "true" { + if err := os.WriteFile(tt.jsonFilePath, defaultData, 0644); err != nil { + t.Fatal(err) + } + t.Log("cainjector config api defaults updated") } + + expectedData, err := os.ReadFile(tt.jsonFilePath) + if err != nil { + t.Fatal(err) + } + + require.Equal(t, expectedData, defaultData) } } diff --git a/internal/apis/config/controller/v1alpha1/testdata/defaults.json b/internal/apis/config/controller/v1alpha1/testdata/defaults.json index 5f9ee823d..1004ab5d9 100644 --- a/internal/apis/config/controller/v1alpha1/testdata/defaults.json +++ b/internal/apis/config/controller/v1alpha1/testdata/defaults.json @@ -1 +1,66 @@ -{"kubernetesAPIQPS":20,"kubernetesAPIBurst":50,"clusterResourceNamespace":"kube-system","leaderElectionConfig":{"enabled":true,"namespace":"kube-system","leaseDuration":60000000000,"renewDeadline":40000000000,"retryPeriod":15000000000,"healthzTimeout":20000000000},"controllers":["*"],"issuerAmbientCredentials":false,"clusterIssuerAmbientCredentials":true,"enableCertificateOwnerRef":false,"copiedAnnotationPrefixes":["*","-kubectl.kubernetes.io/","-fluxcd.io/","-argocd.argoproj.io/"],"numberOfConcurrentWorkers":5,"maxConcurrentChallenges":60,"metricsListenAddress":"0.0.0.0:9402","metricsTLSConfig":{"filesystem":{},"dynamic":{"LeafDuration":0}},"healthzListenAddress":"0.0.0.0:9403","enablePprof":false,"pprofAddress":"localhost:6060","logging":{"format":"text","flushFrequency":"5s","verbosity":0,"options":{"json":{"infoBufferSize":"0"}}},"ingressShimConfig":{"defaultIssuerKind":"Issuer","defaultIssuerGroup":"cert-manager.io","defaultAutoCertificateAnnotations":["kubernetes.io/tls-acme"]},"acmeHTTP01Config":{"solverImage":"quay.io/jetstack/cert-manager-acmesolver:canary","solverResourceRequestCPU":"10m","solverResourceRequestMemory":"64Mi","solverResourceLimitsCPU":"100m","solverResourceLimitsMemory":"64Mi","solverRunAsNonRoot":true},"acmeDNS01Config":{"recursiveNameserversOnly":false,"checkRetryPeriod":10000000000}} \ No newline at end of file +{ + "kubernetesAPIQPS": 20, + "kubernetesAPIBurst": 50, + "clusterResourceNamespace": "kube-system", + "leaderElectionConfig": { + "enabled": true, + "namespace": "kube-system", + "leaseDuration": 60000000000, + "renewDeadline": 40000000000, + "retryPeriod": 15000000000, + "healthzTimeout": 20000000000 + }, + "controllers": [ + "*" + ], + "issuerAmbientCredentials": false, + "clusterIssuerAmbientCredentials": true, + "enableCertificateOwnerRef": false, + "copiedAnnotationPrefixes": [ + "*", + "-kubectl.kubernetes.io/", + "-fluxcd.io/", + "-argocd.argoproj.io/" + ], + "numberOfConcurrentWorkers": 5, + "maxConcurrentChallenges": 60, + "metricsListenAddress": "0.0.0.0:9402", + "metricsTLSConfig": { + "filesystem": {}, + "dynamic": { + "LeafDuration": 0 + } + }, + "healthzListenAddress": "0.0.0.0:9403", + "enablePprof": false, + "pprofAddress": "localhost:6060", + "logging": { + "format": "text", + "flushFrequency": "5s", + "verbosity": 0, + "options": { + "json": { + "infoBufferSize": "0" + } + } + }, + "ingressShimConfig": { + "defaultIssuerKind": "Issuer", + "defaultIssuerGroup": "cert-manager.io", + "defaultAutoCertificateAnnotations": [ + "kubernetes.io/tls-acme" + ] + }, + "acmeHTTP01Config": { + "solverImage": "quay.io/jetstack/cert-manager-acmesolver:canary", + "solverResourceRequestCPU": "10m", + "solverResourceRequestMemory": "64Mi", + "solverResourceLimitsCPU": "100m", + "solverResourceLimitsMemory": "64Mi", + "solverRunAsNonRoot": true + }, + "acmeDNS01Config": { + "recursiveNameserversOnly": false, + "checkRetryPeriod": 10000000000 + } +} \ No newline at end of file diff --git a/internal/apis/config/webhook/v1alpha1/defaults_test.go b/internal/apis/config/webhook/v1alpha1/defaults_test.go index ed2a79938..d25842d34 100644 --- a/internal/apis/config/webhook/v1alpha1/defaults_test.go +++ b/internal/apis/config/webhook/v1alpha1/defaults_test.go @@ -18,53 +18,47 @@ package v1alpha1 import ( "encoding/json" - "github.com/cert-manager/cert-manager/pkg/apis/config/webhook/v1alpha1" "os" - "reflect" "testing" + + "github.com/cert-manager/cert-manager/pkg/apis/config/webhook/v1alpha1" + "github.com/stretchr/testify/require" ) -const TestFileLocation = "testdata/defaults.json" - func TestWebhookConfigurationDefaults(t *testing.T) { - if os.Getenv("UPDATE_DEFAULTS") == "true" { - config := &v1alpha1.WebhookConfiguration{} - SetObjectDefaults_WebhookConfiguration(config) - defaultData, err := json.Marshal(config) - if err != nil { - panic(err) - } - if err := os.WriteFile(TestFileLocation, defaultData, 0644); err != nil { - t.Fatal(err) - } - t.Log("webhook config api defaults updated") - } tests := []struct { - name string - config *v1alpha1.WebhookConfiguration + name string + config *v1alpha1.WebhookConfiguration + jsonFilePath string }{ { "v1alpha1", &v1alpha1.WebhookConfiguration{}, + "testdata/defaults.json", }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { SetObjectDefaults_WebhookConfiguration(tt.config) - var expected *v1alpha1.WebhookConfiguration - expectedData, err := os.ReadFile(TestFileLocation) - err = json.Unmarshal(expectedData, &expected) - + defaultData, err := json.MarshalIndent(tt.config, "", "\t") if err != nil { - t.Fatal("testfile not found") + t.Fatal(err) } - if !reflect.DeepEqual(tt.config, expected) { - prettyExpected, _ := json.MarshalIndent(expected, "", "\t") - prettyGot, _ := json.MarshalIndent(tt.config, "", "\t") - t.Errorf("expected defaults\n %v \n but got \n %v", string(prettyExpected), string(prettyGot)) + if os.Getenv("UPDATE_DEFAULTS") == "true" { + if err := os.WriteFile(tt.jsonFilePath, defaultData, 0644); err != nil { + t.Fatal(err) + } + t.Log("cainjector config api defaults updated") } + + expectedData, err := os.ReadFile(tt.jsonFilePath) + if err != nil { + t.Fatal(err) + } + + require.Equal(t, expectedData, defaultData) }) } } diff --git a/internal/apis/config/webhook/v1alpha1/testdata/defaults.json b/internal/apis/config/webhook/v1alpha1/testdata/defaults.json index a13c42327..4537a3e93 100644 --- a/internal/apis/config/webhook/v1alpha1/testdata/defaults.json +++ b/internal/apis/config/webhook/v1alpha1/testdata/defaults.json @@ -1 +1,22 @@ -{"securePort":6443,"healthzPort":6080,"tlsConfig":{"filesystem":{},"dynamic":{"LeafDuration":0}},"enablePprof":false,"pprofAddress":"localhost:6060","logging":{"format":"text","flushFrequency":"5s","verbosity":0,"options":{"json":{"infoBufferSize":"0"}}}} \ No newline at end of file +{ + "securePort": 6443, + "healthzPort": 6080, + "tlsConfig": { + "filesystem": {}, + "dynamic": { + "LeafDuration": 0 + } + }, + "enablePprof": false, + "pprofAddress": "localhost:6060", + "logging": { + "format": "text", + "flushFrequency": "5s", + "verbosity": 0, + "options": { + "json": { + "infoBufferSize": "0" + } + } + } +} \ No newline at end of file diff --git a/make/test.mk b/make/test.mk index 8a14f4d75..fdf688b27 100644 --- a/make/test.mk +++ b/make/test.mk @@ -88,10 +88,10 @@ unit-test-webhook: | $(NEEDS_GOTESTSUM) cd cmd/webhook && $(GOTESTSUM) ./... .PHONY: update-config-api-defaults -update-config-api-defaults: | $(NEEDS_GOTESTSUM) - cd internal/apis/config/cainjector/v1alpha1/ && UPDATE_DEFAULTS=true $(GOTESTSUM) . && echo "cainjector config api defaults updated" - cd internal/apis/config/controller/v1alpha1/ && UPDATE_DEFAULTS=true $(GOTESTSUM) . && echo "controller config api defaults updated" - cd internal/apis/config/webhook/v1alpha1/ && UPDATE_DEFAULTS=true $(GOTESTSUM) . && echo "webhook config api defaults updated" +update-config-api-defaults: | $(NEEDS_GO) + cd internal/apis/config/cainjector/v1alpha1/ && UPDATE_DEFAULTS=true $(GO) test . && echo "cainjector config api defaults updated" + cd internal/apis/config/controller/v1alpha1/ && UPDATE_DEFAULTS=true $(GO) test . && echo "controller config api defaults updated" + cd internal/apis/config/webhook/v1alpha1/ && UPDATE_DEFAULTS=true $(GO) test . && echo "webhook config api defaults updated" .PHONY: setup-integration-tests setup-integration-tests: templated-crds