Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions test/e2e/testdata/envoyproxy-daemonset.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: eg-daemonset
name: eg-ds
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should avoid using gateways with the same name as other tests

namespace: gateway-conformance-infra
spec:
gatewayClassName: "{GATEWAY_CLASS_NAME}"
Expand All @@ -16,12 +16,12 @@ spec:
parametersRef:
group: gateway.envoyproxy.io
kind: EnvoyProxy
name: eg-daemonset
name: eg-ds
---
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: eg-daemonset
name: eg-ds
namespace: gateway-conformance-infra
spec:
ipFamily: IPv4
Expand All @@ -43,16 +43,16 @@ spec:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: foo-route
name: daemonset-route
namespace: gateway-conformance-infra
spec:
parentRefs:
- name: eg-daemonset
- name: eg-ds
rules:
- backendRefs:
- name: infra-backend-v1
port: 8080
matches:
- path:
type: PathPrefix
value: /foo
value: /daemonset
61 changes: 33 additions & 28 deletions test/e2e/tests/envoyproxy_daemonset.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import (
"time"

appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/types"
Expand All @@ -34,31 +35,30 @@ var EnvoyProxyDaemonSetTest = suite.ConformanceTest{
Manifests: []string{"testdata/envoyproxy-daemonset.yaml"},
Test: func(t *testing.T, suite *suite.ConformanceTestSuite) {
t.Run("RunAndDelete", func(t *testing.T) {
t.Cleanup(func() {
if t.Failed() {
CollectAndDump(t, suite.RestConfig)
}
})

ns := "gateway-conformance-infra"
routeNN := types.NamespacedName{Name: "foo-route", Namespace: ns}
gwNN := types.NamespacedName{Name: "eg-daemonset", Namespace: ns}
routeNN := types.NamespacedName{Name: "daemonset-route", Namespace: ns}
gwNN := types.NamespacedName{Name: "eg-ds", Namespace: ns}
gwAddr := kubernetes.GatewayAndHTTPRoutesMustBeAccepted(t, suite.Client, suite.TimeoutConfig, suite.ControllerName, kubernetes.NewGatewayRef(gwNN), routeNN)
OkResp := http.ExpectedResponse{
Request: http.Request{
Path: "/foo",
},
Response: http.Response{
StatusCode: 200,
},
Namespace: ns,
}

gwPodNamespace := GetGatewayResourceNamespace()
gwPodSelector := map[string]string{
"app.kubernetes.io/managed-by": "envoy-gateway",
"app.kubernetes.io/name": "envoy",
"gateway.envoyproxy.io/owning-gateway-name": gwNN.Name,
"gateway.envoyproxy.io/owning-gateway-namespace": gwNN.Namespace,
}
// Make sure there's no deployment for the gateway
err := wait.PollUntilContextTimeout(context.TODO(), time.Second, suite.TimeoutConfig.DeleteTimeout, true, func(ctx context.Context) (bool, error) {
deploys := &appsv1.DeploymentList{}
err := suite.Client.List(ctx, deploys, &client.ListOptions{
Namespace: "envoy-gateway-system",
LabelSelector: labels.SelectorFromSet(map[string]string{
"app.kubernetes.io/managed-by": "envoy-gateway",
"app.kubernetes.io/name": "envoy",
"gateway.envoyproxy.io/owning-gateway-name": gwNN.Name,
"gateway.envoyproxy.io/owning-gateway-namespace": gwNN.Namespace,
}),
Namespace: gwPodNamespace,
LabelSelector: labels.SelectorFromSet(gwPodSelector),
})
if err != nil {
return false, err
Expand All @@ -70,8 +70,18 @@ var EnvoyProxyDaemonSetTest = suite.ConformanceTest{
t.Fatalf("Failed to check no deployments for the Gateway: %v", err)
}

WaitForPods(t, suite.Client, gwPodNamespace, gwPodSelector, corev1.PodRunning, PodReady)

// Send a request to a valid path and expect a successful response
http.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, gwAddr, OkResp)
http.MakeRequestAndExpectEventuallyConsistentResponse(t, suite.RoundTripper, suite.TimeoutConfig, gwAddr, http.ExpectedResponse{
Request: http.Request{
Path: "/daemonset",
},
Response: http.Response{
StatusCode: 200,
},
Namespace: ns,
})

// Delete the Gateway and wait for the DaemonSet to be deleted
gtw := &gwapiv1.Gateway{
Expand All @@ -87,22 +97,17 @@ var EnvoyProxyDaemonSetTest = suite.ConformanceTest{
err = wait.PollUntilContextTimeout(context.TODO(), time.Second, suite.TimeoutConfig.DeleteTimeout, true, func(ctx context.Context) (bool, error) {
dsList := &appsv1.DaemonSetList{}
err := suite.Client.List(ctx, dsList, &client.ListOptions{
Namespace: "envoy-gateway-system",
LabelSelector: labels.SelectorFromSet(map[string]string{
"app.kubernetes.io/managed-by": "envoy-gateway",
"app.kubernetes.io/name": "envoy",
"gateway.envoyproxy.io/owning-gateway-name": gwNN.Name,
"gateway.envoyproxy.io/owning-gateway-namespace": gwNN.Namespace,
}),
Namespace: gwPodNamespace,
LabelSelector: labels.SelectorFromSet(gwPodSelector),
})
if err != nil {
return false, err
}

return len(dsList.Items) == 0, err
return len(dsList.Items) == 0, nil
})
if err != nil {
t.Fatalf("Failed to delete Gateway: %v", err)
t.Fatalf("Failed to delete DaemonSet Gateway: %v", err)
}
})
},
Expand Down