@@ -2,8 +2,12 @@ package configs
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
6
+ "os"
5
7
"testing"
6
8
9
+ "github.com/nginx/kubernetes-ingress/internal/configs/version1"
10
+
7
11
v1 "k8s.io/api/core/v1"
8
12
"k8s.io/client-go/tools/record"
9
13
)
@@ -788,6 +792,189 @@ func TestParseMGMTConfigMapUsageReportEndpoint(t *testing.T) {
788
792
}
789
793
}
790
794
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
+
791
978
func makeEventLogger () record.EventRecorder {
792
979
return record .NewFakeRecorder (1024 )
793
980
}
0 commit comments