From 92759ea64292891b85554728e13e753eadd9e488 Mon Sep 17 00:00:00 2001 From: Quan Tian Date: Thu, 20 Feb 2020 00:32:12 +0800 Subject: [PATCH] NetworkPolicy e2e test should wait for Pod ready The test "should enforce egress policy allowing traffic to a server in a different namespace based on PodSelector and NamespaceSelector [Feature:NetworkPolicy]" is flaky because it doesn't wait for the server Pod to be ready before testing traffic via its service, then even the NetworkPolicy allows it, the SYN packets will be rejected by iptables because the service has no endpoints at that moment. This PR fixes it by making it wait for Pods to be ready like other tests. --- test/e2e/network/network_policy.go | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/test/e2e/network/network_policy.go b/test/e2e/network/network_policy.go index e7777a94c76..c93f9a01637 100644 --- a/test/e2e/network/network_policy.go +++ b/test/e2e/network/network_policy.go @@ -918,22 +918,21 @@ var _ = SIGDescribe("NetworkPolicy [LinuxOnly]", func() { // Creating pods and services in namespace-b nsBpodServerA, nsBserviceA = createServerPodAndService(f, nsB, "ns-b-server-a", []int{80}) + defer cleanupServerPodAndService(f, nsBpodServerA, nsBserviceA) nsBpodServerB, nsBserviceB = createServerPodAndService(f, nsB, "ns-b-server-b", []int{80}) + defer cleanupServerPodAndService(f, nsBpodServerB, nsBserviceB) // Wait for Server with Service in NS-A to be ready - framework.Logf("Waiting for servers to come up.") - err = e2epod.WaitForPodRunningInNamespace(f.ClientSet, podServer) - framework.ExpectNoError(err, "Error occurred while waiting for pod status in namespace: Running.") + framework.Logf("Waiting for servers to be ready.") + err = e2epod.WaitTimeoutForPodReadyInNamespace(f.ClientSet, podServer.Name, podServer.Namespace, framework.PodStartTimeout) + framework.ExpectNoError(err, "Error occurred while waiting for pod status in namespace: Ready.") // Wait for Servers with Services in NS-B to be ready - err = e2epod.WaitForPodRunningInNamespace(f.ClientSet, nsBpodServerA) - framework.ExpectNoError(err, "Error occurred while waiting for pod status in namespace: Running.") + err = e2epod.WaitTimeoutForPodReadyInNamespace(f.ClientSet, nsBpodServerA.Name, nsBpodServerA.Namespace, framework.PodStartTimeout) + framework.ExpectNoError(err, "Error occurred while waiting for pod status in namespace: Ready.") - err = e2epod.WaitForPodRunningInNamespace(f.ClientSet, nsBpodServerB) - framework.ExpectNoError(err, "Error occurred while waiting for pod status in namespace: Running.") - - defer cleanupServerPodAndService(f, nsBpodServerA, nsBserviceA) - defer cleanupServerPodAndService(f, nsBpodServerB, nsBserviceB) + err = e2epod.WaitTimeoutForPodReadyInNamespace(f.ClientSet, nsBpodServerB.Name, nsBpodServerB.Namespace, framework.PodStartTimeout) + framework.ExpectNoError(err, "Error occurred while waiting for pod status in namespace: Ready.") ginkgo.By("Creating a network policy for the server which allows traffic only to a server in different namespace.") protocolUDP := v1.ProtocolUDP