@@ -2,8 +2,12 @@ package configs
22
33import (
44 "context"
5+ "fmt"
6+ "os"
57 "testing"
68
9+ "github.com/nginx/kubernetes-ingress/internal/configs/version1"
10+
711 v1 "k8s.io/api/core/v1"
812 "k8s.io/client-go/tools/record"
913)
@@ -788,6 +792,189 @@ func TestParseMGMTConfigMapUsageReportEndpoint(t *testing.T) {
788792 }
789793}
790794
795+ func TestParseZoneSync (t * testing.T ) {
796+ t .Parallel ()
797+ tests := []struct {
798+ configMap * v1.ConfigMap
799+ want * ZoneSync
800+ msg string
801+ }{
802+ {
803+ configMap : & v1.ConfigMap {
804+ Data : map [string ]string {
805+ "zone-sync" : "true" ,
806+ },
807+ },
808+ want : & ZoneSync {
809+ Enable : true ,
810+ },
811+ msg : "zone-sync set to true" ,
812+ },
813+ {
814+ configMap : & v1.ConfigMap {
815+ Data : map [string ]string {
816+ "zone-sync" : "false" ,
817+ },
818+ },
819+ want : & ZoneSync {
820+ Enable : false ,
821+ },
822+ msg : "zone-sync set to false" ,
823+ },
824+ }
825+
826+ for _ , test := range tests {
827+ t .Run (test .msg , func (t * testing.T ) {
828+ result , _ := ParseConfigMap (context .Background (), test .configMap , true , false , false , false , makeEventLogger ())
829+ if result .ZoneSync .Enable != test .want .Enable {
830+ t .Errorf ("Enable: want %v, got %v" , test .want .Enable , result .ZoneSync )
831+ }
832+ })
833+ }
834+ }
835+
836+ func TestParseZoneSyncPort (t * testing.T ) {
837+ t .Parallel ()
838+ tests := []struct {
839+ configMap * v1.ConfigMap
840+ want * ZoneSync
841+ msg string
842+ }{
843+ {
844+ configMap : & v1.ConfigMap {
845+ Data : map [string ]string {
846+ "zone-sync" : "true" ,
847+ "zone-sync-port" : "1234" ,
848+ },
849+ },
850+ want : & ZoneSync {
851+ Enable : true ,
852+ Port : 1234 ,
853+ },
854+ msg : "zone-sync-port set to 1234" ,
855+ },
856+ }
857+
858+ nginxPlus := true
859+ hasAppProtect := true
860+ hasAppProtectDos := false
861+ hasTLSPassthrough := false
862+
863+ for _ , test := range tests {
864+ t .Run (test .msg , func (t * testing.T ) {
865+ result , _ := ParseConfigMap (context .Background (), test .configMap , nginxPlus , hasAppProtect , hasAppProtectDos , hasTLSPassthrough , makeEventLogger ())
866+ if result .ZoneSync .Port != test .want .Port {
867+ t .Errorf ("Port: want %v, got %v" , test .want .Port , result .ZoneSync .Port )
868+ }
869+ })
870+ }
871+ }
872+
873+ func TestParseZoneSyncPortErrors (t * testing.T ) {
874+ t .Parallel ()
875+ tests := []struct {
876+ configMap * v1.ConfigMap
877+ configOk bool
878+ msg string
879+ }{
880+ {
881+ configMap : & v1.ConfigMap {
882+ Data : map [string ]string {
883+ "zone-sync-port" : "0" ,
884+ },
885+ },
886+ configOk : false ,
887+ msg : "port out of range (0)" ,
888+ },
889+ {
890+ configMap : & v1.ConfigMap {
891+ Data : map [string ]string {
892+ "zone-sync-port" : "-1" ,
893+ },
894+ },
895+ configOk : false ,
896+ msg : "port out of range (negative)" ,
897+ },
898+ {
899+ configMap : & v1.ConfigMap {
900+ Data : map [string ]string {
901+ "zone-sync-port" : "65536" ,
902+ },
903+ },
904+ configOk : false ,
905+ msg : "port out of range (greater than 65535)" ,
906+ },
907+ {
908+ configMap : & v1.ConfigMap {
909+ Data : map [string ]string {
910+ "zone-sync-port" : "not-a-number" ,
911+ },
912+ },
913+ configOk : false ,
914+ msg : "invalid non-numeric port" ,
915+ },
916+ {
917+ configMap : & v1.ConfigMap {
918+ Data : map [string ]string {
919+ "zone-sync-port" : "" ,
920+ },
921+ },
922+ configOk : false ,
923+ msg : "missing port value" ,
924+ },
925+ }
926+
927+ nginxPlus := true
928+ hasAppProtect := true
929+ hasAppProtectDos := false
930+ hasTLSPassthrough := false
931+
932+ for _ , test := range tests {
933+ t .Run (test .msg , func (t * testing.T ) {
934+ _ , err := ParseConfigMap (context .Background (), test .configMap , nginxPlus , hasAppProtect , hasAppProtectDos , hasTLSPassthrough , makeEventLogger ())
935+ if err == ! test .configOk {
936+ t .Error ("Expected error, got nil" )
937+ }
938+ })
939+ }
940+ }
941+
942+ func TestZoneSyncDomainMultipleNamespaces (t * testing.T ) {
943+ testCases := []struct {
944+ name string
945+ namespace string
946+ want string
947+ }{
948+ {
949+ name : "nginx-ingress" ,
950+ namespace : "nginx-ingress" ,
951+ want : "nginx-ingress-headless.nginx-ingress.svc.cluster.local" ,
952+ },
953+ {
954+ name : "my-release-nginx-ingress" ,
955+ namespace : "my-release-nginx-ingress" ,
956+ want : "my-release-nginx-ingress-headless.my-release-nginx-ingress.svc.cluster.local" ,
957+ },
958+ }
959+
960+ for _ , tc := range testCases {
961+ t .Run (tc .name , func (t * testing.T ) {
962+ _ = os .Setenv ("POD_NAMESPACE" , tc .namespace )
963+
964+ zoneSyncConfig := version1.ZoneSyncConfig {
965+ Enable : true ,
966+ Domain : fmt .Sprintf ("%s-headless.%s.svc.cluster.local" ,
967+ os .Getenv ("POD_NAMESPACE" ),
968+ os .Getenv ("POD_NAMESPACE" )),
969+ }
970+
971+ if zoneSyncConfig .Domain != tc .want {
972+ t .Errorf ("want %q, got %q" , tc .want , zoneSyncConfig .Domain )
973+ }
974+ })
975+ }
976+ }
977+
791978func makeEventLogger () record.EventRecorder {
792979 return record .NewFakeRecorder (1024 )
793980}
0 commit comments