@@ -284,3 +284,229 @@ func TestDesiredIngresses(t *testing.T) {
284
284
}, got )
285
285
})
286
286
}
287
+
288
+ func TestExtensionIngress (t * testing.T ) {
289
+ t .Run ("no ingress for incorrect ingress type" , func (t * testing.T ) {
290
+ params := manifests.Params {
291
+ Config : config.Config {},
292
+ Log : logger ,
293
+ OtelCol : v1beta1.OpenTelemetryCollector {
294
+ ObjectMeta : metav1.ObjectMeta {
295
+ Name : "test" ,
296
+ },
297
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
298
+ ExtensionIngress : v1beta1.Ingress {
299
+ Type : v1beta1 .IngressType ("unknown" ),
300
+ },
301
+ },
302
+ },
303
+ }
304
+ actual , err := ExtensionIngress (params )
305
+ assert .Nil (t , actual )
306
+ assert .NoError (t , err )
307
+ })
308
+ t .Run ("no ingress if there's no port for extension" , func (t * testing.T ) {
309
+ params := manifests.Params {
310
+ Config : config.Config {},
311
+ Log : logger ,
312
+ OtelCol : v1beta1.OpenTelemetryCollector {
313
+ ObjectMeta : metav1.ObjectMeta {
314
+ Name : "test" ,
315
+ },
316
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
317
+ Config : v1beta1.Config {
318
+ Service : v1beta1.Service {
319
+ Extensions : []string {"jaeger_query" },
320
+ },
321
+ Extensions : & v1beta1.AnyConfig {
322
+ Object : map [string ]interface {}{},
323
+ },
324
+ },
325
+ ExtensionIngress : v1beta1.Ingress {
326
+ Type : v1beta1 .IngressType ("ingress" ),
327
+ },
328
+ },
329
+ },
330
+ }
331
+
332
+ actual , err := ExtensionIngress (params )
333
+ assert .Nil (t , actual )
334
+ assert .NoError (t , err )
335
+ })
336
+ t .Run ("ingress for extensions for rule type path" , func (t * testing.T ) {
337
+ var (
338
+ ns = "test-ns"
339
+ hostname = "example.com"
340
+ ingressClassName = "nginx"
341
+ pathType = networkingv1 .PathTypePrefix
342
+ )
343
+
344
+ params := manifests.Params {
345
+ Config : config.Config {},
346
+ Log : logger ,
347
+ OtelCol : v1beta1.OpenTelemetryCollector {
348
+ ObjectMeta : metav1.ObjectMeta {
349
+ Name : "test" ,
350
+ Namespace : ns ,
351
+ },
352
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
353
+ Config : v1beta1.Config {
354
+ Service : v1beta1.Service {
355
+ Extensions : []string {"jaeger_query" },
356
+ },
357
+ Extensions : & v1beta1.AnyConfig {
358
+ Object : map [string ]interface {}{
359
+ "jaeger_query" : map [string ]interface {}{
360
+ "http" : map [string ]interface {}{
361
+ "endpoint" : "0.0.0.0:16686" ,
362
+ },
363
+ },
364
+ },
365
+ },
366
+ },
367
+ ExtensionIngress : v1beta1.Ingress {
368
+ Type : v1beta1 .IngressType ("ingress" ),
369
+ IngressClassName : & ingressClassName ,
370
+ Hostname : hostname ,
371
+ Annotations : map [string ]string {"some.key" : "some.value" },
372
+ RuleType : v1beta1 .IngressRuleTypePath ,
373
+ },
374
+ },
375
+ },
376
+ }
377
+
378
+ actual , err := ExtensionIngress (params )
379
+ assert .NoError (t , err )
380
+ assert .NotNil (t , actual )
381
+ assert .NotEqual (t , networkingv1.Ingress {
382
+ ObjectMeta : metav1.ObjectMeta {
383
+ Name : naming .ExtensionIngress (params .OtelCol .Name ),
384
+ Namespace : ns ,
385
+ Annotations : params .OtelCol .Spec .ExtensionIngress .Annotations ,
386
+ Labels : map [string ]string {
387
+ "app.kubernetes.io/name" : naming .ExtensionIngress (params .OtelCol .Name ),
388
+ "app.kubernetes.io/instance" : fmt .Sprintf ("%s.%s" , params .OtelCol .Namespace , params .OtelCol .Name ),
389
+ "app.kubernetes.io/managed-by" : "opentelemetry-operator" ,
390
+ "app.kubernetes.io/component" : "opentelemetry-collector" ,
391
+ "app.kubernetes.io/part-of" : "opentelemetry" ,
392
+ "app.kubernetes.io/version" : "latest" ,
393
+ },
394
+ },
395
+ Spec : networkingv1.IngressSpec {
396
+ IngressClassName : & ingressClassName ,
397
+ Rules : []networkingv1.IngressRule {
398
+ {
399
+ Host : hostname ,
400
+ IngressRuleValue : networkingv1.IngressRuleValue {
401
+ HTTP : & networkingv1.HTTPIngressRuleValue {
402
+ Paths : []networkingv1.HTTPIngressPath {
403
+ {
404
+ Path : "/jaeger-query" ,
405
+ PathType : & pathType ,
406
+ Backend : networkingv1.IngressBackend {
407
+ Service : & networkingv1.IngressServiceBackend {
408
+ Name : naming .ExtensionService (params .OtelCol .Name ),
409
+ Port : networkingv1.ServiceBackendPort {
410
+ Name : "jaeger-query" ,
411
+ Number : 16686 ,
412
+ },
413
+ },
414
+ },
415
+ },
416
+ },
417
+ },
418
+ },
419
+ },
420
+ },
421
+ },
422
+ }, actual )
423
+ })
424
+ t .Run ("ingress for extensions for rule type subdomain" , func (t * testing.T ) {
425
+ var (
426
+ ns = "test-ns"
427
+ hostname = "example.com"
428
+ ingressClassName = "nginx"
429
+ pathType = networkingv1 .PathTypePrefix
430
+ )
431
+
432
+ params := manifests.Params {
433
+ Config : config.Config {},
434
+ Log : logger ,
435
+ OtelCol : v1beta1.OpenTelemetryCollector {
436
+ ObjectMeta : metav1.ObjectMeta {
437
+ Name : "test" ,
438
+ Namespace : ns ,
439
+ },
440
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
441
+ Config : v1beta1.Config {
442
+ Service : v1beta1.Service {
443
+ Extensions : []string {"jaeger_query" },
444
+ },
445
+ Extensions : & v1beta1.AnyConfig {
446
+ Object : map [string ]interface {}{
447
+ "jaeger_query" : map [string ]interface {}{
448
+ "http" : map [string ]interface {}{
449
+ "endpoint" : "0.0.0.0:16686" ,
450
+ },
451
+ },
452
+ },
453
+ },
454
+ },
455
+ ExtensionIngress : v1beta1.Ingress {
456
+ Type : v1beta1 .IngressType ("ingress" ),
457
+ IngressClassName : & ingressClassName ,
458
+ Hostname : hostname ,
459
+ Annotations : map [string ]string {"some.key" : "some.value" },
460
+ RuleType : v1beta1 .IngressRuleTypeSubdomain ,
461
+ },
462
+ },
463
+ },
464
+ }
465
+
466
+ actual , err := ExtensionIngress (params )
467
+ assert .NoError (t , err )
468
+ assert .NotNil (t , actual )
469
+ assert .NotEqual (t , networkingv1.Ingress {
470
+ ObjectMeta : metav1.ObjectMeta {
471
+ Name : naming .ExtensionIngress (params .OtelCol .Name ),
472
+ Namespace : ns ,
473
+ Annotations : params .OtelCol .Spec .ExtensionIngress .Annotations ,
474
+ Labels : map [string ]string {
475
+ "app.kubernetes.io/name" : naming .ExtensionIngress (params .OtelCol .Name ),
476
+ "app.kubernetes.io/instance" : fmt .Sprintf ("%s.%s" , params .OtelCol .Namespace , params .OtelCol .Name ),
477
+ "app.kubernetes.io/managed-by" : "opentelemetry-operator" ,
478
+ "app.kubernetes.io/component" : "opentelemetry-collector" ,
479
+ "app.kubernetes.io/part-of" : "opentelemetry" ,
480
+ "app.kubernetes.io/version" : "latest" ,
481
+ },
482
+ },
483
+ Spec : networkingv1.IngressSpec {
484
+ IngressClassName : & ingressClassName ,
485
+ Rules : []networkingv1.IngressRule {
486
+ {
487
+ Host : "jaeger-query." + hostname ,
488
+ IngressRuleValue : networkingv1.IngressRuleValue {
489
+ HTTP : & networkingv1.HTTPIngressRuleValue {
490
+ Paths : []networkingv1.HTTPIngressPath {
491
+ {
492
+ Path : "/" ,
493
+ PathType : & pathType ,
494
+ Backend : networkingv1.IngressBackend {
495
+ Service : & networkingv1.IngressServiceBackend {
496
+ Name : naming .ExtensionService (params .OtelCol .Name ),
497
+ Port : networkingv1.ServiceBackendPort {
498
+ Name : "jaeger-query" ,
499
+ Number : 16686 ,
500
+ },
501
+ },
502
+ },
503
+ },
504
+ },
505
+ },
506
+ },
507
+ },
508
+ },
509
+ },
510
+ }, actual )
511
+ })
512
+ }
0 commit comments