E2E Tests: Use inspect instead of actual data to avoid UDP flake

Do not test using an unreliable UDP connection

Signed-off-by: Ygal Blum <ygal.blum@gmail.com>
This commit is contained in:
Ygal Blum 2023-01-13 07:34:19 +02:00
parent 67305cec97
commit a02a10f3f3
1 changed files with 13 additions and 79 deletions

View File

@ -1,7 +1,6 @@
package integration
import (
"bufio"
"bytes"
"context"
"encoding/base64"
@ -1689,82 +1688,19 @@ func testHTTPServer(port string, shouldErr bool, expectedResponse string) {
Expect(string(body)).Should(Equal(expectedResponse))
}
func testEchoServer(connection net.Conn) {
stringToSend := "hello world"
var err error
var bytesSent int
func verifyPodPorts(podmanTest *PodmanTestIntegration, podName string, ports ...string) {
podInspect := podmanTest.Podman([]string{"pod", "inspect", podName, "--format", "{{.InfraContainerID}}"})
podInspect.WaitWithDefaultTimeout()
Expect(podInspect).To(Exit(0))
infraID := podInspect.OutputToString()
interval := 250 * time.Millisecond
for i := 0; i < 5; i++ {
err = connection.SetDeadline(time.Now().Add(time.Second))
Expect(err).To(BeNil())
bytesSent, err = fmt.Fprint(connection, stringToSend)
if err == nil {
break
}
time.Sleep(interval)
interval *= 2
}
Expect(err).To(BeNil())
Expect(bytesSent).To(Equal(len(stringToSend)))
inspect := podmanTest.Podman([]string{"inspect", "--format", "{{.NetworkSettings.Ports}}", infraID})
inspect.WaitWithDefaultTimeout()
Expect(inspect).To(Exit(0))
stringReceived := make([]byte, bytesSent)
var bytesRead int
interval = 250 * time.Millisecond
for i := 0; i < 5; i++ {
err = connection.SetDeadline(time.Now().Add(time.Second))
Expect(err).To(BeNil())
bytesRead, err = bufio.NewReader(connection).Read(stringReceived)
if err == nil {
break
for _, port := range ports {
Expect(inspect.OutputToString()).Should(ContainSubstring(port))
}
time.Sleep(interval)
interval *= 2
}
Expect(err).To(BeNil())
Expect(bytesRead).To(Equal(bytesSent))
Expect(stringToSend).To(Equal(string(stringReceived)))
}
func testEchoServerUDP(address string) {
udpServer, err := net.ResolveUDPAddr("udp", address)
Expect(err).To(BeNil())
interval := 250 * time.Millisecond
var conn *net.UDPConn
for i := 0; i < 6; i++ {
conn, err = net.DialUDP("udp", nil, udpServer)
if err == nil {
break
}
time.Sleep(interval)
interval *= 2
}
Expect(err).To(BeNil())
defer conn.Close()
testEchoServer(conn)
}
func testEchoServerTCP(address string) {
tcpServer, err := net.ResolveTCPAddr("tcp", address)
Expect(err).To(BeNil())
interval := 250 * time.Millisecond
var conn *net.TCPConn
for i := 0; i < 6; i++ {
conn, err = net.DialTCP("tcp", nil, tcpServer)
if err == nil {
break
}
time.Sleep(interval)
interval *= 2
}
Expect(err).To(BeNil())
defer conn.Close()
testEchoServer(conn)
}
var _ = Describe("Podman play kube", func() {
@ -4974,8 +4910,7 @@ spec:
kube.WaitWithDefaultTimeout()
Expect(kube).Should(Exit(0))
testEchoServerUDP(":19009")
testEchoServerTCP(":19010")
verifyPodPorts(podmanTest, "network-echo", "19008/tcp:[{ 19010}]", "19008/udp:[{ 19009}]")
})
It("podman play kube override with udp should keep tcp from YAML file", func() {
@ -4986,7 +4921,6 @@ spec:
kube.WaitWithDefaultTimeout()
Expect(kube).Should(Exit(0))
testEchoServerUDP(":19012")
testEchoServerTCP(":19011")
verifyPodPorts(podmanTest, "network-echo", "19008/tcp:[{ 19011}]", "19008/udp:[{ 19012}]")
})
})