Skip to content

Commit 4f3b2d0

Browse files
authored
test: fix VirtualMachineAdditionalNetworkInterfaces test (#2377)
Signed-off-by: Valeriy Khorunzhin <valeriy.khorunzhin@flant.com>
1 parent 9221d82 commit 4f3b2d0

1 file changed

Lines changed: 22 additions & 10 deletions

File tree

test/e2e/vm/additional_network_interfaces.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"encoding/json"
2222
"fmt"
23+
"regexp"
2324
"strings"
2425
"time"
2526

@@ -179,6 +180,7 @@ var _ = Describe("VirtualMachineAdditionalNetworkInterfaces", Label(precheck.NoP
179180

180181
Describe("verifies interface name persistence after removing middle ClusterNetwork", func() {
181182
cloudInitOpt := vm.WithProvisioningUserData(object.UbuntuCloudInit)
183+
memoryOpt := vm.WithMemory(resource.MustParse("512Mi"))
182184

183185
var (
184186
vdRoot *v1alpha2.VirtualDisk
@@ -195,7 +197,7 @@ var _ = Describe("VirtualMachineAdditionalNetworkInterfaces", Label(precheck.NoP
195197

196198
vdRoot = object.NewVDFromCVI("vd-root", ns, object.PrecreatedCVIUbuntu)
197199

198-
vm = buildVMWithNetworks("vm", ns, vdRoot.Name, "192.168.1.20", true, cloudInitOpt)
200+
vm = buildVMWithNetworks("vm", ns, vdRoot.Name, "192.168.1.20", true, cloudInitOpt, memoryOpt)
199201
vm.Spec.Networks = append(vm.Spec.Networks, v1alpha2.NetworksSpec{
200202
Type: v1alpha2.NetworksTypeClusterNetwork,
201203
Name: util.ClusterNetworkName(secondAdditionalInterfaceVLANID),
@@ -326,39 +328,49 @@ runcmd:
326328
func checkConnectivityBetweenVMs(f *framework.Framework, vmFoo, vmBar *v1alpha2.VirtualMachine, vmBarHasMainNetwork bool, vmBarAdditionalIP, vmFooAdditionalIP string) {
327329
GinkgoHelper()
328330

329-
pingCmd := "ping -c 2 -W 2 -w 5 -q %s 2>&1 | grep -o \"[0-9]\\+%%\\s*packet loss\"" // %% -> % in output
330-
expectedOut := "0% packet loss"
331+
pingCmd := "ping -c 2 -W 2 -w 5 -q %s"
332+
expectedPacketLoss := "0"
331333

332334
By(fmt.Sprintf("VM %s should have connectivity to %s (vm-bar)", vmFoo.Name, vmBarAdditionalIP))
333-
checkResultSSHCommand(f, vmFoo.Name, vmFoo.Namespace, fmt.Sprintf(pingCmd, vmBarAdditionalIP), expectedOut)
335+
checkPingPacketLoss(f, vmFoo.Name, vmFoo.Namespace, fmt.Sprintf(pingCmd, vmBarAdditionalIP), expectedPacketLoss)
334336

335337
if vmBarHasMainNetwork {
336338
By(fmt.Sprintf("VM %s should have connectivity to %s (vm-foo)", vmBar.Name, vmFooAdditionalIP))
337-
checkResultSSHCommand(f, vmBar.Name, vmBar.Namespace, fmt.Sprintf(pingCmd, vmFooAdditionalIP), expectedOut)
339+
checkPingPacketLoss(f, vmBar.Name, vmBar.Namespace, fmt.Sprintf(pingCmd, vmFooAdditionalIP), expectedPacketLoss)
338340
}
339341
}
340342

341343
const (
342344
Interval = 1 * time.Second
343345
Timeout = 90 * time.Second
346+
// SSH command timeout should be safely above command-level deadlines (e.g. ping -w 5)
347+
// to avoid killing healthy commands at the timeout boundary.
348+
SSHCommandTimeout = 15 * time.Second
344349
)
345350

346-
func checkResultSSHCommand(f *framework.Framework, vmName, vmNamespace, cmd, equal string) {
351+
func checkPingPacketLoss(f *framework.Framework, vmName, vmNamespace, cmd, expectedPacketLoss string) {
347352
GinkgoHelper()
353+
packetLossRE := regexp.MustCompile(`([0-9]+)%\s*packet loss`)
354+
348355
Eventually(func() (string, error) {
349-
res, err := f.SSHCommand(vmName, vmNamespace, cmd, framework.WithSSHTimeout(5*time.Second))
356+
res, err := f.SSHCommand(vmName, vmNamespace, cmd, framework.WithSSHTimeout(SSHCommandTimeout))
350357
if err != nil {
351358
return "", fmt.Errorf("cmd: %s\nstderr: %w", cmd, err)
352359
}
353-
return strings.TrimSpace(res), nil
354-
}).WithTimeout(Timeout).WithPolling(Interval).Should(Equal(equal))
360+
match := packetLossRE.FindStringSubmatch(res)
361+
if len(match) < 2 {
362+
return "", fmt.Errorf("cmd: %s\nfailed to parse packet loss from output: %q", cmd, strings.TrimSpace(res))
363+
}
364+
365+
return match[1], nil
366+
}).WithTimeout(Timeout).WithPolling(Interval).Should(Equal(expectedPacketLoss))
355367
}
356368

357369
func checkLastInterfaceName(f *framework.Framework, vmName, vmNamespace, expected string) {
358370
GinkgoHelper()
359371
Eventually(func() (string, error) {
360372
cmd := "ip -j link show"
361-
result, err := f.SSHCommand(vmName, vmNamespace, cmd, framework.WithSSHTimeout(5*time.Second))
373+
result, err := f.SSHCommand(vmName, vmNamespace, cmd, framework.WithSSHTimeout(SSHCommandTimeout))
362374
if err != nil {
363375
return "", fmt.Errorf("failed to execute command: %w: %s", err, result)
364376
}

0 commit comments

Comments
 (0)