@@ -26,6 +26,7 @@ import (
26
26
"github.com/open-telemetry/opentelemetry-operator/internal/config"
27
27
"github.com/open-telemetry/opentelemetry-operator/internal/manifests"
28
28
"github.com/open-telemetry/opentelemetry-operator/internal/manifests/manifestutils"
29
+ "github.com/open-telemetry/opentelemetry-operator/internal/naming"
29
30
)
30
31
31
32
func TestExtractPortNumbersAndNames (t * testing.T ) {
@@ -321,6 +322,206 @@ func TestMonitoringService(t *testing.T) {
321
322
})
322
323
}
323
324
325
+ func TestExtensionService (t * testing.T ) {
326
+ testCases := []struct {
327
+ name string
328
+ params manifests.Params
329
+ expectedPorts []v1.ServicePort
330
+ }{
331
+ {
332
+ name : "when the extension has http endpoint" ,
333
+ params : manifests.Params {
334
+ Config : config.Config {},
335
+ Log : logger ,
336
+ OtelCol : v1beta1.OpenTelemetryCollector {
337
+ ObjectMeta : metav1.ObjectMeta {
338
+ Name : "test" ,
339
+ },
340
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
341
+ Config : v1beta1.Config {
342
+ Service : v1beta1.Service {
343
+ Extensions : []string {"jaeger_query" },
344
+ },
345
+ Extensions : & v1beta1.AnyConfig {
346
+ Object : map [string ]interface {}{
347
+ "jaeger_query" : map [string ]interface {}{
348
+ "http" : map [string ]interface {}{
349
+ "endpoint" : "0.0.0.0:16686" ,
350
+ },
351
+ },
352
+ },
353
+ },
354
+ },
355
+ },
356
+ },
357
+ },
358
+ expectedPorts : []v1.ServicePort {
359
+ {
360
+ Name : "jaeger-query" ,
361
+ Port : 16686 ,
362
+ TargetPort : intstr.IntOrString {
363
+ IntVal : 16686 ,
364
+ },
365
+ },
366
+ },
367
+ },
368
+ {
369
+ name : "when the extension has grpc endpoint" ,
370
+ params : manifests.Params {
371
+ Config : config.Config {},
372
+ Log : logger ,
373
+ OtelCol : v1beta1.OpenTelemetryCollector {
374
+ ObjectMeta : metav1.ObjectMeta {
375
+ Name : "test" ,
376
+ },
377
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
378
+ Config : v1beta1.Config {
379
+ Service : v1beta1.Service {
380
+ Extensions : []string {"jaeger_query" },
381
+ },
382
+ Extensions : & v1beta1.AnyConfig {
383
+ Object : map [string ]interface {}{
384
+ "jaeger_query" : map [string ]interface {}{
385
+ "http" : map [string ]interface {}{
386
+ "endpoint" : "0.0.0.0:16686" ,
387
+ },
388
+ },
389
+ },
390
+ },
391
+ },
392
+ },
393
+ },
394
+ },
395
+ expectedPorts : []v1.ServicePort {
396
+ {
397
+ Name : "jaeger-query" ,
398
+ Port : 16686 ,
399
+ TargetPort : intstr.IntOrString {
400
+ IntVal : 16686 ,
401
+ },
402
+ },
403
+ },
404
+ },
405
+ {
406
+ name : "when the extension has both http and grpc endpoint" ,
407
+ params : manifests.Params {
408
+ Config : config.Config {},
409
+ Log : logger ,
410
+ OtelCol : v1beta1.OpenTelemetryCollector {
411
+ ObjectMeta : metav1.ObjectMeta {
412
+ Name : "test" ,
413
+ },
414
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
415
+ Config : v1beta1.Config {
416
+ Service : v1beta1.Service {
417
+ Extensions : []string {"jaeger_query" },
418
+ },
419
+ Extensions : & v1beta1.AnyConfig {
420
+ Object : map [string ]interface {}{
421
+ "jaeger_query" : map [string ]interface {}{
422
+ "http" : map [string ]interface {}{
423
+ "endpoint" : "0.0.0.0:16686" ,
424
+ },
425
+ "grpc" : map [string ]interface {}{
426
+ "endpoint" : "0.0.0.0:16686" ,
427
+ },
428
+ },
429
+ },
430
+ },
431
+ },
432
+ },
433
+ },
434
+ },
435
+ expectedPorts : []v1.ServicePort {
436
+ {
437
+ Name : "jaeger-query" ,
438
+ Port : 16686 ,
439
+ TargetPort : intstr.IntOrString {
440
+ IntVal : 16686 ,
441
+ },
442
+ },
443
+ },
444
+ },
445
+ {
446
+ name : "when the extension has no extensions defined" ,
447
+ params : manifests.Params {
448
+ Config : config.Config {},
449
+ Log : logger ,
450
+ OtelCol : v1beta1.OpenTelemetryCollector {
451
+ ObjectMeta : metav1.ObjectMeta {
452
+ Name : "test" ,
453
+ },
454
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
455
+ Config : v1beta1.Config {
456
+ Service : v1beta1.Service {
457
+ Extensions : []string {"jaeger_query" },
458
+ },
459
+ Extensions : & v1beta1.AnyConfig {
460
+ Object : map [string ]interface {}{},
461
+ },
462
+ },
463
+ },
464
+ },
465
+ },
466
+ expectedPorts : []v1.ServicePort {},
467
+ },
468
+ {
469
+ name : "when the extension has no endpoint defined" ,
470
+ params : manifests.Params {
471
+ Config : config.Config {},
472
+ Log : logger ,
473
+ OtelCol : v1beta1.OpenTelemetryCollector {
474
+ ObjectMeta : metav1.ObjectMeta {
475
+ Name : "test" ,
476
+ },
477
+ Spec : v1beta1.OpenTelemetryCollectorSpec {
478
+ Config : v1beta1.Config {
479
+ Service : v1beta1.Service {
480
+ Extensions : []string {"jaeger_query" },
481
+ },
482
+ Extensions : & v1beta1.AnyConfig {
483
+ Object : map [string ]interface {}{
484
+ "jaeger_query" : map [string ]interface {}{},
485
+ },
486
+ },
487
+ },
488
+ },
489
+ },
490
+ },
491
+ expectedPorts : []v1.ServicePort {
492
+ {
493
+ Name : "jaeger-query" ,
494
+ Port : 16686 ,
495
+ TargetPort : intstr.IntOrString {
496
+ IntVal : 16686 ,
497
+ },
498
+ },
499
+ },
500
+ },
501
+ }
502
+
503
+ for _ , tc := range testCases {
504
+ tc := tc
505
+ t .Run (tc .name , func (t * testing.T ) {
506
+ actual , err := ExtensionService (tc .params )
507
+ assert .NoError (t , err )
508
+
509
+ if len (tc .expectedPorts ) > 0 {
510
+ assert .NotNil (t , actual )
511
+ assert .Equal (t , actual .Name , naming .ExtensionService (tc .params .OtelCol .Name ))
512
+ // ports assertion
513
+ assert .Equal (t , len (tc .expectedPorts ), len (actual .Spec .Ports ))
514
+ assert .Equal (t , tc .expectedPorts [0 ].Name , actual .Spec .Ports [0 ].Name )
515
+ assert .Equal (t , tc .expectedPorts [0 ].Port , actual .Spec .Ports [0 ].Port )
516
+ assert .Equal (t , tc .expectedPorts [0 ].TargetPort .IntVal , actual .Spec .Ports [0 ].TargetPort .IntVal )
517
+ } else {
518
+ // no ports, no service
519
+ assert .Nil (t , actual )
520
+ }
521
+ })
522
+ }
523
+ }
524
+
324
525
func service (name string , ports []v1beta1.PortsSpec ) v1.Service {
325
526
return serviceWithInternalTrafficPolicy (name , ports , v1 .ServiceInternalTrafficPolicyCluster )
326
527
}
0 commit comments