From 8aba36d4b6bd5d65640ce9c2b4b5a42e37dcb09a Mon Sep 17 00:00:00 2001 From: Martin Schuppert Date: Mon, 6 May 2024 17:11:03 +0200 Subject: [PATCH] Add service Endpoint Validate() method This method can e.g. be used in webhooks to validate if the configuration in the CR is correct. --- modules/common/service/types.go | 11 ++++++ modules/common/service/types_test.go | 57 ++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 modules/common/service/types_test.go diff --git a/modules/common/service/types.go b/modules/common/service/types.go index 34125baf..6fb5b484 100644 --- a/modules/common/service/types.go +++ b/modules/common/service/types.go @@ -19,8 +19,11 @@ limitations under the License. package service import ( + "fmt" "time" + "golang.org/x/exp/slices" + corev1 "k8s.io/api/core/v1" ) @@ -60,6 +63,14 @@ func (e *Endpoint) String() string { return string(*e) } +// Validate - validates if the endpoint is an allowed one. +func (e *Endpoint) Validate() error { + if !slices.Contains([]Endpoint{EndpointInternal, EndpointPublic}, *e) { + return fmt.Errorf("invalid endpoint type: %s", e.String()) + } + return nil +} + func (p *Protocol) String() string { return string(*p) } diff --git a/modules/common/service/types_test.go b/modules/common/service/types_test.go new file mode 100644 index 00000000..dc1a0f2f --- /dev/null +++ b/modules/common/service/types_test.go @@ -0,0 +1,57 @@ +/* +Copyright 2024 Red Hat + +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. +*/ + +// +kubebuilder:object:generate:=true + +package service + +import ( + "fmt" + "testing" + + . "github.com/onsi/gomega" +) + +func TestEndpointValidate(t *testing.T) { + tests := []struct { + name string + e Endpoint + want error + }{ + { + name: "Valid endpoint", + e: EndpointInternal, + want: nil, + }, + { + name: "Wrong endpoint", + e: Endpoint("wrooong"), + want: fmt.Errorf("invalid endpoint type: wrooong"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + g := NewWithT(t) + + if tt.want == nil { + g.Expect(tt.e.Validate()).To(Succeed()) + } else { + g.Expect(tt.e.Validate()).To(Equal(tt.want)) + } + }) + } +}