@@ -663,6 +663,253 @@ func TestGenerateNginxCfgForMergeableIngressesForBasicAuth(t *testing.T) {
663
663
}
664
664
}
665
665
666
+ func TestGenerateNginxCfgForMergeableIngressesWithUseClusterIP (t * testing.T ) {
667
+ t .Parallel ()
668
+ mergeableIngresses := createMergeableCafeIngress ()
669
+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/use-cluster-ip" ] = "true"
670
+
671
+ isPlus := false
672
+
673
+ expected := createExpectedConfigForMergeableCafeIngressWithUseClusterIP ()
674
+ configParams := NewDefaultConfigParams (isPlus )
675
+
676
+ result , warnings := generateNginxCfgForMergeableIngresses (NginxCfgParams {
677
+ mergeableIngs : mergeableIngresses ,
678
+ apResources : nil ,
679
+ dosResource : nil ,
680
+ baseCfgParams : configParams ,
681
+ isPlus : isPlus ,
682
+ isResolverConfigured : false ,
683
+ staticParams : & StaticConfigParams {},
684
+ isWildcardEnabled : false ,
685
+ })
686
+
687
+ if diff := cmp .Diff (expected , result ); diff != "" {
688
+ t .Errorf ("generateNginxCfgForMergeableIngresses() returned unexpected result (-want +got):\n %s" , diff )
689
+ }
690
+ if len (warnings ) != 0 {
691
+ t .Errorf ("generateNginxCfgForMergeableIngresses() returned warnings: %v" , warnings )
692
+ }
693
+ }
694
+
695
+ func createExpectedConfigForMergeableCafeIngressWithUseClusterIP () version1.IngressNginxConfig {
696
+ upstreamZoneSize := "256k"
697
+ coffeeUpstream := version1.Upstream {
698
+ Name : "default-cafe-ingress-coffee-minion-cafe.example.com-coffee-svc-80" ,
699
+ LBMethod : "random two least_conn" ,
700
+ UpstreamZoneSize : upstreamZoneSize ,
701
+ UpstreamServers : []version1.UpstreamServer {
702
+ {
703
+ Address : "coffee-svc:80" ,
704
+ MaxFails : 1 ,
705
+ MaxConns : 0 ,
706
+ FailTimeout : "10s" ,
707
+ },
708
+ },
709
+ }
710
+ teaUpstream := version1.Upstream {
711
+ Name : "default-cafe-ingress-tea-minion-cafe.example.com-tea-svc-80" ,
712
+ LBMethod : "random two least_conn" ,
713
+ UpstreamZoneSize : upstreamZoneSize ,
714
+ UpstreamServers : []version1.UpstreamServer {
715
+ {
716
+ Address : "10.0.0.2:80" ,
717
+ MaxFails : 1 ,
718
+ MaxConns : 0 ,
719
+ FailTimeout : "10s" ,
720
+ },
721
+ },
722
+ }
723
+ expected := version1.IngressNginxConfig {
724
+ Upstreams : []version1.Upstream {
725
+ coffeeUpstream ,
726
+ teaUpstream ,
727
+ },
728
+ Servers : []version1.S
EF2F
erver {
729
+ {
730
+ Name : "cafe.example.com" ,
731
+ ServerTokens : "on" ,
732
+ Locations : []version1.Location {
733
+ {
734
+ Path : "/coffee" ,
735
+ ServiceName : "coffee-svc" ,
736
+ Upstream : coffeeUpstream ,
737
+ ProxyConnectTimeout : "60s" ,
738
+ ProxyReadTimeout : "60s" ,
739
+ ProxySendTimeout : "60s" ,
740
+ ClientMaxBodySize : "1m" ,
741
+ ProxyBuffering : true ,
742
+ MinionIngress : & version1.Ingress {
743
+ Name : "cafe-ingress-coffee-minion" ,
744
+ Namespace : "default" ,
745
+ Annotations : map [string ]string {
746
+ "kubernetes.io/ingress.class" : "nginx" ,
747
+ "nginx.org/mergeable-ingress-type" : "minion" ,
748
+ "nginx.org/use-cluster-ip" : "true" ,
749
+ },
750
+ },
751
+ ProxySSLName : "coffee-svc.default.svc" ,
752
+ },
753
+ {
754
+ Path : "/tea" ,
755
+ ServiceName : "tea-svc" ,
756
+ Upstream : teaUpstream ,
757
+ ProxyConnectTimeout : "60s" ,
758
+ ProxyReadTimeout : "60s" ,
759
+ ProxySendTimeout : "60s" ,
760
+ ClientMaxBodySize : "1m" ,
761
+ ProxyBuffering : true ,
762
+ MinionIngress : & version1.Ingress {
763
+ Name : "cafe-ingress-tea-minion" ,
764
+ Namespace : "default" ,
765
+ Annotations : map [string ]string {
766
+ "kubernetes.io/ingress.class" : "nginx" ,
767
+ "nginx.org/mergeable-ingress-type" : "minion" ,
768
+ },
769
+ },
770
+ ProxySSLName : "tea-svc.default.svc" ,
771
+ },
772
+ },
773
+ SSL : true ,
774
+ SSLCertificate : "/etc/nginx/secrets/default-cafe-secret" ,
775
+ SSLCertificateKey : "/etc/nginx/secrets/default-cafe-secret" ,
776
+ StatusZone : "cafe.example.com" ,
777
+ HSTSMaxAge : 2592000 ,
778
+ Ports : []int {80 },
779
+ SSLPorts : []int {443 },
780
+ SSLRedirect : true ,
781
+ HealthChecks : make (map [string ]version1.HealthCheck ),
782
+ },
783
+ },
784
+ Ingress : version1.Ingress {
785
+ Name : "cafe-ingress-master" ,
786
+ Namespace : "default" ,
787
+ Annotations : map [string ]string {
788
+ "kubernetes.io/ingress.class" : "nginx" ,
789
+ "nginx.org/mergeable-ingress-type" : "master" ,
790
+ },
791
+ },
792
+ }
793
+
794
+ return expected
795
+ }
796
+
797
+ func createExpectedConfigForCafeIngressWithUseClusterIP () version1.IngressNginxConfig {
798
+ upstreamZoneSize := "256k"
799
+
800
+ coffeeUpstream := version1.Upstream {
801
+ Name : "default-cafe-ingress-cafe.example.com-coffee-svc-80" ,
802
+ LBMethod : "random two least_conn" ,
803
+ UpstreamZoneSize : upstreamZoneSize ,
804
+ UpstreamServers : []version1.UpstreamServer {
805
+ {
806
+ Address : "coffee-svc:80" ,
807
+ MaxFails : 1 ,
808
+ MaxConns : 0 ,
809
+ FailTimeout : "10s" ,
810
+ },
811
+ },
812
+ }
813
+
814
+ teaUpstream := version1.Upstream {
815
+ Name : "default-cafe-ingress-cafe.example.com-tea-svc-80" ,
816
+ LBMethod : "random two least_conn" ,
817
+ UpstreamZoneSize : upstreamZoneSize ,
818
+ UpstreamServers : []version1.UpstreamServer {
819
+ {
820
+ Address : "tea-svc:80" ,
821
+ MaxFails : 1 ,
822
+ MaxConns : 0 ,
823
+ FailTimeout : "10s" ,
824
+ },
825
+ },
826
+ }
827
+
828
+ expected := version1.IngressNginxConfig {
829
+ Upstreams : []version1.Upstream {
830
+ coffeeUpstream ,
831
+ teaUpstream ,
832
+ },
833
+ Servers : []version1.Server {
834
+ {
835
+ Name : "cafe.example.com" ,
836
+ ServerTokens : "on" ,
837
+ Locations : []version1.Location {
838
+ {
839
+ Path : "/coffee" ,
840
+ ServiceName : "coffee-svc" ,
841
+ Upstream : coffeeUpstream ,
842
+ ProxyConnectTimeout : "60s" ,
843
+ ProxyReadTimeout : "60s" ,
844
+ ProxySendTimeout : "60s" ,
845
+ ClientMaxBodySize : "1m" ,
846
+ ProxyBuffering : true ,
847
+ ProxySSLName : "coffee-svc.default.svc" ,
848
+ },
849
+ {
850
+ Path : "/tea" ,
851
+ ServiceName : "tea-svc" ,
852
+ Upstream : teaUpstream ,
853
+ ProxyConnectTimeout : "60s" ,
854
+ ProxyReadTimeout : "60s" ,
855
+ ProxySendTimeout : "60s" ,
856
+ ClientMaxBodySize : "1m" ,
857
+ ProxyBuffering : true ,
858
+ ProxySSLName : "tea-svc.default.svc" ,
859
+ },
860
+ },
861
+ SSL : true ,
862
+ SSLCertificate : "/etc/nginx/secrets/default-cafe-secret" ,
863
+ SSLCertificateKey : "/etc/nginx/secrets/default-cafe-secret" ,
864
+ StatusZone : "cafe.example.com" ,
865
+ HSTSMaxAge : 2592000 ,
866
+ Ports : []int {80 },
867
+ SSLPorts : []int {443 },
868
+ SSLRedirect : true ,
869
+ HealthChecks : make (map [string ]version1.HealthCheck ),
870
+ },
871
+ },
872
+ Ingress : version1.Ingress {
873
+ Name : "cafe-ingress" ,
874
+ Namespace : "default" ,
875
+ Annotations : map [string ]string {
876
+ "kubernetes.io/ingress.class" : "nginx" ,
877
+ "nginx.org/use-cluster-ip" : "true" ,
878
+ },
879
+ },
880
+ }
881
+ return expected
882
+ }
883
+
884
+ func TestGenerateNginxCfgWithUseClusterIP (t * testing.T ) {
885
+ t .Parallel ()
886
+ cafeIngressEx := createCafeIngressEx ()
887
+ cafeIngressEx .Ingress .Annotations ["nginx.org/use-cluster-ip" ] = "true"
888
+ isPlus := false
889
+ configParams := NewDefaultConfigParams (isPlus )
890
+
891
+ expected := createExpectedConfigForCafeIngressWithUseClusterIP ()
892
+
893
+ result , warnings := generateNginxCfg (NginxCfgParams {
894
+ staticParams : & StaticConfigParams {},
895
+ ingEx : & cafeIngressEx ,
896
+ apResources : nil ,
897
+ dosResource : nil ,
898
+ isMinion : false ,
899
+ isPlus : false ,
900
+ baseCfgParams : configParams ,
901
+ isResolverConfigured : false ,
902
+ isWildcardEnabled : false ,
903
+ })
904
+
905
+ if diff := cmp .Diff (expected , result ); diff != "" {
906
+ t .Errorf ("generateNginxCfg() returned unexpected result (-want +got):\n %s" , diff )
907
+ }
908
+ if len (warnings ) != 0 {
909
+ t .Errorf ("generateNginxCfg() returned warnings: %v" , warnings )
910
+ }
911
+ }
912
+
666
913
func createMergeableCafeIngress () * MergeableIngresses {
667
914
master := networking.Ingress {
668
915
ObjectMeta : meta_v1.ObjectMeta {
0 commit comments