Skip to content

Commit bc99619

Browse files
authored
Merge branch 'main' into fix_dos_tests
2 parents 793968b + d2f0a19 commit bc99619

File tree

2 files changed

+109
-18
lines changed

2 files changed

+109
-18
lines changed

internal/configs/ingress.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -640,15 +640,16 @@ func generateNginxCfgForMergeableIngresses(p NginxCfgParams) (version1.IngressNg
640640
isMinion := false
641641

642642
masterNginxCfg, warnings := generateNginxCfg(NginxCfgParams{
643-
staticParams: p.staticParams,
644-
ingEx: p.mergeableIngs.Master,
645-
apResources: p.apResources,
646-
dosResource: p.dosResource,
647-
isMinion: isMinion,
648-
isPlus: p.isPlus,
649-
baseCfgParams: p.baseCfgParams,
650-
isResolverConfigured: p.isResolverConfigured,
651-
isWildcardEnabled: p.isWildcardEnabled,
643+
staticParams: p.staticParams,
644+
ingEx: p.mergeableIngs.Master,
645+
apResources: p.apResources,
646+
dosResource: p.dosResource,
647+
isMinion: isMinion,
648+
isPlus: p.isPlus,
649+
baseCfgParams: p.baseCfgParams,
650+
isResolverConfigured: p.isResolverConfigured,
651+
isWildcardEnabled: p.isWildcardEnabled,
652+
ingressControllerReplicas: p.ingressControllerReplicas,
652653
})
653654

654655
// because p.mergeableIngs.Master.Ingress is a deepcopy of the original master
@@ -690,15 +691,16 @@ func generateNginxCfgForMergeableIngresses(p NginxCfgParams) (version1.IngressNg
690691
dummyApResources := &AppProtectResources{}
691692
dummyDosResource := &appProtectDosResource{}
692693
nginxCfg, minionWarnings := generateNginxCfg(NginxCfgParams{
693-
staticParams: p.staticParams,
694-
ingEx: minion,
695-
apResources: dummyApResources,
696-
dosResource: dummyDosResource,
697-
isMinion: isMinion,
698-
isPlus: p.isPlus,
699-
baseCfgParams: p.baseCfgParams,
700-
isResolverConfigured: p.isResolverConfigured,
701-
isWildcardEnabled: p.isWildcardEnabled,
694+
staticParams: p.staticParams,
695+
ingEx: minion,
696+
apResources: dummyApResources,
697+
dosResource: dummyDosResource,
698+
isMinion: isMinion,
699+
isPlus: p.isPlus,
700+
baseCfgParams: p.baseCfgParams,
701+
isResolverConfigured: p.isResolverConfigured,
702+
isWildcardEnabled: p.isWildcardEnabled,
703+
ingressControllerReplicas: p.ingressControllerReplicas,
702704
})
703705
warnings.Add(minionWarnings)
704706

internal/configs/ingress_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
13111400
func createMergeableCafeIngress() *MergeableIngresses {
13121401
master := networking.Ingress{
13131402
ObjectMeta: meta_v1.ObjectMeta{

0 commit comments

Comments
 (0)