@@ -1308,6 +1308,95 @@ func TestGenerateNginxCfgForLimitReqWithScaling(t *testing.T) {
1308
1308
}
1309
1309
}
1310
1310
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
+
1311
1400
func createMergeableCafeIngress () * MergeableIngresses {
1312
1401
master := networking.Ingress {
1313
1402
ObjectMeta : meta_v1.ObjectMeta {
0 commit comments