@@ -8,7 +8,9 @@ package validation
88import (
99 "testing"
1010
11+ "github.com/stretchr/testify/assert"
1112 "github.com/stretchr/testify/require"
13+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1214 v1 "sigs.k8s.io/gateway-api/apis/v1"
1315
1416 "github.com/envoyproxy/gateway/api/v1alpha1"
@@ -469,3 +471,230 @@ func TestValidateEnvoyGateway(t *testing.T) {
469471 })
470472 }
471473}
474+
475+ func TestEnvoyGateway (t * testing.T ) {
476+ envoyGateway := v1alpha1 .DefaultEnvoyGateway ()
477+ assert .True (t , envoyGateway .Provider != nil )
478+ assert .True (t , envoyGateway .Gateway != nil )
479+ assert .True (t , envoyGateway .Logging != nil )
480+ envoyGateway .SetEnvoyGatewayDefaults ()
481+ assert .Equal (t , envoyGateway .Logging , v1alpha1 .DefaultEnvoyGatewayLogging ())
482+
483+ logging := v1alpha1 .DefaultEnvoyGatewayLogging ()
484+ assert .True (t , logging != nil )
485+ assert .True (t , logging .Level [v1alpha1 .LogComponentGatewayDefault ] == v1alpha1 .LogLevelInfo )
486+
487+ gatewayLogging := & v1alpha1.EnvoyGatewayLogging {
488+ Level : logging .Level ,
489+ }
490+ gatewayLogging .SetEnvoyGatewayLoggingDefaults ()
491+ assert .True (t , gatewayLogging != nil )
492+ assert .True (t , gatewayLogging .Level [v1alpha1 .LogComponentGatewayDefault ] == v1alpha1 .LogLevelInfo )
493+ }
494+
495+ func TestDefaultEnvoyGatewayLoggingLevel (t * testing.T ) {
496+ type args struct {
497+ component string
498+ level v1alpha1.LogLevel
499+ }
500+ tests := []struct {
501+ name string
502+ args args
503+ want v1alpha1.LogLevel
504+ }{
505+ {
506+ name : "test default info level for empty level" ,
507+ args : args {component : "" , level : "" },
508+ want : v1alpha1 .LogLevelInfo ,
509+ },
510+ {
511+ name : "test default info level for empty level" ,
512+ args : args {component : string (v1alpha1 .LogComponentGatewayDefault ), level : "" },
513+ want : v1alpha1 .LogLevelInfo ,
514+ },
515+ {
516+ name : "test default info level for info level" ,
517+ args : args {component : string (v1alpha1 .LogComponentGatewayDefault ), level : v1alpha1 .LogLevelInfo },
518+ want : v1alpha1 .LogLevelInfo ,
519+ },
520+ {
521+ name : "test default error level for error level" ,
522+ args : args {component : string (v1alpha1 .LogComponentGatewayDefault ), level : v1alpha1 .LogLevelError },
523+ want : v1alpha1 .LogLevelError ,
524+ },
525+ {
526+ name : "test gateway-api error level for error level" ,
527+ args : args {component : string (v1alpha1 .LogComponentGatewayAPIRunner ), level : v1alpha1 .LogLevelError },
528+ want : v1alpha1 .LogLevelError ,
529+ },
530+ {
531+ name : "test gateway-api info level for info level" ,
532+ args : args {component : string (v1alpha1 .LogComponentGatewayAPIRunner ), level : v1alpha1 .LogLevelInfo },
533+ want : v1alpha1 .LogLevelInfo ,
534+ },
535+ {
536+ name : "test default gateway-api warn level for info level" ,
537+ args : args {component : string (v1alpha1 .LogComponentGatewayAPIRunner ), level : "" },
538+ want : v1alpha1 .LogLevelInfo ,
539+ },
540+ }
541+ for _ , tt := range tests {
542+ t .Run (tt .name , func (t * testing.T ) {
543+ logging := & v1alpha1.EnvoyGatewayLogging {}
544+ if got := logging .DefaultEnvoyGatewayLoggingLevel (tt .args .level ); got != tt .want {
545+ t .Errorf ("defaultLevel() = %v, want %v" , got , tt .want )
546+ }
547+ })
548+ }
549+ }
550+
551+ func TestEnvoyGatewayProvider (t * testing.T ) {
552+ envoyGateway := & v1alpha1.EnvoyGateway {
553+ TypeMeta : metav1.TypeMeta {},
554+ EnvoyGatewaySpec : v1alpha1.EnvoyGatewaySpec {Provider : v1alpha1 .DefaultEnvoyGatewayProvider ()},
555+ }
556+ assert .True (t , envoyGateway .Provider != nil )
557+
558+ envoyGatewayProvider := envoyGateway .GetEnvoyGatewayProvider ()
559+ assert .True (t , envoyGatewayProvider .Kubernetes == nil )
560+ assert .Equal (t , envoyGateway .Provider , envoyGatewayProvider )
561+
562+ envoyGatewayProvider .Kubernetes = v1alpha1 .DefaultEnvoyGatewayKubeProvider ()
563+ assert .Equal (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment , v1alpha1 .DefaultKubernetesDeployment (v1alpha1 .DefaultRateLimitImage ))
564+
565+ envoyGatewayProvider .Kubernetes = & v1alpha1.EnvoyGatewayKubernetesProvider {}
566+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment == nil )
567+
568+ envoyGatewayProvider .Kubernetes = & v1alpha1.EnvoyGatewayKubernetesProvider {
569+ RateLimitDeployment : & v1alpha1.KubernetesDeploymentSpec {
570+ Replicas : nil ,
571+ Pod : nil ,
572+ Container : nil ,
573+ }}
574+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Replicas == nil )
575+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Pod == nil )
576+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Container == nil )
577+ envoyGatewayKubeProvider := envoyGatewayProvider .GetEnvoyGatewayKubeProvider ()
578+
579+ envoyGatewayProvider .Kubernetes = & v1alpha1.EnvoyGatewayKubernetesProvider {
580+ RateLimitDeployment : & v1alpha1.KubernetesDeploymentSpec {
581+ Replicas : nil ,
582+ Pod : nil ,
583+ Container : & v1alpha1.KubernetesContainerSpec {
584+ Resources : nil ,
585+ SecurityContext : nil ,
586+ Image : nil ,
587+ },
588+ }}
589+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Container .Resources == nil )
590+ envoyGatewayProvider .GetEnvoyGatewayKubeProvider ()
591+
592+ assert .True (t , envoyGatewayProvider .Kubernetes != nil )
593+ assert .Equal (t , envoyGatewayProvider .Kubernetes , envoyGatewayKubeProvider )
594+
595+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment != nil )
596+ assert .Equal (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment , v1alpha1 .DefaultKubernetesDeployment (v1alpha1 .DefaultRateLimitImage ))
597+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Replicas != nil )
598+ assert .Equal (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Replicas , v1alpha1 .DefaultKubernetesDeploymentReplicas ())
599+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Pod != nil )
600+ assert .Equal (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Pod , v1alpha1 .DefaultKubernetesPod ())
601+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Container != nil )
602+ assert .Equal (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Container , v1alpha1 .DefaultKubernetesContainer (v1alpha1 .DefaultRateLimitImage ))
603+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Container .Resources != nil )
604+ assert .Equal (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Container .Resources , v1alpha1 .DefaultResourceRequirements ())
605+ assert .True (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Container .Image != nil )
606+ assert .Equal (t , envoyGatewayProvider .Kubernetes .RateLimitDeployment .Container .Image , v1alpha1 .DefaultKubernetesContainerImage (v1alpha1 .DefaultRateLimitImage ))
607+ }
608+
609+ func TestEnvoyGatewayAdmin (t * testing.T ) {
610+ // default envoygateway config admin should not be nil
611+ eg := v1alpha1 .DefaultEnvoyGateway ()
612+ assert .True (t , eg .Admin != nil )
613+
614+ // get default admin config from envoygateway
615+ // values should be set in default
616+ egAdmin := eg .GetEnvoyGatewayAdmin ()
617+ assert .True (t , egAdmin != nil )
618+ assert .True (t , egAdmin .Address .Port == v1alpha1 .GatewayAdminPort )
619+ assert .True (t , egAdmin .Address .Host == v1alpha1 .GatewayAdminHost )
620+ assert .True (t , egAdmin .EnableDumpConfig == false )
621+ assert .True (t , egAdmin .EnablePprof == false )
622+
623+ // override the admin config
624+ // values should be updated
625+ eg .Admin = & v1alpha1.EnvoyGatewayAdmin {
626+ Address : & v1alpha1.EnvoyGatewayAdminAddress {
627+ Host : "0.0.0.0" ,
628+ Port : 19010 ,
629+ },
630+ EnableDumpConfig : true ,
631+ EnablePprof : true ,
632+ }
633+
634+ assert .True (t , eg .GetEnvoyGatewayAdmin ().Address .Port == 19010 )
635+ assert .True (t , eg .GetEnvoyGatewayAdmin ().Address .Host == "0.0.0.0" )
636+ assert .True (t , eg .GetEnvoyGatewayAdmin ().EnableDumpConfig == true )
637+ assert .True (t , eg .GetEnvoyGatewayAdmin ().EnablePprof == true )
638+
639+ // set eg defaults when admin is nil
640+ // the admin should not be nil
641+ eg .Admin = nil
642+ eg .SetEnvoyGatewayDefaults ()
643+ assert .True (t , eg .Admin != nil )
644+ assert .True (t , eg .Admin .Address .Port == v1alpha1 .GatewayAdminPort )
645+ assert .True (t , eg .Admin .Address .Host == v1alpha1 .GatewayAdminHost )
646+ assert .True (t , eg .Admin .EnableDumpConfig == false )
647+ assert .True (t , eg .Admin .EnablePprof == false )
648+ }
649+
650+ func TestEnvoyGatewayTelemetry (t * testing.T ) {
651+ // default envoygateway config telemetry should not be nil
652+ eg := v1alpha1 .DefaultEnvoyGateway ()
653+ assert .True (t , eg .Telemetry != nil )
654+
655+ // get default telemetry config from envoygateway
656+ // values should be set in default
657+ egTelemetry := eg .GetEnvoyGatewayTelemetry ()
658+ assert .True (t , egTelemetry != nil )
659+ assert .True (t , egTelemetry .Metrics != nil )
660+ assert .True (t , egTelemetry .Metrics .Prometheus .Disable == false )
661+ assert .True (t , egTelemetry .Metrics .Sinks == nil )
662+
663+ // override the telemetry config
664+ // values should be updated
665+ eg .Telemetry .Metrics = & v1alpha1.EnvoyGatewayMetrics {
666+ Prometheus : & v1alpha1.EnvoyGatewayPrometheusProvider {
667+ Disable : true ,
668+ },
669+ Sinks : []v1alpha1.EnvoyGatewayMetricSink {
670+ {
671+ Type : v1alpha1 .MetricSinkTypeOpenTelemetry ,
672+ OpenTelemetry : & v1alpha1.EnvoyGatewayOpenTelemetrySink {
673+ Host : "otel-collector.monitoring.svc.cluster.local" ,
674+ Protocol : "grpc" ,
675+ Port : 4317 ,
676+ },
677+ }, {
678+ Type : v1alpha1 .MetricSinkTypeOpenTelemetry ,
679+ OpenTelemetry : & v1alpha1.EnvoyGatewayOpenTelemetrySink {
680+ Host : "otel-collector.monitoring.svc.cluster.local" ,
681+ Protocol : "http" ,
682+ Port : 4318 ,
683+ },
684+ },
685+ },
686+ }
687+
688+ assert .True (t , eg .GetEnvoyGatewayTelemetry ().Metrics .Prometheus .Disable == true )
689+ assert .True (t , len (eg .GetEnvoyGatewayTelemetry ().Metrics .Sinks ) == 2 )
690+ assert .True (t , eg .GetEnvoyGatewayTelemetry ().Metrics .Sinks [0 ].Type == v1alpha1 .MetricSinkTypeOpenTelemetry )
691+
692+ // set eg defaults when telemetry is nil
693+ // the telemetry should not be nil
694+ eg .Telemetry = nil
695+ eg .SetEnvoyGatewayDefaults ()
696+ assert .True (t , eg .Telemetry != nil )
697+ assert .True (t , eg .Telemetry .Metrics != nil )
698+ assert .True (t , eg .Telemetry .Metrics .Prometheus .Disable == false )
699+ assert .True (t , eg .Telemetry .Metrics .Sinks == nil )
700+ }
0 commit comments