44 "context"
55 "fmt"
66 "net"
7+ "strings"
8+ "time"
79
810 configv1 "github.com/openshift/api/config/v1"
911 "github.com/openshift/origin/test/extended/kubevirt"
@@ -12,6 +14,7 @@ import (
1214
1315 kapiv1 "k8s.io/api/core/v1"
1416 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
17+ "k8s.io/apimachinery/pkg/util/wait"
1518 e2e "k8s.io/kubernetes/test/e2e/framework"
1619 frameworkpod "k8s.io/kubernetes/test/e2e/framework/pod"
1720 admissionapi "k8s.io/pod-security-admission/api"
@@ -114,6 +117,19 @@ func doEgressFwTest(f *e2e.Framework, mgmtFw *e2e.Framework, oc *exutil.CLI, man
114117 err := oc .AsAdmin ().Run ("create" ).Args ("-f" , egFwYaml ).Execute ()
115118 o .Expect (err ).NotTo (o .HaveOccurred (), "created egress-firewall object" )
116119
120+ g .By ("waiting for egressfirewall rules to be applied successfully" )
121+ // Fetch the name of the egressfirewall object. As there can be only
122+ // one egressfirewall object per namespace, we can use the first one.
123+ egfwName , err := oc .AsAdmin ().Run ("get" ).Args ("egressfirewall" , "-o" , "jsonpath={.items[0].metadata.name}" ).Output ()
124+ o .Expect (err ).NotTo (o .HaveOccurred (), "failed to get egressfirewall object" )
125+
126+ err = wait .PollUntilContextTimeout (context .TODO (), 100 * time .Millisecond , 1 * time .Second , true , func (ctx context.Context ) (bool , error ) {
127+ out , err := oc .AsAdmin ().Run ("get" ).Args ("egressfirewall" , egfwName , "-o" , "jsonpath={.status.status}" ).Output ()
128+ o .Expect (err ).NotTo (o .HaveOccurred (), "failed to get egressfirewall object" )
129+ return strings .Contains (out , "EgressFirewall Rules applied" ), nil
130+ })
131+ o .Expect (err ).NotTo (o .HaveOccurred (), "failed to wait for egressfirewall rules to be applied successfully" )
132+
117133 o .Expect (sendEgressFwTraffic (f , mgmtFw , oc , egressFWTestPod , nodeSelectorSupport , checkWildcard )).To (o .Succeed ())
118134
119135 g .By ("deleting test pod" )
0 commit comments