Skip to content

Commit 85d3f59

Browse files
committed
conformance: HTTPRoute resolvedRefs condition
In the conformance tests, the ResolvedRefs condition existence is always enforced, even when true. Signed-off-by: Mattia Lavacca <[email protected]>
1 parent a36bded commit 85d3f59

22 files changed

+186
-32
lines changed

conformance/tests/httproute-cross-namespace.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package tests
1919
import (
2020
"testing"
2121

22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2223
"k8s.io/apimachinery/pkg/types"
2324

25+
"sigs.k8s.io/gateway-api/apis/v1beta1"
2426
"sigs.k8s.io/gateway-api/conformance/utils/http"
2527
"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
2628
"sigs.k8s.io/gateway-api/conformance/utils/suite"
@@ -38,6 +40,11 @@ var HTTPRouteCrossNamespace = suite.ConformanceTest{
3840
routeNN := types.NamespacedName{Name: "cross-namespace", Namespace: "gateway-conformance-web-backend"}
3941
gwNN := types.NamespacedName{Name: "backend-namespaces", Namespace: "gateway-conformance-infra"}
4042
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
43+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
44+
Type: string(v1beta1.RouteConditionResolvedRefs),
45+
Status: metav1.ConditionTrue,
46+
Reason: string(v1beta1.RouteReasonResolvedRefs),
47+
})
4148

4249
t.Run("Simple HTTP request should reach web-backend", func(t *testing.T) {
4350
http.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, gwAddr, http.ExpectedResponse{

conformance/tests/httproute-disallowed-kind.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ var HTTPRouteDisallowedKind = suite.ConformanceTest{
4343

4444
routeNN := types.NamespacedName{Name: "disallowed-kind", Namespace: "gateway-conformance-infra"}
4545
gwNN := types.NamespacedName{Name: "tlsroutes-only", Namespace: "gateway-conformance-infra"}
46+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
47+
Type: string(v1beta1.RouteConditionResolvedRefs),
48+
Status: metav1.ConditionTrue,
49+
Reason: string(v1beta1.RouteReasonResolvedRefs),
50+
})
4651

4752
t.Run("Route should not have been accepted with reason NotAllowedByListeners", func(t *testing.T) {
4853
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{

conformance/tests/httproute-exact-path-matching.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package tests
1919
import (
2020
"testing"
2121

22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2223
"k8s.io/apimachinery/pkg/types"
2324

25+
"sigs.k8s.io/gateway-api/apis/v1beta1"
2426
"sigs.k8s.io/gateway-api/conformance/utils/http"
2527
"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
2628
"sigs.k8s.io/gateway-api/conformance/utils/suite"
@@ -39,6 +41,11 @@ var HTTPExactPathMatching = suite.ConformanceTest{
3941
routeNN := types.NamespacedName{Name: "exact-matching", Namespace: ns}
4042
gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
4143
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
44+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
45+
Type: string(v1beta1.RouteConditionResolvedRefs),
46+
Status: metav1.ConditionTrue,
47+
Reason: string(v1beta1.RouteReasonResolvedRefs),
48+
})
4249

4350
testCases := []http.ExpectedResponse{
4451
{

conformance/tests/httproute-header-matching.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package tests
1919
import (
2020
"testing"
2121

22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2223
"k8s.io/apimachinery/pkg/types"
2324

25+
"sigs.k8s.io/gateway-api/apis/v1beta1"
2426
"sigs.k8s.io/gateway-api/conformance/utils/http"
2527
"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
2628
"sigs.k8s.io/gateway-api/conformance/utils/suite"
@@ -39,6 +41,11 @@ var HTTPRouteHeaderMatching = suite.ConformanceTest{
3941
routeNN := types.NamespacedName{Name: "header-matching", Namespace: ns}
4042
gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
4143
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
44+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
45+
Type: string(v1beta1.RouteConditionResolvedRefs),
46+
Status: metav1.ConditionTrue,
47+
Reason: string(v1beta1.RouteReasonResolvedRefs),
48+
})
4249

4350
testCases := []http.ExpectedResponse{{
4451
Request: http.Request{Path: "/", Headers: map[string]string{"Version": "one"}},

conformance/tests/httproute-hostname-intersection.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ var HTTPRouteHostnameIntersection = suite.ConformanceTest{
5252
{Namespace: ns, Name: "wildcard-host-matches-listener-wildcard-host"},
5353
}
5454
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routes...)
55+
for _, routeNN := range routes {
56+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
57+
Type: string(v1beta1.RouteConditionResolvedRefs),
58+
Status: metav1.ConditionTrue,
59+
Reason: string(v1beta1.RouteReasonResolvedRefs),
60+
})
61+
}
5562

5663
var testCases []http.ExpectedResponse
5764

conformance/tests/httproute-listener-hostname-matching.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package tests
1919
import (
2020
"testing"
2121

22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2223
"k8s.io/apimachinery/pkg/types"
2324

25+
"sigs.k8s.io/gateway-api/apis/v1beta1"
2426
"sigs.k8s.io/gateway-api/conformance/utils/http"
2527
"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
2628
"sigs.k8s.io/gateway-api/conformance/utils/suite"
@@ -41,17 +43,28 @@ var HTTPRouteListenerHostnameMatching = suite.ConformanceTest{
4143
// namespace so we have to wait for it to be ready.
4244
kubernetes.NamespacesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, []string{ns})
4345

46+
routeNN1 := types.NamespacedName{Name: "backend-v1", Namespace: ns}
47+
routeNN2 := types.NamespacedName{Name: "backend-v2", Namespace: ns}
48+
routeNN3 := types.NamespacedName{Name: "backend-v3", Namespace: ns}
4449
gwNN := types.NamespacedName{Name: "httproute-listener-hostname-matching", Namespace: ns}
45-
46-
_ = kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN, "listener-1"),
47-
types.NamespacedName{Namespace: ns, Name: "backend-v1"},
48-
)
49-
_ = kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN, "listener-2"),
50-
types.NamespacedName{Namespace: ns, Name: "backend-v2"},
51-
)
52-
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN, "listener-3", "listener-4"),
53-
types.NamespacedName{Namespace: ns, Name: "backend-v3"},
54-
)
50+
kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN, "listener-1"), routeNN1)
51+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN1, gwNN, metav1.Condition{
52+
Type: string(v1beta1.RouteConditionResolvedRefs),
53+
Status: metav1.ConditionTrue,
54+
Reason: string(v1beta1.RouteReasonResolvedRefs),
55+
})
56+
kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN, "listener-2"), routeNN2)
57+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN2, gwNN, metav1.Condition{
58+
Type: string(v1beta1.RouteConditionResolvedRefs),
59+
Status: metav1.ConditionTrue,
60+
Reason: string(v1beta1.RouteReasonResolvedRefs),
61+
})
62+
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN, "listener-3", "listener-4"), routeNN3)
63+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN3, gwNN, metav1.Condition{
64+
Type: string(v1beta1.RouteConditionResolvedRefs),
65+
Status: metav1.ConditionTrue,
66+
Reason: string(v1beta1.RouteReasonResolvedRefs),
67+
})
5568

5669
testCases := []http.ExpectedResponse{{
5770
Request: http.Request{Host: "bar.com", Path: "/"},

conformance/tests/httproute-matching-across-routes.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package tests
1919
import (
2020
"testing"
2121

22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2223
"k8s.io/apimachinery/pkg/types"
2324

25+
"sigs.k8s.io/gateway-api/apis/v1beta1"
2426
"sigs.k8s.io/gateway-api/conformance/utils/http"
2527
"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
2628
"sigs.k8s.io/gateway-api/conformance/utils/suite"
@@ -40,6 +42,16 @@ var HTTPRouteMatchingAcrossRoutes = suite.ConformanceTest{
4042
routeNN2 := types.NamespacedName{Name: "matching-part2", Namespace: ns}
4143
gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
4244
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN1, routeNN2)
45+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN1, gwNN, metav1.Condition{
46+
Type: string(v1beta1.RouteConditionResolvedRefs),
47+
Status: metav1.ConditionTrue,
48+
Reason: string(v1beta1.RouteReasonResolvedRefs),
49+
})
50+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN2, gwNN, metav1.Condition{
51+
Type: string(v1beta1.RouteConditionResolvedRefs),
52+
Status: metav1.ConditionTrue,
53+
Reason: string(v1beta1.RouteReasonResolvedRefs),
54+
})
4355

4456
testCases := []http.ExpectedResponse{{
4557
Request: http.Request{

conformance/tests/httproute-matching.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package tests
1919
import (
2020
"testing"
2121

22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2223
"k8s.io/apimachinery/pkg/types"
2324

25+
"sigs.k8s.io/gateway-api/apis/v1beta1"
2426
"sigs.k8s.io/gateway-api/conformance/utils/http"
2527
"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
2628
"sigs.k8s.io/gateway-api/conformance/utils/suite"
@@ -39,6 +41,11 @@ var HTTPRouteMatching = suite.ConformanceTest{
3941
routeNN := types.NamespacedName{Name: "matching", Namespace: ns}
4042
gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
4143
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
44+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
45+
Type: string(v1beta1.RouteConditionResolvedRefs),
46+
Status: metav1.ConditionTrue,
47+
Reason: string(v1beta1.RouteReasonResolvedRefs),
48+
})
4249

4350
testCases := []http.ExpectedResponse{{
4451
Request: http.Request{Path: "/"},

conformance/tests/httproute-method-matching.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ package tests
1919
import (
2020
"testing"
2121

22+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2223
"k8s.io/apimachinery/pkg/types"
2324

25+
"sigs.k8s.io/gateway-api/apis/v1beta1"
2426
"sigs.k8s.io/gateway-api/conformance/utils/http"
2527
"sigs.k8s.io/gateway-api/conformance/utils/kubernetes"
2628
"sigs.k8s.io/gateway-api/conformance/utils/suite"
@@ -40,6 +42,11 @@ var HTTPRouteMethodMatching = suite.ConformanceTest{
4042
routeNN := types.NamespacedName{Name: "method-matching", Namespace: ns}
4143
gwNN := types.NamespacedName{Name: "same-namespace", Namespace: ns}
4244
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
45+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
46+
Type: string(v1beta1.RouteConditionResolvedRefs),
47+
Status: metav1.ConditionTrue,
48+
Reason: string(v1beta1.RouteReasonResolvedRefs),
49+
})
4350

4451
testCases := []http.ExpectedResponse{
4552
{

conformance/tests/httproute-observed-generation-bump.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,40 +38,42 @@ var HTTPRouteObservedGenerationBump = suite.ConformanceTest{
3838
ShortName: "HTTPRouteObservedGenerationBump",
3939
Description: "A HTTPRoute in the gateway-conformance-infra namespace should update the observedGeneration in all of it's Status.Conditions after an update to the spec",
4040
Manifests: []string{"tests/httproute-observed-generation-bump.yaml"},
41-
Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
42-
41+
Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
4342
routeNN := types.NamespacedName{Name: "observed-generation-bump", Namespace: "gateway-conformance-infra"}
4443
gwNN := types.NamespacedName{Name: "same-namespace", Namespace: "gateway-conformance-infra"}
4544

46-
acceptedCondition := metav1.Condition{
47-
Type: string(v1beta1.RouteConditionAccepted),
48-
Status: metav1.ConditionTrue,
49-
Reason: "", // any reason
50-
}
51-
5245
t.Run("observedGeneration should increment", func(t *testing.T) {
5346
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
5447
defer cancel()
5548

5649
namespaces := []string{"gateway-conformance-infra"}
57-
kubernetes.NamespacesMustBeAccepted(t, s.Client, s.TimeoutConfig, namespaces)
50+
kubernetes.NamespacesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, namespaces)
5851

5952
original := &v1beta1.HTTPRoute{}
60-
err := s.Client.Get(ctx, routeNN, original)
53+
err := suite.Client.Get(ctx, routeNN, original)
6154
require.NoErrorf(t, err, "error getting HTTPRoute: %v", err)
6255

6356
// Sanity check
6457
kubernetes.HTTPRouteMustHaveLatestConditions(t, original)
6558

6659
mutate := original.DeepCopy()
6760
mutate.Spec.Rules[0].BackendRefs[0].Name = "infra-backend-v2"
68-
err = s.Client.Update(ctx, mutate)
61+
err = suite.Client.Update(ctx, mutate)
6962
require.NoErrorf(t, err, "error updating the HTTPRoute: %v", err)
7063

71-
kubernetes.HTTPRouteMustHaveCondition(t, s.Client, s.TimeoutConfig, routeNN, gwNN, acceptedCondition)
64+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
65+
Type: string(v1beta1.RouteConditionAccepted),
66+
Status: metav1.ConditionTrue,
67+
Reason: "", // any reason
68+
})
69+
kubernetes.HTTPRouteMustHaveCondition(t, suite.Client, suite.TimeoutConfig, routeNN, gwNN, metav1.Condition{
70+
Type: string(v1beta1.RouteConditionResolvedRefs),
71+
Status: metav1.ConditionTrue,
72+
Reason: string(v1beta1.RouteReasonResolvedRefs),
73+
})
7274

7375
updated := &v1beta1.HTTPRoute{}
74-
err = s.Client.Get(ctx, routeNN, updated)
76+
err = suite.Client.Get(ctx, routeNN, updated)
7577
require.NoErrorf(t, err, "error getting Gateway: %v", err)
7678

7779
// Sanity check

0 commit comments

Comments
 (0)