github.com/argoproj/argo-events@v1.9.1/controllers/eventsource/controller_test.go (about)

     1  package eventsource
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	appv1 "k8s.io/api/apps/v1"
     8  	corev1 "k8s.io/api/core/v1"
     9  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    10  	"k8s.io/client-go/kubernetes/scheme"
    11  	"sigs.k8s.io/controller-runtime/pkg/client/fake"
    12  
    13  	"github.com/argoproj/argo-events/common"
    14  	"github.com/argoproj/argo-events/common/logging"
    15  	eventbusv1alpha1 "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1"
    16  	"github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1"
    17  	"github.com/stretchr/testify/assert"
    18  )
    19  
    20  const (
    21  	testEventSourceName = "test-name"
    22  	testNamespace       = "test-ns"
    23  	testSecretName      = "test-secret"
    24  	testSecretKey       = "test-secret-key"
    25  	testConfigMapName   = "test-cm"
    26  	testConfigMapKey    = "test-cm-key"
    27  )
    28  
    29  var (
    30  	testSecretSelector = &corev1.SecretKeySelector{
    31  		LocalObjectReference: corev1.LocalObjectReference{
    32  			Name: testSecretName,
    33  		},
    34  		Key: testSecretKey,
    35  	}
    36  
    37  	testConfigMapSelector = &corev1.ConfigMapKeySelector{
    38  		LocalObjectReference: corev1.LocalObjectReference{
    39  			Name: testConfigMapName,
    40  		},
    41  		Key: testConfigMapKey,
    42  	}
    43  
    44  	fakeEventBus = &eventbusv1alpha1.EventBus{
    45  		TypeMeta: metav1.TypeMeta{
    46  			APIVersion: eventbusv1alpha1.SchemeGroupVersion.String(),
    47  			Kind:       "EventBus",
    48  		},
    49  		ObjectMeta: metav1.ObjectMeta{
    50  			Namespace: testNamespace,
    51  			Name:      common.DefaultEventBusName,
    52  		},
    53  		Spec: eventbusv1alpha1.EventBusSpec{
    54  			NATS: &eventbusv1alpha1.NATSBus{
    55  				Native: &eventbusv1alpha1.NativeStrategy{
    56  					Auth: &eventbusv1alpha1.AuthStrategyToken,
    57  				},
    58  			},
    59  		},
    60  		Status: eventbusv1alpha1.EventBusStatus{
    61  			Config: eventbusv1alpha1.BusConfig{
    62  				NATS: &eventbusv1alpha1.NATSConfig{
    63  					URL:  "nats://xxxx",
    64  					Auth: &eventbusv1alpha1.AuthStrategyToken,
    65  					AccessSecret: &corev1.SecretKeySelector{
    66  						Key: "test-key",
    67  						LocalObjectReference: corev1.LocalObjectReference{
    68  							Name: "test-name",
    69  						},
    70  					},
    71  				},
    72  			},
    73  		},
    74  	}
    75  
    76  	fakeEventBusJetstream = &eventbusv1alpha1.EventBus{
    77  		TypeMeta: metav1.TypeMeta{
    78  			APIVersion: eventbusv1alpha1.SchemeGroupVersion.String(),
    79  			Kind:       "EventBus",
    80  		},
    81  		ObjectMeta: metav1.ObjectMeta{
    82  			Namespace: testNamespace,
    83  			Name:      common.DefaultEventBusName,
    84  		},
    85  		Spec: eventbusv1alpha1.EventBusSpec{
    86  			JetStream: &eventbusv1alpha1.JetStreamBus{
    87  				Version: "x.x.x",
    88  			},
    89  		},
    90  		Status: eventbusv1alpha1.EventBusStatus{
    91  			Config: eventbusv1alpha1.BusConfig{
    92  				JetStream: &eventbusv1alpha1.JetStreamConfig{
    93  					URL: "nats://xxxx",
    94  				},
    95  			},
    96  		},
    97  	}
    98  
    99  	fakeEventBusKafka = &eventbusv1alpha1.EventBus{
   100  		TypeMeta: metav1.TypeMeta{
   101  			APIVersion: eventbusv1alpha1.SchemeGroupVersion.String(),
   102  			Kind:       "EventBus",
   103  		},
   104  		ObjectMeta: metav1.ObjectMeta{
   105  			Namespace: testNamespace,
   106  			Name:      common.DefaultEventBusName,
   107  		},
   108  		Spec: eventbusv1alpha1.EventBusSpec{
   109  			Kafka: &eventbusv1alpha1.KafkaBus{
   110  				URL: "localhost:9092",
   111  			},
   112  		},
   113  		Status: eventbusv1alpha1.EventBusStatus{
   114  			Config: eventbusv1alpha1.BusConfig{
   115  				Kafka: &eventbusv1alpha1.KafkaBus{
   116  					URL: "localhost:9092",
   117  				},
   118  			},
   119  		},
   120  	}
   121  )
   122  
   123  func fakeEmptyEventSource() *v1alpha1.EventSource {
   124  	return &v1alpha1.EventSource{
   125  		ObjectMeta: metav1.ObjectMeta{
   126  			Namespace: testNamespace,
   127  			Name:      testEventSourceName,
   128  		},
   129  		Spec: v1alpha1.EventSourceSpec{},
   130  	}
   131  }
   132  
   133  func fakeCalendarEventSourceMap(name string) map[string]v1alpha1.CalendarEventSource {
   134  	return map[string]v1alpha1.CalendarEventSource{name: {Schedule: "*/5 * * * *"}}
   135  }
   136  
   137  func fakeWebhookEventSourceMap(name string) map[string]v1alpha1.WebhookEventSource {
   138  	return map[string]v1alpha1.WebhookEventSource{
   139  		name: {
   140  			WebhookContext: v1alpha1.WebhookContext{
   141  				URL:      "http://a.b",
   142  				Endpoint: "/abc",
   143  				Port:     "1234",
   144  			},
   145  		},
   146  	}
   147  }
   148  
   149  func fakeKafkaEventSourceMap(name string) map[string]v1alpha1.KafkaEventSource {
   150  	return map[string]v1alpha1.KafkaEventSource{
   151  		name: {
   152  			URL:       "a.b",
   153  			Partition: "abc",
   154  			Topic:     "topic",
   155  		},
   156  	}
   157  }
   158  
   159  func fakeMQTTEventSourceMap(name string) map[string]v1alpha1.MQTTEventSource {
   160  	return map[string]v1alpha1.MQTTEventSource{
   161  		name: {
   162  			URL:      "a.b",
   163  			ClientID: "cid",
   164  			Topic:    "topic",
   165  		},
   166  	}
   167  }
   168  
   169  func fakeHDFSEventSourceMap(name string) map[string]v1alpha1.HDFSEventSource {
   170  	return map[string]v1alpha1.HDFSEventSource{
   171  		name: {
   172  			Type:                    "t",
   173  			CheckInterval:           "aa",
   174  			Addresses:               []string{"ad1"},
   175  			HDFSUser:                "user",
   176  			KrbCCacheSecret:         testSecretSelector,
   177  			KrbKeytabSecret:         testSecretSelector,
   178  			KrbUsername:             "user",
   179  			KrbRealm:                "llss",
   180  			KrbConfigConfigMap:      testConfigMapSelector,
   181  			KrbServicePrincipalName: "name",
   182  		},
   183  	}
   184  }
   185  
   186  func init() {
   187  	_ = v1alpha1.AddToScheme(scheme.Scheme)
   188  	_ = eventbusv1alpha1.AddToScheme(scheme.Scheme)
   189  	_ = appv1.AddToScheme(scheme.Scheme)
   190  	_ = corev1.AddToScheme(scheme.Scheme)
   191  }
   192  
   193  func TestReconcile(t *testing.T) {
   194  	t.Run("test reconcile without eventbus", func(t *testing.T) {
   195  		testEventSource := fakeEmptyEventSource()
   196  		testEventSource.Spec.Calendar = fakeCalendarEventSourceMap("test")
   197  		ctx := context.TODO()
   198  		cl := fake.NewClientBuilder().Build()
   199  		r := &reconciler{
   200  			client:           cl,
   201  			scheme:           scheme.Scheme,
   202  			eventSourceImage: "test-image",
   203  			logger:           logging.NewArgoEventsLogger(),
   204  		}
   205  		err := r.reconcile(ctx, testEventSource)
   206  		assert.Error(t, err)
   207  		assert.False(t, testEventSource.Status.IsReady())
   208  	})
   209  
   210  	t.Run("test reconcile with eventbus", func(t *testing.T) {
   211  		testEventSource := fakeEmptyEventSource()
   212  		testEventSource.Spec.Calendar = fakeCalendarEventSourceMap("test")
   213  		ctx := context.TODO()
   214  		cl := fake.NewClientBuilder().Build()
   215  		testBus := fakeEventBus.DeepCopy()
   216  		testBus.Status.MarkDeployed("test", "test")
   217  		testBus.Status.MarkConfigured()
   218  		err := cl.Create(ctx, testBus)
   219  		assert.Nil(t, err)
   220  		r := &reconciler{
   221  			client:           cl,
   222  			scheme:           scheme.Scheme,
   223  			eventSourceImage: "test-image",
   224  			logger:           logging.NewArgoEventsLogger(),
   225  		}
   226  		err = r.reconcile(ctx, testEventSource)
   227  		assert.NoError(t, err)
   228  		assert.True(t, testEventSource.Status.IsReady())
   229  	})
   230  }