Repository: kubevirt/kubevirt
Pull request #14230: testsuite: disable guest graphics by default
Author: login: jean-edouard
Labels: name: size/M
name: area/virtctl
name: release-note-none
description: Denotes a PR that doesn't merit a release note.
name: lgtm
description: Indicates that a PR is ready to be merged.
name: approved
description: Indicates a PR has been approved by an approver from all required OWNERS files.
name: dco-signoff: yes
description: Indicates the PR's author has DCO signed all their commits.
name: sig/compute
name: sig/testing
Created: 2025-03-13T14:47:12Z | Merged: 2025-03-17T01:21:31Z

### What this PR does
Before this PR:
Every VM started by e2e tests has a graphics card, which costs a lot to emulate and drive, when the vast majority of tests don't need graphics.

After this PR:
No graphics by default.

<!-- (optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: -->
Fixes #

### Why we need it and why it was done in this way
The following tradeoffs were made:

The following alternatives were considered:

Links to places where the discussion took place: <!-- optional: slack, other GH issue, mailinglist, ... -->

### Special notes for your reviewer

<!-- optional -->

### Checklist

This checklist is not enforcing, but it's a reminder of items that could be relevant to every PR.
Approvers are expected to review this list.

- [ ] Design: A [design document](https://github.com/kubevirt/community/tree/main/design-proposals) was considered and is present (link) or not required
- [ ] PR: The PR description is expressive enough and will help future contributors
- [ ] Code: [Write code that humans can understand](https://en.wikiquote.org/wiki/Martin_Fowler#code-for-humans) and [Keep it simple](https://en.wikipedia.org/wiki/KISS_principle)
- [ ] Refactor: You have [left the code cleaner than you found it (Boy Scout Rule)](https://learning.oreilly.com/library/view/97-things-every/9780596809515/ch08.html)
- [ ] Upgrade: Impact of this change on upgrade flows was considered and addressed if required
- [ ] Testing: New code requires [new unit tests](https://github.com/kubevirt/kubevirt/blob/main/docs/reviewer-guide.md#when-is-a-pr-good-enough). New features and bug fixes require at least on e2e test
- [ ] Documentation: A [user-guide update](https://github.com/kubevirt/user-guide/) was considered and is present (link) or not required. You want a user-guide update if it's a user facing feature / API change.
- [ ] Community: Announcement to [kubevirt-dev](https://groups.google.com/g/kubevirt-dev/) was considered

### Release note
<!--  Write your release note:
1. Enter your extended release note in the below block. If the PR requires additional action from users switching to the new release, include the string "action required".
2. If no release note is required, just write "NONE".
-->
```release-note
NONE
```




Diff:
diff --git a/pkg/libvmi/devices.go b/pkg/libvmi/devices.go
index 8303edf9390f..80a93122622e 100644
--- a/pkg/libvmi/devices.go
+++ b/pkg/libvmi/devices.go
@@ -33,3 +33,9 @@ func WithTablet(name string, bus v1.InputBus) Option {
 		)
 	}
 }
+
+func WithAutoattachGraphicsDevice(enable bool) Option {
+	return func(vmi *v1.VirtualMachineInstance) {
+		vmi.Spec.Domain.Devices.AutoattachGraphicsDevice = &enable
+	}
+}
diff --git a/tests/compute/subresources/expandspec.go b/tests/compute/subresources/expandspec.go
index c5480684fee5..e80bad891bd5 100644
--- a/tests/compute/subresources/expandspec.go
+++ b/tests/compute/subresources/expandspec.go
@@ -215,7 +215,7 @@ var _ = Describe(compute.SIG("ExpandSpec subresource", func() {
 			var err error
 			preference = instancetypebuilder.NewPreference()
 			preference.Spec.Devices = &instancetypev1beta1.DevicePreferences{
-				PreferredAutoattachGraphicsDevice: pointer.P(true),
+				PreferredAutoattachSerialConsole: pointer.P(true),
 			}
 			preference, err = virtClient.VirtualMachinePreference(testsuite.GetTestNamespace(preference)).
 				Create(context.Background(), preference, metav1.CreateOptions{})
@@ -227,7 +227,7 @@ var _ = Describe(compute.SIG("ExpandSpec subresource", func() {
 
 			clusterPreference = instancetypebuilder.NewClusterPreference()
 			clusterPreference.Spec.Devices = &instancetypev1beta1.DevicePreferences{
-				PreferredAutoattachGraphicsDevice: pointer.P(true),
+				PreferredAutoattachSerialConsole: pointer.P(true),
 			}
 			clusterPreference, err = virtClient.VirtualMachineClusterPreference().
 				Create(context.Background(), clusterPreference, metav1.CreateOptions{})
@@ -271,7 +271,7 @@ var _ = Describe(compute.SIG("ExpandSpec subresource", func() {
 					GetWithExpandedSpec(context.Background(), vm.GetName())
 				Expect(err).ToNot(HaveOccurred())
 				Expect(expandedVm.Spec.Preference).To(BeNil(), "Expanded VM should not have InstancetypeMatcher")
-				Expect(*expandedVm.Spec.Template.Spec.Domain.Devices.AutoattachGraphicsDevice).To(BeTrue(), "VM should have preference expanded")
+				Expect(*expandedVm.Spec.Template.Spec.Domain.Devices.AutoattachSerialConsole).To(BeTrue(), "VM should have preference expanded")
 			},
 				Entry("with VirtualMachinePreference", preferenceMatcherFn),
 				Entry("with VirtualMachineClusterPreference", clusterPreferenceMatcherFn),
@@ -296,7 +296,7 @@ var _ = Describe(compute.SIG("ExpandSpec subresource", func() {
 				expandedVm, err := virtClient.ExpandSpec(testsuite.GetTestNamespace(vm)).ForVirtualMachine(vm)
 				Expect(err).ToNot(HaveOccurred())
 				Expect(expandedVm.Spec.Preference).To(BeNil(), "Expanded VM should not have InstancetypeMatcher")
-				Expect(*expandedVm.Spec.Template.Spec.Domain.Devices.AutoattachGraphicsDevice).To(BeTrue(), "VM should have preference expanded")
+				Expect(*expandedVm.Spec.Template.Spec.Domain.Devices.AutoattachSerialConsole).To(BeTrue(), "VM should have preference expanded")
 			},
 				Entry("with VirtualMachinePreference", preferenceMatcherFn),
 				Entry("with VirtualMachineClusterPreference", clusterPreferenceMatcherFn),
diff --git a/tests/mdev_configuration_allocation_test.go b/tests/mdev_configuration_allocation_test.go
index bdfe2104060c..1512606debd3 100644
--- a/tests/mdev_configuration_allocation_test.go
+++ b/tests/mdev_configuration_allocation_test.go
@@ -20,6 +20,7 @@ import (
 	"kubevirt.io/client-go/kubecli"
 
 	virtwait "kubevirt.io/kubevirt/pkg/apimachinery/wait"
+	"kubevirt.io/kubevirt/pkg/libvmi"
 	"kubevirt.io/kubevirt/pkg/virt-config/featuregate"
 
 	"kubevirt.io/kubevirt/tests/console"
@@ -252,7 +253,7 @@ var _ = Describe("[sig-compute]MediatedDevices", Serial, decorators.VGPU, decora
 		It("Should successfully passthrough a mediated device", func() {
 
 			By("Creating a Fedora VMI")
-			vmi = libvmifact.NewFedora(libnet.WithMasqueradeNetworking())
+			vmi = libvmifact.NewFedora(libnet.WithMasqueradeNetworking(), libvmi.WithAutoattachGraphicsDevice(true))
 			vmi.Spec.Domain.Resources.Requests[k8sv1.ResourceMemory] = resource.MustParse("1G")
 			vGPUs := []v1.GPU{
 				{
@@ -333,7 +334,7 @@ var _ = Describe("[sig-compute]MediatedDevices", Serial, decorators.VGPU, decora
 			libnode.AddLabelToNode(singleNode.Name, cleanup.TestLabelForNamespace(testsuite.GetTestNamespace(vmi)), mdevTestLabel)
 
 			By("Creating a Fedora VMI")
-			vmi = libvmifact.NewFedora(libnet.WithMasqueradeNetworking())
+			vmi = libvmifact.NewFedora(libnet.WithMasqueradeNetworking(), libvmi.WithAutoattachGraphicsDevice(true))
 			vmi.Spec.Domain.Resources.Requests[k8sv1.ResourceMemory] = resource.MustParse("1G")
 			vGPUs := []v1.GPU{
 				{
diff --git a/tests/testsuite/fixture.go b/tests/testsuite/fixture.go
index 033fa4be8e61..c9329d90b9e6 100644
--- a/tests/testsuite/fixture.go
+++ b/tests/testsuite/fixture.go
@@ -159,6 +159,7 @@ func BeforeTestSuiteSetup(_ []byte) {
 
 	libvmifact.RegisterArchitecture(Arch)
 	libvmi.RegisterDefaultOption(addTestAnnotation)
+	libvmi.RegisterDefaultOption(libvmi.WithAutoattachGraphicsDevice(false))
 }
 
 func EnsureKubevirtReady() {
diff --git a/tests/virt-handler_test.go b/tests/virt-handler_test.go
index 96b4353ba290..3c2cc5259be8 100644
--- a/tests/virt-handler_test.go
+++ b/tests/virt-handler_test.go
@@ -26,23 +26,21 @@ import (
 	"strings"
 	"time"
 
-	kvcorev1 "kubevirt.io/client-go/kubevirt/typed/core/v1"
-
-	"kubevirt.io/kubevirt/tests/decorators"
-	"kubevirt.io/kubevirt/tests/framework/kubevirt"
-	"kubevirt.io/kubevirt/tests/framework/matcher"
-	"kubevirt.io/kubevirt/tests/libnode"
-	"kubevirt.io/kubevirt/tests/libvmops"
-
-	virt_api "kubevirt.io/kubevirt/pkg/virt-api"
-
 	. "github.com/onsi/ginkgo/v2"
 	. "github.com/onsi/gomega"
 
 	v1 "kubevirt.io/api/core/v1"
+	kvcorev1 "kubevirt.io/client-go/kubevirt/typed/core/v1"
 
+	"kubevirt.io/kubevirt/pkg/libvmi"
+	virt_api "kubevirt.io/kubevirt/pkg/virt-api"
+	"kubevirt.io/kubevirt/tests/decorators"
+	"kubevirt.io/kubevirt/tests/framework/kubevirt"
+	"kubevirt.io/kubevirt/tests/framework/matcher"
 	"kubevirt.io/kubevirt/tests/libnet"
+	"kubevirt.io/kubevirt/tests/libnode"
 	"kubevirt.io/kubevirt/tests/libvmifact"
+	"kubevirt.io/kubevirt/tests/libvmops"
 )
 
 var _ = Describe("[sig-compute]virt-handler", decorators.SigCompute, func() {
@@ -94,7 +92,7 @@ var _ = Describe("[sig-compute]virt-handler", decorators.SigCompute, func() {
 		}
 
 		By("Running the VMI")
-		vmi := libvmifact.NewFedora(libnet.WithMasqueradeNetworking())
+		vmi := libvmifact.NewFedora(libnet.WithMasqueradeNetworking(), libvmi.WithAutoattachGraphicsDevice(true))
 		vmi = libvmops.RunVMIAndExpectLaunch(vmi, 30)
 
 		By("VMI has the guest agent connected condition")
diff --git a/tests/virtctl/vnc.go b/tests/virtctl/vnc.go
index aadc494dba8c..56a4e99b0ba7 100644
--- a/tests/virtctl/vnc.go
+++ b/tests/virtctl/vnc.go
@@ -38,6 +38,7 @@ import (
 
 	v1 "kubevirt.io/api/core/v1"
 
+	"kubevirt.io/kubevirt/pkg/libvmi"
 	"kubevirt.io/kubevirt/tests/decorators"
 	"kubevirt.io/kubevirt/tests/framework/kubevirt"
 	"kubevirt.io/kubevirt/tests/libvmifact"
@@ -50,7 +51,7 @@ var _ = Describe(SIG("[sig-compute]VNC", decorators.SigCompute, decorators.WgArm
 
 	BeforeEach(func() {
 		var err error
-		vmi = libvmifact.NewGuestless()
+		vmi = libvmifact.NewGuestless(libvmi.WithAutoattachGraphicsDevice(true))
 		vmi, err = kubevirt.Client().VirtualMachineInstance(testsuite.GetTestNamespace(vmi)).
 			Create(context.Background(), vmi, metav1.CreateOptions{})
 		Expect(err).ToNot(HaveOccurred())
diff --git a/tests/vmi_configuration_test.go b/tests/vmi_configuration_test.go
index 78f3fc129962..4912ca54a1ef 100644
--- a/tests/vmi_configuration_test.go
+++ b/tests/vmi_configuration_test.go
@@ -310,7 +310,7 @@ var _ = Describe("[sig-compute]Configurations", decorators.SigCompute, func() {
 					}
 				}
 				Expect(computeContainer).ToNot(BeNil(), "could not find the compute container")
-				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(416)))
+				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(399)))
 			})
 			It("[test_id:4624]should set a correct memory units", func() {
 				vmi := libvmifact.NewAlpine(
diff --git a/tests/vmi_headless_test.go b/tests/vmi_headless_test.go
index 9bf097013621..d9c5022f514b 100644
--- a/tests/vmi_headless_test.go
+++ b/tests/vmi_headless_test.go
@@ -28,8 +28,6 @@ import (
 	. "github.com/onsi/ginkgo/v2"
 	. "github.com/onsi/gomega"
 
-	v1 "kubevirt.io/api/core/v1"
-
 	"kubevirt.io/kubevirt/tests/console"
 	"kubevirt.io/kubevirt/tests/libvmifact"
 )
@@ -41,7 +39,7 @@ var _ = Describe("[rfe_id:609][sig-compute]VMIheadless", decorators.SigCompute,
 		Context("with headless", func() {
 
 			It("[test_id:709][posneg:positive]should connect to console", func() {
-				vmi := libvmops.RunVMIAndExpectLaunch(libvmifact.NewAlpine(withAutoattachGraphicsDevice(false)), 30)
+				vmi := libvmops.RunVMIAndExpectLaunch(libvmifact.NewAlpine(libvmi.WithAutoattachGraphicsDevice(false)), 30)
 
 				By("checking that console works")
 				Expect(console.LoginToAlpine(vmi)).To(Succeed())
@@ -51,9 +49,3 @@ var _ = Describe("[rfe_id:609][sig-compute]VMIheadless", decorators.SigCompute,
 	})
 
 })
-
-func withAutoattachGraphicsDevice(enable bool) libvmi.Option {
-	return func(vmi *v1.VirtualMachineInstance) {
-		vmi.Spec.Domain.Devices.AutoattachGraphicsDevice = &enable
-	}
-}
diff --git a/tests/vmi_lifecycle_test.go b/tests/vmi_lifecycle_test.go
index 3338c9e3b6e4..0580a114bc28 100644
--- a/tests/vmi_lifecycle_test.go
+++ b/tests/vmi_lifecycle_test.go
@@ -1428,7 +1428,7 @@ var _ = Describe("[rfe_id:273][crit:high][vendor:cnv-qe@redhat.com][level:compon
 		})
 
 		It("[test_id:3083][test_id:3084]should be able to connect to serial console and VNC", func() {
-			vmi := libvmops.RunVMIAndExpectLaunch(libvmifact.NewCirros(), 90)
+			vmi := libvmops.RunVMIAndExpectLaunch(libvmifact.NewCirros(libvmi.WithAutoattachGraphicsDevice(true)), 90)
 
 			By("Pausing the VMI")
 			err := kubevirt.Client().VirtualMachineInstance(vmi.Namespace).Pause(context.Background(), vmi.Name, &v1.PauseOptions{})
diff --git a/tests/vnc_test.go b/tests/vnc_test.go
index 0f2faf8207a1..0d044c432182 100644
--- a/tests/vnc_test.go
+++ b/tests/vnc_test.go
@@ -44,6 +44,7 @@ import (
 	"kubevirt.io/client-go/log"
 	"kubevirt.io/client-go/subresources"
 
+	"kubevirt.io/kubevirt/pkg/libvmi"
 	"kubevirt.io/kubevirt/tests/framework/kubevirt"
 	"kubevirt.io/kubevirt/tests/libvmifact"
 	"kubevirt.io/kubevirt/tests/libwait"
@@ -56,7 +57,7 @@ var _ = Describe("[rfe_id:127][crit:medium][vendor:cnv-qe@redhat.com][level:comp
 	Describe("[rfe_id:127][crit:medium][vendor:cnv-qe@redhat.com][level:component]A new VirtualMachineInstance", func() {
 		BeforeEach(func() {
 			var err error
-			vmi = libvmifact.NewGuestless()
+			vmi = libvmifact.NewGuestless(libvmi.WithAutoattachGraphicsDevice(true))
 			vmi, err = kubevirt.Client().VirtualMachineInstance(testsuite.GetTestNamespace(vmi)).Create(context.Background(), vmi, metav1.CreateOptions{})
 			Expect(err).ToNot(HaveOccurred())
 			vmi = libwait.WaitForSuccessfulVMIStart(vmi)


Reviews:
user: login: 0xFelix
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-14T10:19:52Z
user: login: jean-edouard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-14T10:58:06Z
user: login: jean-edouard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-14T11:00:02Z
user: login: 0xFelix
body: /lgtm
/retest
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-14T14:02:12Z
user: login: EdDev
body: > Every VM started by e2e tests has a graphics card, which costs a lot to emulate and drive, when the vast majority of tests don't need graphics.

I guess the e2e tests reflect well reality and we are wasting a lot of resources to most of our users, requiring them to opt-out in order to save resources and time.
But we cannot change the API and its defaults at this stage without breaking users.
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-16T17:46:43Z
user: login: jean-edouard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-16T19:09:50Z
user: login: jean-edouard
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-16T19:10:12Z
user: login: EdDev
body: Thanks!
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-16T19:25:26Z

Review comments:
diff_hunk: @@ -94,7 +92,7 @@ var _ = Describe("[sig-compute]virt-handler", decorators.SigCompute, func() {
 		}
 
 		By("Running the VMI")
-		vmi := libvmifact.NewFedora(libnet.WithMasqueradeNetworking())
+		vmi := libvmifact.NewFedora(libnet.WithMasqueradeNetworking(), libvmi.WithAutoattachGraphicsDevice(true))
path: tests/virt-handler_test.go
user: login: 0xFelix
body: Guest agent fails without graphics devices?
created_at: 2025-03-14T10:17:14Z
author_association: MEMBER
diff_hunk: @@ -310,7 +310,7 @@ var _ = Describe("[sig-compute]Configurations", decorators.SigCompute, func() {
 					}
 				}
 				Expect(computeContainer).ToNot(BeNil(), "could not find the compute container")
-				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(416)))
+				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(399)))
path: tests/vmi_configuration_test.go
user: login: 0xFelix
body: IMO that's a weird metric to assert on. How does it relate to `should report 3 cpu cores under guest OS`?
created_at: 2025-03-14T10:19:31Z
author_association: MEMBER
diff_hunk: @@ -94,7 +92,7 @@ var _ = Describe("[sig-compute]virt-handler", decorators.SigCompute, func() {
 		}
 
 		By("Running the VMI")
-		vmi := libvmifact.NewFedora(libnet.WithMasqueradeNetworking())
+		vmi := libvmifact.NewFedora(libnet.WithMasqueradeNetworking(), libvmi.WithAutoattachGraphicsDevice(true))
path: tests/virt-handler_test.go
user: login: jean-edouard
body: No, but part of the test is to ensure that VNC works.
created_at: 2025-03-14T10:58:06Z
author_association: CONTRIBUTOR
diff_hunk: @@ -310,7 +310,7 @@ var _ = Describe("[sig-compute]Configurations", decorators.SigCompute, func() {
 					}
 				}
 				Expect(computeContainer).ToNot(BeNil(), "could not find the compute container")
-				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(416)))
+				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(399)))
path: tests/vmi_configuration_test.go
user: login: jean-edouard
body: Each core adds a bit of memory overhead IIRC... We just request 16MiB less memory in no-graphics.
created_at: 2025-03-14T11:00:02Z
author_association: CONTRIBUTOR
diff_hunk: @@ -41,7 +39,7 @@ var _ = Describe("[rfe_id:609][sig-compute]VMIheadless", decorators.SigCompute,
 		Context("with headless", func() {
 
 			It("[test_id:709][posneg:positive]should connect to console", func() {
-				vmi := libvmops.RunVMIAndExpectLaunch(libvmifact.NewAlpine(withAutoattachGraphicsDevice(false)), 30)
+				vmi := libvmops.RunVMIAndExpectLaunch(libvmifact.NewAlpine(libvmi.WithAutoattachGraphicsDevice(false)), 30)
path: tests/vmi_headless_test.go
user: login: EdDev
body: It is intentional to explicitly set the already optimized default false value?
created_at: 2025-03-16T17:26:23Z
author_association: MEMBER
diff_hunk: @@ -310,7 +310,7 @@ var _ = Describe("[sig-compute]Configurations", decorators.SigCompute, func() {
 					}
 				}
 				Expect(computeContainer).ToNot(BeNil(), "could not find the compute container")
-				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(416)))
+				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(399)))
path: tests/vmi_configuration_test.go
user: login: EdDev
body: Magic number alert.
created_at: 2025-03-16T17:28:15Z
author_association: MEMBER
diff_hunk: @@ -41,7 +39,7 @@ var _ = Describe("[rfe_id:609][sig-compute]VMIheadless", decorators.SigCompute,
 		Context("with headless", func() {
 
 			It("[test_id:709][posneg:positive]should connect to console", func() {
-				vmi := libvmops.RunVMIAndExpectLaunch(libvmifact.NewAlpine(withAutoattachGraphicsDevice(false)), 30)
+				vmi := libvmops.RunVMIAndExpectLaunch(libvmifact.NewAlpine(libvmi.WithAutoattachGraphicsDevice(false)), 30)
path: tests/vmi_headless_test.go
user: login: jean-edouard
body: This being a headless test, it makes sense for it to ensure graphics are disabled.
If we ever changed the default back to true we'd want to make sure it stays false here.
created_at: 2025-03-16T19:09:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -310,7 +310,7 @@ var _ = Describe("[sig-compute]Configurations", decorators.SigCompute, func() {
 					}
 				}
 				Expect(computeContainer).ToNot(BeNil(), "could not find the compute container")
-				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(416)))
+				Expect(computeContainer.Resources.Requests.Memory().ToDec().ScaledValue(resource.Mega)).To(Equal(int64(399)))
path: tests/vmi_configuration_test.go
user: login: jean-edouard
body: Indeed
created_at: 2025-03-16T19:10:12Z
author_association: CONTRIBUTOR

PR comments:
user: login: kubevirt-bot
created_at: 2025-03-13T14:47:15Z
body: Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with `/test all`
author_association: CONTRIBUTOR
user: login: jean-edouard
created_at: 2025-03-13T14:47:19Z
body: /test all
author_association: CONTRIBUTOR
user: login: jean-edouard
created_at: 2025-03-13T17:25:53Z
body: /test all
author_association: CONTRIBUTOR
user: login: jean-edouard
created_at: 2025-03-13T20:26:33Z
body: 2 hours and 3 minutes for the [network lane](https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/14230/pull-kubevirt-e2e-k8s-1.32-sig-network/1900236910597509120), looks promising! :)
author_association: CONTRIBUTOR
user: login: jean-edouard
created_at: 2025-03-14T01:00:43Z
body: /retest
author_association: CONTRIBUTOR
user: login: vladikr
created_at: 2025-03-14T12:28:09Z
body: > 2 hours and 3 minutes for the [network lane](https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/14230/pull-kubevirt-e2e-k8s-1.32-sig-network/1900236910597509120), looks promising! :)

how long did it take before?
author_association: MEMBER
user: login: jean-edouard
created_at: 2025-03-14T12:40:41Z
body: > > 2 hours and 3 minutes for the [network lane](https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/14230/pull-kubevirt-e2e-k8s-1.32-sig-network/1900236910597509120), looks promising! :)
> 
> how long did it take before?

[More](https://prow.ci.kubevirt.io/job-history/gs/kubevirt-prow/pr-logs/directory/pull-kubevirt-e2e-k8s-1.32-sig-network). Not an exact science, last nights tests were all really slow for some reason, but on local tests with a graphics-less Fedora VM I saw a time save of almost 2 seconds to get to login prompt. It adds up, and also saves CPU and memory.
author_association: CONTRIBUTOR
user: login: vladikr
created_at: 2025-03-14T13:31:21Z
body: > > > 2 hours and 3 minutes for the [network lane](https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/14230/pull-kubevirt-e2e-k8s-1.32-sig-network/1900236910597509120), looks promising! :)
> > 
> > 
> > how long did it take before?
> 
> [More](https://prow.ci.kubevirt.io/job-history/gs/kubevirt-prow/pr-logs/directory/pull-kubevirt-e2e-k8s-1.32-sig-network). Not an exact science, last nights tests were all really slow for some reason, but on local tests with a graphics-less Fedora VM I saw a time save of almost 2 seconds to get to login prompt. It adds up, and also saves CPU and memory.

Yes, I would be surprised if there was a number. Regardless, it seems like the right thing to do. And we still have explicit tests to verify that graphics work. 
/approve



author_association: MEMBER
user: login: kubevirt-bot
created_at: 2025-03-14T13:32:34Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubevirt/kubevirt/pull/14230#issuecomment-2724722077" title="Approved">vladikr</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubevirt%2Fkubevirt).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[pkg/libvmi/OWNERS](https://github.com/kubevirt/kubevirt/blob/main/pkg/libvmi/OWNERS)~~ [vladikr]
- ~~[tests/OWNERS](https://github.com/kubevirt/kubevirt/blob/main/tests/OWNERS)~~ [vladikr]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: CONTRIBUTOR
user: login: kubevirt-commenter-bot
created_at: 2025-03-14T14:02:18Z
body: Required labels detected, running phase 2 presubmits:
/test pull-kubevirt-e2e-windows2016
/test pull-kubevirt-e2e-kind-1.30-vgpu
/test pull-kubevirt-e2e-kind-sriov
/test pull-kubevirt-e2e-k8s-1.32-ipv6-sig-network
/test pull-kubevirt-e2e-k8s-1.30-sig-network
/test pull-kubevirt-e2e-k8s-1.30-sig-storage
/test pull-kubevirt-e2e-k8s-1.30-sig-compute
/test pull-kubevirt-e2e-k8s-1.30-sig-operator
/test pull-kubevirt-e2e-k8s-1.31-sig-network
/test pull-kubevirt-e2e-k8s-1.31-sig-storage
/test pull-kubevirt-e2e-k8s-1.31-sig-compute
/test pull-kubevirt-e2e-k8s-1.31-sig-operator

author_association: NONE
user: login: kubevirt-commenter-bot
created_at: 2025-03-15T00:47:23Z
body: /retest-required
This bot automatically retries required jobs that failed/flaked on approved PRs.
Silence the bot with an `/lgtm cancel` or `/hold` comment for consistent failures.
author_association: NONE
user: login: jean-edouard
created_at: 2025-03-15T18:06:42Z
body: @0xFelix I just added missing graphics to 2 vgpu tests, please consider re-lgtm-ing. Thanks!
author_association: CONTRIBUTOR
user: login: kubevirt-commenter-bot
created_at: 2025-03-16T19:25:32Z
body: Required labels detected, running phase 2 presubmits:
/test pull-kubevirt-e2e-windows2016
/test pull-kubevirt-e2e-kind-1.30-vgpu
/test pull-kubevirt-e2e-kind-sriov
/test pull-kubevirt-e2e-k8s-1.32-ipv6-sig-network
/test pull-kubevirt-e2e-k8s-1.30-sig-network
/test pull-kubevirt-e2e-k8s-1.30-sig-storage
/test pull-kubevirt-e2e-k8s-1.30-sig-compute
/test pull-kubevirt-e2e-k8s-1.30-sig-operator
/test pull-kubevirt-e2e-k8s-1.31-sig-network
/test pull-kubevirt-e2e-k8s-1.31-sig-storage
/test pull-kubevirt-e2e-k8s-1.31-sig-compute
/test pull-kubevirt-e2e-k8s-1.31-sig-operator

author_association: NONE
user: login: kubevirt-bot
created_at: 2025-03-16T23:28:58Z
body: @jean-edouard: The following test **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-kubevirt-check-tests-for-flakes | 3763384d8ebfada48ff4c5075fe4758152d8d54a | [link](https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/14230/pull-kubevirt-check-tests-for-flakes/1900729094140596224) | false | `/test pull-kubevirt-check-tests-for-flakes`

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
author_association: CONTRIBUTOR