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 }