Skip to content

Commit 16ed0fd

Browse files
authored
Expand mgmt configmap tests (#7000)
1 parent cf088d4 commit 16ed0fd

File tree

6 files changed

+481
-46
lines changed

6 files changed

+481
-46
lines changed

Diff for: internal/configs/configmaps.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"github.com/nginxinc/kubernetes-ingress/internal/configs/version1"
1414
nl "github.com/nginxinc/kubernetes-ingress/internal/logger"
15+
"github.com/nginxinc/kubernetes-ingress/internal/validation"
1516
)
1617

1718
const (
@@ -714,9 +715,20 @@ func ParseMGMTConfigMap(ctx context.Context, cfgm *v1.ConfigMap, eventLog record
714715
mgmtCfgParams.EnforceInitialReport = BoolToPointerBool(enforceInitialReport)
715716
}
716717
}
718+
717719
if endpoint, exists := cfgm.Data["usage-report-endpoint"]; exists {
718-
mgmtCfgParams.Endpoint = strings.TrimSpace(endpoint)
720+
endpoint := strings.TrimSpace(endpoint)
721+
err := validation.ValidateHost(endpoint)
722+
if err != nil {
723+
errorText := fmt.Sprintf("Configmap %s/%s: Invalid value for the usage-report-endpoint key: got %q: %v. Using default endpoint.", cfgm.GetNamespace(), cfgm.GetName(), endpoint, err)
724+
nl.Error(l, errorText)
725+
eventLog.Event(cfgm, v1.EventTypeWarning, invalidValueReason, errorText)
726+
configWarnings = true
727+
} else {
728+
mgmtCfgParams.Endpoint = strings.TrimSpace(endpoint)
729+
}
719730
}
731+
720732
if interval, exists := cfgm.Data["usage-report-interval"]; exists {
721733
i := strings.TrimSpace(interval)
722734
t, err := time.ParseDuration(i)

Diff for: internal/configs/configmaps_test.go

+338
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,78 @@ func TestParseMGMTConfigMapWarnings(t *testing.T) {
342342
},
343343
msg: "enforce-initial-report set empty",
344344
},
345+
{
346+
configMap: &v1.ConfigMap{
347+
Data: map[string]string{
348+
"license-token-secret-name": "license-token",
349+
"usage-report-interval": "",
350+
},
351+
},
352+
msg: "usage-report-interval set empty",
353+
},
354+
{
355+
configMap: &v1.ConfigMap{
356+
Data: map[string]string{
357+
"license-token-secret-name": "license-token",
358+
"usage-report-interval": "1s",
359+
},
360+
},
361+
msg: "usage-report-interval set below allowed value",
362+
},
363+
{
364+
configMap: &v1.ConfigMap{
365+
Data: map[string]string{
366+
"license-token-secret-name": "license-token",
367+
"usage-report-interval": "1s",
368+
},
369+
},
370+
msg: "usage-report-interval set below allowed value",
371+
},
372+
{
373+
configMap: &v1.ConfigMap{
374+
Data: map[string]string{
375+
"license-token-secret-name": "license-token",
376+
"ssl-verify": "10",
377+
},
378+
},
379+
msg: "ssl-verify set to an invalid int",
380+
},
381+
{
382+
configMap: &v1.ConfigMap{
383+
Data: map[string]string{
384+
"license-token-secret-name": "license-token",
385+
"ssl-verify": "test",
386+
},
387+
},
388+
msg: "ssl-verify set to an invalid value",
389+
},
390+
{
391+
configMap: &v1.ConfigMap{
392+
Data: map[string]string{
393+
"license-token-secret-name": "license-token",
394+
"ssl-verify": "",
395+
},
396+
},
397+
msg: "ssl-verify set to an empty string",
398+
},
399+
{
400+
configMap: &v1.ConfigMap{
401+
Data: map[string]string{
402+
"license-token-secret-name": "license-token",
403+
"resolver-ipv6": "",
404+
},
405+
},
406+
msg: "resolver-ipv6 set to an empty string",
407+
},
408+
{
409+
configMap: &v1.ConfigMap{
410+
Data: map[string]string{
411+
"license-token-secret-name": "license-token",
412+
"resolver-ipv6": "10",
413+
},
414+
},
415+
msg: "resolver-ipv6 set to an invalid int",
416+
},
345417
}
346418

347419
for _, test := range tests {
@@ -450,6 +522,272 @@ func TestParseMGMTConfigMapEnforceInitialReport(t *testing.T) {
450522
}
451523
}
452524

525+
func TestParseMGMTConfigMapSSLVerify(t *testing.T) {
526+
t.Parallel()
527+
tests := []struct {
528+
configMap *v1.ConfigMap
529+
want *MGMTConfigParams
530+
msg string
531+
}{
532+
{
533+
configMap: &v1.ConfigMap{
534+
Data: map[string]string{
535+
"license-token-secret-name": "license-token",
536+
"ssl-verify": "false",
537+
},
538+
},
539+
want: &MGMTConfigParams{
540+
SSLVerify: BoolToPointerBool(false),
541+
Secrets: MGMTSecrets{
542+
License: "license-token",
543+
},
544+
},
545+
msg: "ssl-verify set to false",
546+
},
547+
{
548+
configMap: &v1.ConfigMap{
549+
Data: map[string]string{
550+
"license-token-secret-name": "license-token",
551+
"ssl-verify": "true",
552+
},
553+
},
554+
want: &MGMTConfigParams{
555+
SSLVerify: BoolToPointerBool(true),
556+
Secrets: MGMTSecrets{
557+
License: "license-token",
558+
},
559+
},
560+
msg: "ssl-verify set to true",
561+
},
562+
}
563+
564+
for _, test := range tests {
565+
t.Run(test.msg, func(t *testing.T) {
566+
result, warnings, err := ParseMGMTConfigMap(context.Background(), test.configMap, makeEventLogger())
567+
if err != nil {
568+
t.Fatal(err)
569+
}
570+
if warnings {
571+
t.Error("Unexpected warnings")
572+
}
573+
574+
if result.SSLVerify == nil {
575+
t.Errorf("ssl-verify: want %v, got nil", *test.want.SSLVerify)
576+
}
577+
if *result.SSLVerify != *test.want.SSLVerify {
578+
t.Errorf("ssl-verify: want %v, got %v", *test.want.SSLVerify, *result.SSLVerify)
579+
}
580+
})
581+
}
582+
}
583+
584+
func TestParseMGMTConfigMapUsageReportInterval(t *testing.T) {
585+
t.Parallel()
586+
tests := []struct {
587+
configMap *v1.ConfigMap
588+
want *MGMTConfigParams
589+
msg string
590+
}{
591+
{
592+
configMap: &v1.ConfigMap{
593+
Data: map[string]string{
594+
"license-token-secret-name": "license-token",
595+
"usage-report-interval": "120s",
596+
},
597+
},
598+
want: &MGMTConfigParams{
599+
Interval: "120s",
600+
Secrets: MGMTSecrets{
601+
License: "license-token",
602+
},
603+
},
604+
msg: "usage report interval set to 120s",
605+
},
606+
{
607+
configMap: &v1.ConfigMap{
608+
Data: map[string]string{
609+
"license-token-secret-name": "license-token",
610+
"usage-report-interval": "20m",
611+
},
612+
},
613+
want: &MGMTConfigParams{
614+
Interval: "20m",
615+
Secrets: MGMTSecrets{
616+
License: "license-token",
617+
},
618+
},
619+
msg: "usage report interval set to 20m",
620+
},
621+
{
622+
configMap: &v1.ConfigMap{
623+
Data: map[string]string{
624+
"license-token-secret-name": "license-token",
625+
"usage-report-interval": "1h",
626+
},
627+
},
628+
want: &MGMTConfigParams{
629+
Interval: "1h",
630+
Secrets: MGMTSecrets{
631+
License: "license-token",
632+
},
633+
},
634+
msg: "usage report interval set to 1h",
635+
},
636+
{
637+
configMap: &v1.ConfigMap{
638+
Data: map[string]string{
639+
"license-token-secret-name": "license-token",
640+
"usage-report-interval": "24h",
641+
},
642+
},
643+
want: &MGMTConfigParams{
644+
Interval: "24h",
645+
Secrets: MGMTSecrets{
646+
License: "license-token",
647+
},
648+
},
649+
msg: "usage report interval set to 24h",
650+
},
651+
}
652+
653+
for _, test := range tests {
654+
t.Run(test.msg, func(t *testing.T) {
655+
result, warnings, err := ParseMGMTConfigMap(context.Background(), test.configMap, makeEventLogger())
656+
if err != nil {
657+
t.Fatal(err)
658+
}
659+
if warnings {
660+
t.Error("Unexpected warnings")
661+
}
662+
663+
if result.Interval == "" {
664+
t.Errorf("UsageReportInterval: want %s, got empty string", test.want.Interval)
665+
}
666+
if result.Interval != test.want.Interval {
667+
t.Errorf("UsageReportInterval: want %v, got %v", test.want.Interval, result.Interval)
668+
}
669+
})
670+
}
671+
}
672+
673+
func TestParseMGMTConfigMapResolverIPV6(t *testing.T) {
674+
t.Parallel()
675+
tests := []struct {
676+
configMap *v1.ConfigMap
677+
want *MGMTConfigParams
678+
msg string
679+
}{
680+
{
681+
configMap: &v1.ConfigMap{
682+
Data: map[string]string{
683+
"license-token-secret-name": "license-token",
684+
"resolver-ipv6": "false",
685+
},
686+
},
687+
want: &MGMTConfigParams{
688+
ResolverIPV6: BoolToPointerBool(false),
689+
Secrets: MGMTSecrets{
690+
License: "license-token",
691+
},
692+
},
693+
msg: "resolver-ipv6 set to false",
694+
},
695+
{
696+
configMap: &v1.ConfigMap{
697+
Data: map[string]string{
698+
"license-token-secret-name": "license-token",
699+
"resolver-ipv6": "true",
700+
},
701+
},
702+
want: &MGMTConfigParams{
703+
ResolverIPV6: BoolToPointerBool(true),
704+
Secrets: MGMTSecrets{
705+
License: "license-token",
706+
},
707+
},
708+
msg: "resolver-ipv6 set to true",
709+
},
710+
}
711+
712+
for _, test := range tests {
713+
t.Run(test.msg, func(t *testing.T) {
714+
result, warnings, err := ParseMGMTConfigMap(context.Background(), test.configMap, makeEventLogger())
715+
if err != nil {
716+
t.Fatal(err)
717+
}
718+
if warnings {
719+
t.Error("Unexpected warnings")
720+
}
721+
722+
if result.ResolverIPV6 == nil {
723+
t.Errorf("resolver-ipv6: want %v, got nil", *test.want.ResolverIPV6)
724+
}
725+
if *result.ResolverIPV6 != *test.want.ResolverIPV6 {
726+
t.Errorf("resolver-ipv6: want %v, got %v", *test.want.ResolverIPV6, *result.ResolverIPV6)
727+
}
728+
})
729+
}
730+
}
731+
732+
func TestParseMGMTConfigMapUsageReportEndpoint(t *testing.T) {
733+
t.Parallel()
734+
tests := []struct {
735+
configMap *v1.ConfigMap
736+
want *MGMTConfigParams
737+
msg string
738+
}{
739+
{
740+
configMap: &v1.ConfigMap{
741+
Data: map[string]string{
742+
"license-token-secret-name": "license-token",
743+
"usage-report-endpoint": "product.connect.nginx.com",
744+
},
745+
},
746+
want: &MGMTConfigParams{
747+
Endpoint: "product.connect.nginx.com",
748+
Secrets: MGMTSecrets{
749+
License: "license-token",
750+
},
751+
},
752+
msg: "usage report endpoint set to product.connect.nginx.com",
753+
},
754+
{
755+
configMap: &v1.ConfigMap{
756+
Data: map[string]string{
757+
"license-token-secret-name": "license-token",
758+
"usage-report-endpoint": "product.connect.nginx.com:80",
759+
},
760+
},
761+
want: &MGMTConfigParams{
762+
Endpoint: "product.connect.nginx.com:80",
763+
Secrets: MGMTSecrets{
764+
License: "license-token",
765+
},
766+
},
767+
msg: "usage report endpoint set to product.connect.nginx.com with port 80",
768+
},
769+
}
770+
771+
for _, test := range tests {
772+
t.Run(test.msg, func(t *testing.T) {
773+
result, warnings, err := ParseMGMTConfigMap(context.Background(), test.configMap, makeEventLogger())
774+
if err != nil {
775+
t.Fatal(err)
776+
}
777+
if warnings {
778+
t.Error("Unexpected warnings")
779+
}
780+
781+
if result.Endpoint == "" {
782+
t.Errorf("UsageReportEndpoint: want %s, got empty string", test.want.Endpoint)
783+
}
784+
if result.Endpoint != test.want.Endpoint {
785+
t.Errorf("UsageReportEndpoint: want %v, got %v", test.want.Endpoint, result.Endpoint)
786+
}
787+
})
788+
}
789+
}
790+
453791
func makeEventLogger() record.EventRecorder {
454792
return record.NewFakeRecorder(1024)
455793
}

0 commit comments

Comments
 (0)