From 13811f17f591a31e28fd3e892701630e60b7206d Mon Sep 17 00:00:00 2001 From: Yaroslav Borbat Date: Mon, 4 May 2026 15:04:34 +0300 Subject: [PATCH] test: fix external connectivity Signed-off-by: Yaroslav Borbat --- .../internal/network/external_connectivity.go | 33 ++++++++++++++----- test/e2e/vm/additional_network_interfaces.go | 4 +-- test/e2e/vm/connectivity.go | 4 +-- test/e2e/vm/migration.go | 4 +-- test/e2e/vm/power_state.go | 2 +- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/test/e2e/internal/network/external_connectivity.go b/test/e2e/internal/network/external_connectivity.go index 38b736caf8..22b1d54ff3 100644 --- a/test/e2e/internal/network/external_connectivity.go +++ b/test/e2e/internal/network/external_connectivity.go @@ -19,6 +19,7 @@ package network import ( "fmt" "strings" + "time" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -26,16 +27,30 @@ import ( "github.com/deckhouse/virtualization/test/e2e/internal/framework" ) -const ( - HTTPStatusOk = "200" - ExternalHost = "https://flant.ru" -) +var ExternalConnectivityHosts = []string{ + "https://flant.ru", + "https://google.com", + "https://ya.ru", +} -func CheckExternalConnectivity(f *framework.Framework, vmName, host, expectedHTTPCode string) { +func CheckExternalConnectivity(f *framework.Framework, vmName string, hosts []string) { GinkgoHelper() - cmd := fmt.Sprintf("curl -o /dev/null -k -s -w \"%%{http_code}\\n\" %s", host) - httpCode, err := f.SSHCommand(vmName, f.Namespace().Name, cmd) - Expect(err).NotTo(HaveOccurred(), "failed external connectivity check for VM %s", vmName) - Expect(strings.TrimSpace(httpCode)).To(Equal(expectedHTTPCode), "HTTP response code from %s should be %s, got %s", host, expectedHTTPCode, httpCode) + cmd := fmt.Sprintf(`set -e +for host in %s; do + if curl --head -k -sS -o /dev/null --connect-timeout 5 --max-time 15 "$host"; then + echo "$host" + exit 0 + fi +done +exit 1`, strings.Join(hosts, " ")) + + reachableHost, err := f.SSHCommand( + vmName, + f.Namespace().Name, + cmd, + framework.WithSSHTimeout(time.Minute), + ) + Expect(err).NotTo(HaveOccurred(), "VM %s should have outbound connectivity via at least one host from %v", vmName, hosts) + Expect(strings.TrimSpace(reachableHost)).NotTo(BeEmpty(), "VM %s should report a reachable external host from %v", vmName, hosts) } diff --git a/test/e2e/vm/additional_network_interfaces.go b/test/e2e/vm/additional_network_interfaces.go index c89368bd9e..8095113046 100644 --- a/test/e2e/vm/additional_network_interfaces.go +++ b/test/e2e/vm/additional_network_interfaces.go @@ -149,10 +149,10 @@ var _ = Describe("VirtualMachineAdditionalNetworkInterfaces", Label(precheck.NoP }) By("Check VM can reach external network after migration", func() { - network.CheckExternalConnectivity(f, vmFoo.Name, network.ExternalHost, network.HTTPStatusOk) + network.CheckExternalConnectivity(f, vmFoo.Name, network.ExternalConnectivityHosts) if tc.vmBarHasMainNetwork { - network.CheckExternalConnectivity(f, vmBar.Name, network.ExternalHost, network.HTTPStatusOk) + network.CheckExternalConnectivity(f, vmBar.Name, network.ExternalConnectivityHosts) } }) diff --git a/test/e2e/vm/connectivity.go b/test/e2e/vm/connectivity.go index 2d818ff671..49f4e65251 100644 --- a/test/e2e/vm/connectivity.go +++ b/test/e2e/vm/connectivity.go @@ -77,8 +77,8 @@ var _ = Describe("VirtualMachineConnectivity", Label(precheck.NoPrecheck), func( }) By("Check VMs can reach external network", func() { - network.CheckExternalConnectivity(f, t.VMa.Name, network.ExternalHost, network.HTTPStatusOk) - network.CheckExternalConnectivity(f, t.VMb.Name, network.ExternalHost, network.HTTPStatusOk) + network.CheckExternalConnectivity(f, t.VMa.Name, network.ExternalConnectivityHosts) + network.CheckExternalConnectivity(f, t.VMb.Name, network.ExternalConnectivityHosts) }) By("Check nginx status on VMs", func() { diff --git a/test/e2e/vm/migration.go b/test/e2e/vm/migration.go index 9cb3b65f20..322f9d1386 100644 --- a/test/e2e/vm/migration.go +++ b/test/e2e/vm/migration.go @@ -303,8 +303,8 @@ var _ = Describe("VirtualMachineMigration", Label(precheck.NoPrecheck), func() { By("Check VM can reach external network", func() { util.UntilSSHReady(f, vmBIOS, framework.MiddleTimeout) util.UntilSSHReady(f, vmUEFI, framework.MiddleTimeout) - network.CheckExternalConnectivity(f, vmBIOS.Name, network.ExternalHost, network.HTTPStatusOk) - network.CheckExternalConnectivity(f, vmUEFI.Name, network.ExternalHost, network.HTTPStatusOk) + network.CheckExternalConnectivity(f, vmBIOS.Name, network.ExternalConnectivityHosts) + network.CheckExternalConnectivity(f, vmUEFI.Name, network.ExternalConnectivityHosts) }) }) }) diff --git a/test/e2e/vm/power_state.go b/test/e2e/vm/power_state.go index 0ddc5d03d2..b008ad5edd 100644 --- a/test/e2e/vm/power_state.go +++ b/test/e2e/vm/power_state.go @@ -174,7 +174,7 @@ var _ = Describe("PowerState", Label(precheck.NoPrecheck), func() { By("Check VM can reach external network", func() { err := network.CheckCiliumAgents(context.Background(), f.Kubectl(), t.VM.Name, f.Namespace().Name) Expect(err).NotTo(HaveOccurred(), "Cilium agents check should succeed for VM %s", t.VM.Name) - network.CheckExternalConnectivity(f, t.VM.Name, network.ExternalHost, network.HTTPStatusOk) + network.CheckExternalConnectivity(f, t.VM.Name, network.ExternalConnectivityHosts) }) }, Entry(