github.com/argoproj/argo-events@v1.9.1/controllers/eventbus/installer/installer_test.go (about) 1 package installer 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "go.uber.org/zap/zaptest" 9 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 10 k8sfake "k8s.io/client-go/kubernetes/fake" 11 "k8s.io/client-go/kubernetes/scheme" 12 "sigs.k8s.io/controller-runtime/pkg/client" 13 "sigs.k8s.io/controller-runtime/pkg/client/fake" 14 15 "github.com/argoproj/argo-events/controllers" 16 eventsourcev1alpha1 "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1" 17 sensorv1alpha1 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1" 18 ) 19 20 const ( 21 testJetStreamImage = "test-js-image" 22 testJSReloaderImage = "test-nats-rl-image" 23 testJetStreamExporterImage = "test-js-e-image" 24 ) 25 26 var ( 27 fakeConfig = &controllers.GlobalConfig{ 28 EventBus: &controllers.EventBusConfig{ 29 NATS: &controllers.StanConfig{ 30 Versions: []controllers.StanVersion{ 31 { 32 Version: "0.22.1", 33 NATSStreamingImage: "test-n-s-image", 34 MetricsExporterImage: "test-n-s-m-image", 35 }, 36 }, 37 }, 38 JetStream: &controllers.JetStreamConfig{ 39 Versions: []controllers.JetStreamVersion{ 40 { 41 Version: "2.7.3", 42 NatsImage: testJetStreamImage, 43 ConfigReloaderImage: testJSReloaderImage, 44 MetricsExporterImage: testJetStreamExporterImage, 45 }, 46 }, 47 }, 48 }, 49 } 50 ) 51 52 func TestGetInstaller(t *testing.T) { 53 t.Run("get installer", func(t *testing.T) { 54 installer, err := getInstaller(testNatsEventBus, nil, nil, fakeConfig, zaptest.NewLogger(t).Sugar()) 55 assert.NoError(t, err) 56 assert.NotNil(t, installer) 57 _, ok := installer.(*natsInstaller) 58 assert.True(t, ok) 59 60 installer, err = getInstaller(testNatsExoticBus, nil, nil, fakeConfig, zaptest.NewLogger(t).Sugar()) 61 assert.NoError(t, err) 62 assert.NotNil(t, installer) 63 _, ok = installer.(*exoticNATSInstaller) 64 assert.True(t, ok) 65 }) 66 67 t.Run("get jetstream installer", func(t *testing.T) { 68 installer, err := getInstaller(testJetStreamEventBus, nil, nil, fakeConfig, zaptest.NewLogger(t).Sugar()) 69 assert.NoError(t, err) 70 assert.NotNil(t, installer) 71 _, ok := installer.(*jetStreamInstaller) 72 assert.True(t, ok) 73 74 installer, err = getInstaller(testJetStreamExoticBus, nil, nil, fakeConfig, zaptest.NewLogger(t).Sugar()) 75 assert.NoError(t, err) 76 assert.NotNil(t, installer) 77 _, ok = installer.(*exoticJetStreamInstaller) 78 assert.True(t, ok) 79 }) 80 } 81 82 func init() { 83 _ = eventsourcev1alpha1.AddToScheme(scheme.Scheme) 84 _ = sensorv1alpha1.AddToScheme(scheme.Scheme) 85 } 86 87 func TestGetLinkedEventSources(t *testing.T) { 88 t.Run("get linked eventsources", func(t *testing.T) { 89 es := fakeEmptyEventSource() 90 es.Spec.EventBusName = "test-sa" 91 es.Spec.Calendar = fakeCalendarEventSourceMap("test") 92 cl := fake.NewClientBuilder().Build() 93 ctx := context.Background() 94 err := cl.Create(ctx, es, &client.CreateOptions{}) 95 assert.Nil(t, err) 96 n, err := linkedEventSources(ctx, testNamespace, "test-sa", cl) 97 assert.Nil(t, err) 98 assert.Equal(t, n, 1) 99 }) 100 } 101 102 func TestGetLinkedSensors(t *testing.T) { 103 t.Run("get linked sensors", func(t *testing.T) { 104 s := fakeSensor() 105 s.Spec.EventBusName = "test-sa" 106 cl := fake.NewClientBuilder().Build() 107 ctx := context.Background() 108 err := cl.Create(ctx, s, &client.CreateOptions{}) 109 assert.Nil(t, err) 110 n, err := linkedSensors(ctx, testNamespace, "test-sa", cl) 111 assert.Nil(t, err) 112 assert.Equal(t, n, 1) 113 }) 114 } 115 116 func fakeEmptyEventSource() *eventsourcev1alpha1.EventSource { 117 return &eventsourcev1alpha1.EventSource{ 118 ObjectMeta: metav1.ObjectMeta{ 119 Namespace: testNamespace, 120 Name: "test-es", 121 }, 122 Spec: eventsourcev1alpha1.EventSourceSpec{}, 123 } 124 } 125 126 func fakeCalendarEventSourceMap(name string) map[string]eventsourcev1alpha1.CalendarEventSource { 127 return map[string]eventsourcev1alpha1.CalendarEventSource{name: {Schedule: "*/5 * * * *"}} 128 } 129 130 func fakeSensor() *sensorv1alpha1.Sensor { 131 return &sensorv1alpha1.Sensor{ 132 ObjectMeta: metav1.ObjectMeta{ 133 Name: "fake-sensor", 134 Namespace: testNamespace, 135 }, 136 Spec: sensorv1alpha1.SensorSpec{ 137 Triggers: []sensorv1alpha1.Trigger{ 138 { 139 Template: &sensorv1alpha1.TriggerTemplate{ 140 Name: "fake-trigger", 141 K8s: &sensorv1alpha1.StandardK8STrigger{ 142 Operation: "create", 143 Source: &sensorv1alpha1.ArtifactLocation{}, 144 }, 145 }, 146 }, 147 }, 148 Dependencies: []sensorv1alpha1.EventDependency{ 149 { 150 Name: "fake-dep", 151 EventSourceName: "fake-source", 152 EventName: "fake-one", 153 }, 154 }, 155 }, 156 } 157 } 158 159 func TestInstall(t *testing.T) { 160 kubeClient := k8sfake.NewSimpleClientset() 161 cl := fake.NewClientBuilder().Build() 162 ctx := context.TODO() 163 164 t.Run("test nats error", func(t *testing.T) { 165 testObj := testNatsEventBus.DeepCopy() 166 testObj.Spec.NATS = nil 167 err := Install(ctx, testObj, cl, kubeClient, fakeConfig, zaptest.NewLogger(t).Sugar()) 168 assert.Error(t, err) 169 assert.Equal(t, "invalid eventbus spec", err.Error()) 170 }) 171 172 t.Run("test nats install ok", func(t *testing.T) { 173 testObj := testNatsEventBus.DeepCopy() 174 err := Install(ctx, testObj, cl, kubeClient, fakeConfig, zaptest.NewLogger(t).Sugar()) 175 assert.NoError(t, err) 176 assert.True(t, testObj.Status.IsReady()) 177 assert.NotNil(t, testObj.Status.Config.NATS) 178 assert.NotEmpty(t, testObj.Status.Config.NATS.URL) 179 assert.NotNil(t, testObj.Status.Config.NATS.Auth) 180 assert.NotNil(t, testObj.Status.Config.NATS.AccessSecret) 181 }) 182 183 t.Run("test jetstream error", func(t *testing.T) { 184 testObj := testJetStreamEventBus.DeepCopy() 185 testObj.Spec.JetStream = nil 186 err := Install(ctx, testObj, cl, kubeClient, fakeConfig, zaptest.NewLogger(t).Sugar()) 187 assert.Error(t, err) 188 assert.Equal(t, "invalid eventbus spec", err.Error()) 189 }) 190 191 t.Run("test jetstream install ok", func(t *testing.T) { 192 testObj := testJetStreamEventBus.DeepCopy() 193 err := Install(ctx, testObj, cl, kubeClient, fakeConfig, zaptest.NewLogger(t).Sugar()) 194 assert.NoError(t, err) 195 assert.True(t, testObj.Status.IsReady()) 196 assert.NotNil(t, testObj.Status.Config.JetStream) 197 assert.NotEmpty(t, testObj.Status.Config.JetStream.URL) 198 assert.NotNil(t, testObj.Status.Config.JetStream.AccessSecret) 199 }) 200 }