Skip to content

Commit b810f99

Browse files
Revert "test: removed duplicate tests"
This reverts commit f8fae68.
1 parent dc8e335 commit b810f99

30 files changed

Lines changed: 735 additions & 26 deletions

pkg/plugin/grpcroute.go

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,7 @@ func (r *RpcPlugin) setGRPCHeaderRoute(rollout *v1alpha1.Rollout, headerRouting
102102

103103
canaryServiceKind := gatewayv1.Kind("Service")
104104
canaryServiceGroup := gatewayv1.Group("")
105-
106-
// Filter to only unmanaged rules (rules without a Name, or with a Name not in managedRoutes)
107-
// This ensures getRouteRule only searches through weight-splitting rules, not header routes
108-
managedNames := managedRouteNamesSet(rollout)
109-
unmanagedRules := []gatewayv1.GRPCRouteRule{}
110-
for _, rule := range grpcRoute.Spec.Rules {
111-
// Keep rules that have no name OR have a name that's not managed
112-
if rule.Name == nil || !managedNames[string(*rule.Name)] {
113-
unmanagedRules = append(unmanagedRules, rule)
114-
}
115-
}
116-
117-
grpcRouteRuleList := GRPCRouteRuleList(unmanagedRules)
105+
grpcRouteRuleList := GRPCRouteRuleList(grpcRoute.Spec.Rules)
118106
backendRefNameList := []string{string(canaryServiceName), stableServiceName}
119107
grpcRouteRule, err := getRouteRule(grpcRouteRuleList, backendRefNameList...)
120108
if err != nil {

pkg/plugin/httproute.go

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -107,19 +107,7 @@ func (r *RpcPlugin) setHTTPHeaderRoute(rollout *v1alpha1.Rollout, headerRouting
107107

108108
canaryServiceKind := gatewayv1.Kind("Service")
109109
canaryServiceGroup := gatewayv1.Group("")
110-
111-
// Filter to only unmanaged rules (rules without a Name, or with a Name not in managedRoutes)
112-
// This ensures getRouteRule only searches through weight-splitting rules, not header routes
113-
managedNames := managedRouteNamesSet(rollout)
114-
unmanagedRules := []gatewayv1.HTTPRouteRule{}
115-
for _, rule := range httpRoute.Spec.Rules {
116-
// Keep rules that have no name OR have a name that's not managed
117-
if rule.Name == nil || !managedNames[string(*rule.Name)] {
118-
unmanagedRules = append(unmanagedRules, rule)
119-
}
120-
}
121-
122-
httpRouteRuleList := HTTPRouteRuleList(unmanagedRules)
110+
httpRouteRuleList := HTTPRouteRuleList(httpRoute.Spec.Rules)
123111
backendRefNameList := []string{string(canaryServiceName), stableServiceName}
124112
httpRouteRule, err := getRouteRule(httpRouteRuleList, backendRefNameList...)
125113
if err != nil {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: GRPCRoute
3+
metadata:
4+
name: grpcroute-hbw
5+
namespace: default
6+
spec:
7+
(length(rules)): 1
8+
rules:
9+
- backendRefs:
10+
- name: argo-rollouts-stable-service
11+
- name: argo-rollouts-canary-service
12+
(weight): 0
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: GRPCRoute
3+
metadata:
4+
name: grpcroute-hbw
5+
namespace: default
6+
spec:
7+
(length(rules)): 1
8+
rules:
9+
- backendRefs:
10+
- name: argo-rollouts-stable-service
11+
- name: argo-rollouts-canary-service
12+
(weight): 0
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: GRPCRoute
3+
metadata:
4+
name: grpcroute-hbw
5+
namespace: default
6+
spec:
7+
(length(rules)): 2
8+
rules:
9+
- backendRefs:
10+
- name: argo-rollouts-stable-service
11+
(weight): 70
12+
- name: argo-rollouts-canary-service
13+
(weight): 30
14+
- name: canary-route1
15+
matches:
16+
- headers:
17+
- name: X-Canary
18+
type: Exact
19+
value: "true"
20+
backendRefs:
21+
- name: argo-rollouts-canary-service
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: argoproj.io/v1alpha1
2+
kind: Rollout
3+
metadata:
4+
name: grpcroute-hbw-rollout
5+
namespace: default
6+
status:
7+
(phase == 'Healthy'): true
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
apiVersion: chainsaw.kyverno.io/v1alpha1
2+
kind: Test
3+
metadata:
4+
name: grpcroute-header-before-weight
5+
labels:
6+
route-type: grpc
7+
test-scope: headers
8+
spec:
9+
description: >
10+
Verifies that setHeaderRoute before setWeight works correctly for GRPCRoute
11+
(issues #158, #169). When setHeaderRoute fires first (initial weight is 0), the
12+
subsequent setWeight(0) call must NOT overwrite the header-route rule's canary
13+
backend weight to 0. The header-route rule must deliver traffic to the canary
14+
regardless of weight percentage.
15+
namespace: default
16+
concurrent: false
17+
18+
steps:
19+
- name: create-resources
20+
try:
21+
- apply:
22+
file: resources/grpcroute.yaml
23+
- apply:
24+
file: resources/rollout.yaml
25+
26+
- name: assert-initial-state
27+
try:
28+
- assert:
29+
timeout: 30s
30+
file: assertions/grpcroute-initial.yaml
31+
32+
- name: wait-for-initial-healthy
33+
try:
34+
- assert:
35+
timeout: 5m
36+
file: assertions/rollout-healthy.yaml
37+
38+
- name: trigger-canary
39+
description: Steps are setHeaderRoute -> setWeight:30 -> pause:30s.
40+
try:
41+
- patch:
42+
resource:
43+
apiVersion: argoproj.io/v1alpha1
44+
kind: Rollout
45+
metadata:
46+
name: grpcroute-hbw-rollout
47+
namespace: default
48+
spec:
49+
template:
50+
spec:
51+
containers:
52+
- name: rollouts-demo
53+
image: argoproj/rollouts-demo:green
54+
55+
- name: assert-active
56+
description: >
57+
Weight-split rule has 70/30; header-route rule has canary only with no explicit
58+
weight (not 0). This proves setWeight did not clobber the header rule.
59+
try:
60+
- assert:
61+
timeout: 2m
62+
file: assertions/grpcroute-with-header-route.yaml
63+
64+
- name: assert-rollout-healthy
65+
try:
66+
- assert:
67+
timeout: 5m
68+
file: assertions/rollout-healthy.yaml
69+
70+
- name: assert-cleanup
71+
try:
72+
- assert:
73+
timeout: 60s
74+
file: assertions/grpcroute-after-cleanup.yaml
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: GRPCRoute
3+
metadata:
4+
name: grpcroute-hbw
5+
namespace: default
6+
spec:
7+
parentRefs:
8+
- name: traefik-gateway
9+
rules:
10+
- backendRefs:
11+
- name: argo-rollouts-stable-service
12+
port: 80
13+
- name: argo-rollouts-canary-service
14+
port: 80
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
apiVersion: argoproj.io/v1alpha1
2+
kind: Rollout
3+
metadata:
4+
name: grpcroute-hbw-rollout
5+
namespace: default
6+
spec:
7+
replicas: 2
8+
strategy:
9+
canary:
10+
canaryService: argo-rollouts-canary-service
11+
stableService: argo-rollouts-stable-service
12+
trafficRouting:
13+
managedRoutes:
14+
- name: canary-route1
15+
plugins:
16+
argoproj-labs/gatewayAPI:
17+
grpcRoutes:
18+
- name: grpcroute-hbw
19+
useHeaderRoutes: true
20+
namespace: default
21+
steps:
22+
- setHeaderRoute:
23+
name: canary-route1
24+
match:
25+
- headerName: X-Canary
26+
headerValue:
27+
exact: "true"
28+
- setWeight: 30
29+
- pause: {duration: 30s}
30+
revisionHistoryLimit: 2
31+
selector:
32+
matchLabels:
33+
app: rollouts-demo
34+
template:
35+
metadata:
36+
labels:
37+
app: rollouts-demo
38+
spec:
39+
containers:
40+
- name: rollouts-demo
41+
image: argoproj/rollouts-demo:red
42+
ports:
43+
- name: http
44+
containerPort: 8080
45+
protocol: TCP
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: gateway.networking.k8s.io/v1
2+
kind: GRPCRoute
3+
metadata:
4+
name: grpcroute-wbh
5+
namespace: default
6+
spec:
7+
(length(rules)): 1
8+
rules:
9+
- backendRefs:
10+
- name: argo-rollouts-stable-service
11+
- name: argo-rollouts-canary-service
12+
(weight): 0

0 commit comments

Comments
 (0)