@@ -1308,6 +1308,95 @@ func TestGenerateNginxCfgForLimitReqWithScaling(t *testing.T) {
13081308 }
13091309}
13101310
1311+ func TestGenerateNginxCfgForMergeableIngressesForLimitReqWithScaling (t * testing.T ) {
1312+ t .Parallel ()
1313+ mergeableIngresses := createMergeableCafeIngress ()
1314+
1315+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-rate" ] = "200r/s"
1316+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-key" ] = "${request_uri}"
1317+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-burst" ] = "100"
1318+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-delay" ] = "80"
1319+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-no-delay" ] = "true"
1320+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-reject-code" ] = "429"
1321+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-zone-size" ] = "11m"
1322+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-dry-run" ] = "true"
1323+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-log-level" ] = "info"
1324+ mergeableIngresses .Minions [0 ].Ingress .Annotations ["nginx.org/limit-req-scale" ] = "true"
1325+
1326+ mergeableIngresses .Minions [1 ].Ingress .Annotations ["nginx.org/limit-req-rate" ] = "400r/s"
1327+ mergeableIngresses .Minions [1 ].Ingress .Annotations ["nginx.org/limit-req-burst" ] = "200"
1328+ mergeableIngresses .Minions [1 ].Ingress .Annotations ["nginx.org/limit-req-delay" ] = "160"
1329+ mergeableIngresses .Minions [1 ].Ingress .Annotations ["nginx.org/limit-req-reject-code" ] = "503"
1330+ mergeableIngresses .Minions [1 ].Ingress .Annotations ["nginx.org/limit-req-zone-size" ] = "12m"
1331+ mergeableIngresses .Minions [1 ].Ingress .Annotations ["nginx.org/limit-req-scale" ] = "true"
1332+
1333+ expectedZones := []version1.LimitReqZone {
1334+ {
1335+ Name : "default/cafe-ingress-coffee-minion" ,
1336+ Key : "${request_uri}" ,
1337+ Size : "11m" ,
1338+ Rate : "100r/s" ,
1339+ },
1340+ {
1341+ Name : "default/cafe-ingress-tea-minion" ,
1342+ Key : "${binary_remote_addr}" ,
1343+ Size : "12m" ,
1344+ Rate : "200r/s" ,
1345+ },
1346+ }
1347+
1348+ expectedReqs := map [string ]* version1.LimitReq {
1349+ "cafe-ingress-coffee-minion" : {
1350+ Zone : "default/cafe-ingress-coffee-minion" ,
1351+ Burst : 100 ,
1352+ Delay : 80 ,
1353+ LogLevel : "info" ,
1354+ RejectCode : 429 ,
1355+ NoDelay : true ,
1356+ DryRun : true ,
1357+ },
1358+ "cafe-ingress-tea-minion" : {
1359+ Zone : "default/cafe-ingress-tea-minion" ,
1360+ Burst : 200 ,
1361+ Delay : 160 ,
1362+ LogLevel : "error" ,
1363+ RejectCode : 503 ,
1364+ },
1365+ }
1366+
1367+ isPlus := false
1368+
1369+ configParams := NewDefaultConfigParams (isPlus )
1370+
1371+ result , warnings := generateNginxCfgForMergeableIngresses (NginxCfgParams {
1372+ mergeableIngs : mergeableIngresses ,
1373+ baseCfgParams : configParams ,
1374+ isPlus : isPlus ,
1375+ staticParams : & StaticConfigParams {},
1376+ ingressControllerReplicas : 2 ,
1377+ })
1378+
1379+ if ! reflect .DeepEqual (result .LimitReqZones , expectedZones ) {
1380+ t .Errorf ("generateNginxCfg returned \n %v, but expected \n %v" , result .LimitReqZones , expectedZones )
1381+ }
1382+
1383+ for _ , server := range result .Servers {
1384+ for _ , location := range server .Locations {
1385+ expectedLimitReq := expectedReqs [location .MinionIngress .Name ]
1386+ if ! reflect .DeepEqual (location .LimitReq , expectedLimitReq ) {
1387+ t .Errorf ("generateNginxCfg returned \n %v, but expected \n %v" , location .LimitReq , expectedLimitReq )
1388+ }
1389+ }
1390+ }
1391+
1392+ if ! reflect .DeepEqual (result .LimitReqZones , expectedZones ) {
1393+ t .Errorf ("generateNginxCfg returned \n %v, but expected \n %v" , result .LimitReqZones , expectedZones )
1394+ }
1395+ if len (warnings ) != 0 {
1396+ t .Errorf ("generateNginxCfg returned warnings: %v" , warnings )
1397+ }
1398+ }
1399+
13111400func createMergeableCafeIngress () * MergeableIngresses {
13121401 master := networking.Ingress {
13131402 ObjectMeta : meta_v1.ObjectMeta {
0 commit comments