Discovery tests

This commit is contained in:
Martin Montes
2024-05-06 20:10:38 +02:00
parent f57a88e549
commit df940ea577
10 changed files with 134 additions and 56 deletions

View File

@ -147,9 +147,9 @@ var rootCmd = &cobra.Command{
galeraRecorder := mgr.GetEventRecorderFor("galera")
replRecorder := mgr.GetEventRecorderFor("replication")
discoveryClient, err := discovery.NewDiscoveryClient()
discovery, err := discovery.NewDiscovery()
if err != nil {
setupLog.Error(err, "Error getting discovery client")
setupLog.Error(err, "Error getting discovery")
os.Exit(1)
}
@ -229,11 +229,11 @@ var rootCmd = &cobra.Command{
Scheme: scheme,
Recorder: mgr.GetEventRecorderFor("mariadb"),
Environment: env,
Builder: builder,
RefResolver: refResolver,
ConditionReady: conditionReady,
DiscoveryClient: discoveryClient,
Environment: env,
Builder: builder,
RefResolver: refResolver,
ConditionReady: conditionReady,
Discovery: discovery,
ConfigMapReconciler: configMapReconciler,
SecretReconciler: secretReconciler,
@ -258,10 +258,10 @@ var rootCmd = &cobra.Command{
Recorder: mgr.GetEventRecorderFor("maxscale"),
RefResolver: refResolver,
Builder: builder,
ConditionReady: conditionReady,
Environment: env,
DiscoveryClient: discoveryClient,
Builder: builder,
ConditionReady: conditionReady,
Environment: env,
Discovery: discovery,
SecretReconciler: secretReconciler,
RBACReconciler: rbacReconciler,

View File

@ -158,9 +158,9 @@ var rootCmd = &cobra.Command{
galeraRecorder := mgr.GetEventRecorderFor("galera")
replRecorder := mgr.GetEventRecorderFor("replication")
discoveryClient, err := discovery.NewDiscoveryClient()
discovery, err := discovery.NewDiscovery()
if err != nil {
setupLog.Error(err, "Error getting discovery client")
setupLog.Error(err, "Error getting discovery")
os.Exit(1)
}
@ -240,11 +240,11 @@ var rootCmd = &cobra.Command{
Scheme: scheme,
Recorder: mgr.GetEventRecorderFor("mariadb"),
Environment: env,
Builder: builder,
RefResolver: refResolver,
ConditionReady: conditionReady,
DiscoveryClient: discoveryClient,
Environment: env,
Builder: builder,
RefResolver: refResolver,
ConditionReady: conditionReady,
Discovery: discovery,
ConfigMapReconciler: configMapReconciler,
SecretReconciler: secretReconciler,
@ -268,11 +268,11 @@ var rootCmd = &cobra.Command{
Scheme: scheme,
Recorder: mgr.GetEventRecorderFor("maxscale"),
Builder: builder,
ConditionReady: conditionReady,
Environment: env,
RefResolver: refResolver,
DiscoveryClient: discoveryClient,
Builder: builder,
ConditionReady: conditionReady,
Environment: env,
RefResolver: refResolver,
Discovery: discovery,
SecretReconciler: secretReconciler,
RBACReconciler: rbacReconciler,

View File

@ -49,11 +49,11 @@ type MariaDBReconciler struct {
Scheme *runtime.Scheme
Recorder record.EventRecorder
Builder *builder.Builder
RefResolver *refresolver.RefResolver
ConditionReady *condition.Ready
Environment *environment.OperatorEnv
DiscoveryClient *discovery.DiscoveryClient
Builder *builder.Builder
RefResolver *refresolver.RefResolver
ConditionReady *condition.Ready
Environment *environment.OperatorEnv
Discovery *discovery.Discovery
ConfigMapReconciler *configmap.ConfigMapReconciler
SecretReconciler *secret.SecretReconciler

View File

@ -32,7 +32,7 @@ func (r *MariaDBReconciler) reconcileMetrics(ctx context.Context, mariadb *maria
return ctrl.Result{}, nil
}
exist, err := r.DiscoveryClient.ServiceMonitorExist()
exist, err := r.Discovery.ServiceMonitorExist()
if err != nil {
return ctrl.Result{}, err
}

View File

@ -49,11 +49,11 @@ type MaxScaleReconciler struct {
Scheme *runtime.Scheme
Recorder record.EventRecorder
Builder *builder.Builder
ConditionReady *condition.Ready
Environment *environment.OperatorEnv
RefResolver *refresolver.RefResolver
DiscoveryClient *discovery.DiscoveryClient
Builder *builder.Builder
ConditionReady *condition.Ready
Environment *environment.OperatorEnv
RefResolver *refresolver.RefResolver
Discovery *discovery.Discovery
SecretReconciler *secret.SecretReconciler
RBACReconciler *rbac.RBACReconciler

View File

@ -21,7 +21,7 @@ func (r *MaxScaleReconciler) reconcileMetrics(ctx context.Context, req *requestM
return ctrl.Result{}, nil
}
exist, err := r.DiscoveryClient.ServiceMonitorExist()
exist, err := r.Discovery.ServiceMonitorExist()
if err != nil {
return ctrl.Result{}, err
}

View File

@ -117,7 +117,7 @@ var _ = BeforeSuite(func() {
env, err := environment.GetOperatorEnv(testCtx)
Expect(err).ToNot(HaveOccurred())
discoveryClient, err := discovery.NewDiscoveryClient()
discovery, err := discovery.NewDiscovery()
Expect(err).ToNot(HaveOccurred())
builder := builder.NewBuilder(scheme, env)
@ -190,11 +190,11 @@ var _ = BeforeSuite(func() {
Scheme: scheme,
Recorder: k8sManager.GetEventRecorderFor("mariadb"),
Environment: env,
Builder: builder,
RefResolver: refResolver,
ConditionReady: conditionReady,
DiscoveryClient: discoveryClient,
Environment: env,
Builder: builder,
RefResolver: refResolver,
ConditionReady: conditionReady,
Discovery: discovery,
ConfigMapReconciler: configMapReconciler,
SecretReconciler: secretReconciler,
@ -217,11 +217,11 @@ var _ = BeforeSuite(func() {
Scheme: scheme,
Recorder: k8sManager.GetEventRecorderFor("maxscale"),
Builder: builder,
ConditionReady: conditionReady,
Environment: env,
RefResolver: refResolver,
DiscoveryClient: discoveryClient,
Builder: builder,
ConditionReady: conditionReady,
Environment: env,
RefResolver: refResolver,
Discovery: discovery,
SecretReconciler: secretReconciler,
RBACReconciler: rbacReconciler,

1
go.mod
View File

@ -32,6 +32,7 @@ require (
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/evanphx/json-patch v4.12.0+incompatible // indirect
github.com/evanphx/json-patch/v5 v5.8.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-logr/zapr v1.3.0 // indirect

View File

@ -1,39 +1,50 @@
package discovery
import (
"errors"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/client-go/discovery"
ctrl "sigs.k8s.io/controller-runtime"
)
type DiscoveryClient struct {
discovery.DiscoveryClient
type Discovery struct {
client discovery.DiscoveryInterface
}
func NewDiscoveryClient() (*DiscoveryClient, error) {
func NewDiscovery() (*Discovery, error) {
config, err := ctrl.GetConfig()
if err != nil {
return nil, err
}
discoveryClient, err := discovery.NewDiscoveryClientForConfig(config)
client, err := discovery.NewDiscoveryClientForConfig(config)
if err != nil {
return nil, err
}
return &DiscoveryClient{
DiscoveryClient: *discoveryClient,
return &Discovery{
client: client,
}, nil
}
func (c *DiscoveryClient) ServiceMonitorExist() (bool, error) {
func NewDiscoveryWithClient(client discovery.DiscoveryInterface) (*Discovery, error) {
if client == nil {
return nil, errors.New("client should not be nil")
}
return &Discovery{
client: client,
}, nil
}
func (c *Discovery) ServiceMonitorExist() (bool, error) {
return c.resourceExist("monitoring.coreos.com/v1", "servicemonitors")
}
func (c *DiscoveryClient) SecurityContextConstrainstsExist() (bool, error) {
func (c *Discovery) SecurityContextConstrainstsExist() (bool, error) {
return c.resourceExist("security.openshift.io/v1", "securitycontextconstraints")
}
func (c *DiscoveryClient) resourceExist(groupVersion, kind string) (bool, error) {
apiResourceList, err := c.DiscoveryClient.ServerResourcesForGroupVersion(groupVersion)
func (c *Discovery) resourceExist(groupVersion, kind string) (bool, error) {
apiResourceList, err := c.client.ServerResourcesForGroupVersion(groupVersion)
if err != nil {
if apierrors.IsNotFound(err) {
return false, nil

View File

@ -0,0 +1,66 @@
package discovery
import (
"testing"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
fakeDiscovery "k8s.io/client-go/discovery/fake"
fakeClient "k8s.io/client-go/kubernetes/fake"
)
func TestDiscoveryServiceMonitors(t *testing.T) {
testDiscovery(t, "ServiceMonitors", "monitoring.coreos.com/v1", "servicemonitors", func(d *Discovery) (bool, error) {
return d.ServiceMonitorExist()
})
}
func TestDiscoverySecurityContextConstraints(t *testing.T) {
testDiscovery(t, "SecurityContextConstraints", "security.openshift.io/v1", "securitycontextconstraints", func(d *Discovery) (bool, error) {
return d.SecurityContextConstrainstsExist()
})
}
func testDiscovery(t *testing.T, name, group, kind string, discoveryFn func(d *Discovery) (bool, error)) {
resources := []*metav1.APIResourceList{
{
GroupVersion: group,
APIResources: []metav1.APIResource{
{
Name: kind,
},
},
},
}
discovery, err := newFakeDiscovery(resources)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
exists, err := discoveryFn(discovery)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if !exists {
t.Errorf("expected to have discovered '%s'", name)
}
discovery, err = newFakeDiscovery(nil)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
exists, err = discoveryFn(discovery)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if exists {
t.Errorf("expected to not have discovered '%s'", name)
}
}
func newFakeDiscovery(resources []*metav1.APIResourceList) (*Discovery, error) {
client := fakeClient.NewSimpleClientset()
fakeDiscovery := client.Discovery().(*fakeDiscovery.FakeDiscovery)
fakeDiscovery.Resources = resources
return NewDiscoveryWithClient(fakeDiscovery)
}