Skip to content

Commit

Permalink
Adapt unit tests following slirp hook-sidecar addition
Browse files Browse the repository at this point in the history
Some test were removed because they test unsupported scenrios
(e.g.: multiple slirp ifaces), or tests that covered by the
slirp hook-sidecar tests.

Other tests changed to not use slirp as default interface.

Signed-off-by: Or Mergi <ormergi@redhat.com>
  • Loading branch information
ormergi committed Aug 10, 2023
1 parent b5ac32b commit bfd9ef0
Show file tree
Hide file tree
Showing 10 changed files with 27 additions and 173 deletions.
2 changes: 1 addition & 1 deletion pkg/storage/export/export/export_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ var _ = Describe("Export controller", func() {
ServiceInformer: serviceInformer,
DataVolumeInformer: dvInformer,
KubevirtNamespace: "kubevirt",
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
caCertManager: bootstrap.NewFileCertificateManager(certFilePath, keyFilePath),
RouteCache: routeCache,
IngressCache: ingressCache,
Expand Down
2 changes: 1 addition & 1 deletion pkg/storage/export/export/pvc-source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ var _ = Describe("PVC source", func() {
ServiceInformer: serviceInformer,
DataVolumeInformer: dvInformer,
KubevirtNamespace: "kubevirt",
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
caCertManager: bootstrap.NewFileCertificateManager(certFilePath, keyFilePath),
RouteCache: routeCache,
IngressCache: ingressCache,
Expand Down
2 changes: 1 addition & 1 deletion pkg/storage/export/export/vm-source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ var _ = Describe("PVC source", func() {
ServiceInformer: serviceInformer,
DataVolumeInformer: dvInformer,
KubevirtNamespace: "kubevirt",
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
caCertManager: bootstrap.NewFileCertificateManager(certFilePath, keyFilePath),
RouteCache: routeCache,
IngressCache: ingressCache,
Expand Down
2 changes: 1 addition & 1 deletion pkg/storage/export/export/vmsnapshot-source_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ var _ = Describe("VMSnapshot source", func() {
ServiceInformer: serviceInformer,
DataVolumeInformer: dvInformer,
KubevirtNamespace: "kubevirt",
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
caCertManager: bootstrap.NewFileCertificateManager(certFilePath, keyFilePath),
RouteCache: routeCache,
IngressCache: ingressCache,
Expand Down
98 changes: 1 addition & 97 deletions pkg/virt-controller/services/template_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ var _ = Describe("Template", func() {
config,
qemuGid,
"kubevirt/vmexport",
"kubevirt/slirp-hook-sidecar",
)
// Set up mock clients
networkClient := fakenetworkclient.NewSimpleClientset()
Expand Down Expand Up @@ -2788,103 +2789,6 @@ var _ = Describe("Template", func() {
Expect(pod1.Spec.Containers[0].Resources.Requests.Memory().Value()).To(Equal(expectedMemory.Value()))
})
})
Context("with slirp interface", func() {
It("Should have empty port list in the pod manifest", func() {
config, kvInformer, svc = configFactory(defaultArch)
slirpInterface := v1.InterfaceSlirp{}
domain := v1.DomainSpec{
Devices: v1.Devices{
DisableHotplug: true,
},
}
domain.Devices.Interfaces = []v1.Interface{{Name: "testnet", InterfaceBindingMethod: v1.InterfaceBindingMethod{Slirp: &slirpInterface}}}
vmi := v1.VirtualMachineInstance{
ObjectMeta: metav1.ObjectMeta{
Name: "testvmi", Namespace: "default", UID: "1234",
},
Spec: v1.VirtualMachineInstanceSpec{Domain: domain},
}

pod, err := svc.RenderLaunchManifest(&vmi)
Expect(err).ToNot(HaveOccurred())

Expect(pod.Spec.Containers).To(HaveLen(1))
Expect(pod.Spec.Containers[0].Ports).To(BeEmpty())
})
It("Should create a port list in the pod manifest", func() {
config, kvInformer, svc = configFactory(defaultArch)
slirpInterface := v1.InterfaceSlirp{}
ports := []v1.Port{{Name: "http", Port: 80}, {Protocol: "UDP", Port: 80}, {Port: 90}, {Name: "other-http", Port: 80}}
domain := v1.DomainSpec{
Devices: v1.Devices{
DisableHotplug: true,
},
}
domain.Devices.Interfaces = []v1.Interface{{Name: "testnet", Ports: ports, InterfaceBindingMethod: v1.InterfaceBindingMethod{Slirp: &slirpInterface}}}
vmi := v1.VirtualMachineInstance{
ObjectMeta: metav1.ObjectMeta{
Name: "testvmi", Namespace: "default", UID: "1234",
},
Spec: v1.VirtualMachineInstanceSpec{Domain: domain},
}

pod, err := svc.RenderLaunchManifest(&vmi)
Expect(err).ToNot(HaveOccurred())

Expect(pod.Spec.Containers).To(HaveLen(1))
Expect(pod.Spec.Containers[0].Ports).To(HaveLen(4))
Expect(pod.Spec.Containers[0].Ports[0].Name).To(Equal("http"))
Expect(pod.Spec.Containers[0].Ports[0].ContainerPort).To(Equal(int32(80)))
Expect(pod.Spec.Containers[0].Ports[0].Protocol).To(Equal(kubev1.Protocol("TCP")))
Expect(pod.Spec.Containers[0].Ports[1].Name).To(Equal(""))
Expect(pod.Spec.Containers[0].Ports[1].ContainerPort).To(Equal(int32(80)))
Expect(pod.Spec.Containers[0].Ports[1].Protocol).To(Equal(kubev1.Protocol("UDP")))
Expect(pod.Spec.Containers[0].Ports[2].Name).To(Equal(""))
Expect(pod.Spec.Containers[0].Ports[2].ContainerPort).To(Equal(int32(90)))
Expect(pod.Spec.Containers[0].Ports[2].Protocol).To(Equal(kubev1.Protocol("TCP")))
Expect(pod.Spec.Containers[0].Ports[3].Name).To(Equal("other-http"))
Expect(pod.Spec.Containers[0].Ports[3].ContainerPort).To(Equal(int32(80)))
Expect(pod.Spec.Containers[0].Ports[3].Protocol).To(Equal(kubev1.Protocol("TCP")))
})
It("Should create a port list in the pod manifest with multiple interfaces", func() {
config, kvInformer, svc = configFactory(defaultArch)
slirpInterface1 := v1.InterfaceSlirp{}
slirpInterface2 := v1.InterfaceSlirp{}
ports1 := []v1.Port{{Name: "http", Port: 80}}
ports2 := []v1.Port{{Name: "other-http", Port: 80}}
domain := v1.DomainSpec{
Devices: v1.Devices{
DisableHotplug: true,
},
}
domain.Devices.Interfaces = []v1.Interface{
{Name: "testnet",
Ports: ports1,
InterfaceBindingMethod: v1.InterfaceBindingMethod{Slirp: &slirpInterface1}},
{Name: "testnet",
Ports: ports2,
InterfaceBindingMethod: v1.InterfaceBindingMethod{Slirp: &slirpInterface2}}}

vmi := v1.VirtualMachineInstance{
ObjectMeta: metav1.ObjectMeta{
Name: "testvmi", Namespace: "default", UID: "1234",
},
Spec: v1.VirtualMachineInstanceSpec{Domain: domain},
}

pod, err := svc.RenderLaunchManifest(&vmi)
Expect(err).ToNot(HaveOccurred())

Expect(pod.Spec.Containers).To(HaveLen(1))
Expect(pod.Spec.Containers[0].Ports).To(HaveLen(2))
Expect(pod.Spec.Containers[0].Ports[0].Name).To(Equal("http"))
Expect(pod.Spec.Containers[0].Ports[0].ContainerPort).To(Equal(int32(80)))
Expect(pod.Spec.Containers[0].Ports[0].Protocol).To(Equal(kubev1.Protocol("TCP")))
Expect(pod.Spec.Containers[0].Ports[1].Name).To(Equal("other-http"))
Expect(pod.Spec.Containers[0].Ports[1].ContainerPort).To(Equal(int32(80)))
Expect(pod.Spec.Containers[0].Ports[1].Protocol).To(Equal(kubev1.Protocol("TCP")))
})
})

Context("with pod networking", func() {
It("Should require tun device by default", func() {
Expand Down
6 changes: 3 additions & 3 deletions pkg/virt-controller/watch/application_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ var _ = Describe("Application", func() {
app.evacuationController, _ = evacuation.NewEvacuationController(vmiInformer, migrationInformer, nodeInformer, podInformer, recorder, virtClient, config)
app.disruptionBudgetController, _ = disruptionbudget.NewDisruptionBudgetController(vmiInformer, pdbInformer, podInformer, migrationInformer, recorder, virtClient, config)
app.nodeController, _ = NewNodeController(virtClient, nodeInformer, vmiInformer, recorder)
app.vmiController, _ = NewVMIController(services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
app.vmiController, _ = NewVMIController(services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
vmiInformer,
vmInformer,
podInformer,
Expand All @@ -153,7 +153,7 @@ var _ = Describe("Application", func() {
recorder,
virtClient,
config)
app.migrationController, _ = NewMigrationController(services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
app.migrationController, _ = NewMigrationController(services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
vmiInformer,
podInformer,
migrationInformer,
Expand Down Expand Up @@ -196,7 +196,7 @@ var _ = Describe("Application", func() {
_ = app.restoreController.Init()
app.exportController = &export.VMExportController{
Client: virtClient,
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
TemplateService: services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
VMExportInformer: vmExportInformer,
PVCInformer: pvcInformer,
PodInformer: podInformer,
Expand Down
2 changes: 1 addition & 1 deletion pkg/virt-controller/watch/migration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ var _ = Describe("Migration watcher", func() {
config, _, _ := testutils.NewFakeClusterConfigUsingKVConfig(kvConfig)

controller, _ = NewMigrationController(
services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
vmiInformer,
podInformer,
migrationInformer,
Expand Down
2 changes: 1 addition & 1 deletion pkg/virt-controller/watch/vmi_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ var _ = Describe("VirtualMachineInstance watcher", func() {
cdiInformer, _ = testutils.NewFakeInformerFor(&cdiv1.CDIConfig{})
cdiConfigInformer, _ = testutils.NewFakeInformerFor(&cdiv1.CDIConfig{})
controller, _ = NewVMIController(
services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h"),
services.NewTemplateService("a", 240, "b", "c", "d", "e", "f", "g", pvcInformer.GetStore(), virtClient, config, qemuGid, "h", "s"),
vmiInformer,
vmInformer,
podInformer,
Expand Down
62 changes: 6 additions & 56 deletions pkg/virt-launcher/virtwrap/converter/converter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2099,42 +2099,6 @@ var _ = Describe("Converter", func() {
Expect(configPortForward(&qemuArg, iface)).To(Succeed())
Expect(qemuArg.Value).To(Equal(fmt.Sprintf("user,id=%s,hostfwd=tcp::80-:80,hostfwd=udp::80-:80", iface.Name)))
})
It("Should create network configuration for slirp device", func() {
v1.SetObjectDefaults_VirtualMachineInstance(vmi)
name := "otherName"
iface := v1.Interface{Name: name, InterfaceBindingMethod: v1.InterfaceBindingMethod{}, Ports: []v1.Port{{Port: 80}, {Port: 80, Protocol: "UDP"}}}
iface.InterfaceBindingMethod.Slirp = &v1.InterfaceSlirp{}
net := v1.DefaultPodNetwork()
net.Name = name
vmi.Spec.Networks = []v1.Network{*net}
vmi.Spec.Domain.Devices.Interfaces = []v1.Interface{iface}

domain := vmiToDomain(vmi, c)
Expect(domain).ToNot(BeNil())
Expect(domain.Spec.QEMUCmd.QEMUArg).To(HaveLen(2))
})
It("Should create two network configuration for slirp device", func() {
v1.SetObjectDefaults_VirtualMachineInstance(vmi)
name1 := "Name"

iface1 := v1.Interface{Name: name1, InterfaceBindingMethod: v1.InterfaceBindingMethod{}, Ports: []v1.Port{{Port: 80}, {Port: 80, Protocol: "UDP"}}}
iface1.InterfaceBindingMethod.Slirp = &v1.InterfaceSlirp{}
net1 := v1.DefaultPodNetwork()
net1.Name = name1

name2 := "otherName"
iface2 := v1.Interface{Name: name2, InterfaceBindingMethod: v1.InterfaceBindingMethod{}, Ports: []v1.Port{{Port: 90}}}
iface2.InterfaceBindingMethod.Slirp = &v1.InterfaceSlirp{}
net2 := v1.DefaultPodNetwork()
net2.Name = name2

vmi.Spec.Networks = []v1.Network{*net1, *net2}
vmi.Spec.Domain.Devices.Interfaces = []v1.Interface{iface1, iface2}

domain := vmiToDomain(vmi, c)
Expect(domain).ToNot(BeNil())
Expect(domain.Spec.QEMUCmd.QEMUArg).To(HaveLen(4))
})
It("Should create two network configuration one for slirp device and one for bridge device", func() {
v1.SetObjectDefaults_VirtualMachineInstance(vmi)
name1 := "Name"
Expand All @@ -2144,23 +2108,14 @@ var _ = Describe("Converter", func() {
net1 := v1.DefaultPodNetwork()
net1.Name = name1

name2 := "otherName"
iface2 := v1.Interface{Name: name2, InterfaceBindingMethod: v1.InterfaceBindingMethod{}, Ports: []v1.Port{{Port: 90}}}
iface2.InterfaceBindingMethod.Slirp = &v1.InterfaceSlirp{}
net2 := v1.DefaultPodNetwork()
net2.Name = name2

vmi.Spec.Networks = []v1.Network{*net1, *net2}
vmi.Spec.Domain.Devices.Interfaces = []v1.Interface{*iface1, iface2}
vmi.Spec.Networks = []v1.Network{*net1}
vmi.Spec.Domain.Devices.Interfaces = []v1.Interface{*iface1}

domain := vmiToDomain(vmi, c)
Expect(domain).ToNot(BeNil())
Expect(domain.Spec.QEMUCmd.QEMUArg).To(HaveLen(2))
Expect(domain.Spec.Devices.Interfaces).To(HaveLen(2))
Expect(domain.Spec.Devices.Interfaces).To(HaveLen(1))
Expect(domain.Spec.Devices.Interfaces[0].Type).To(Equal("ethernet"))
Expect(domain.Spec.Devices.Interfaces[0].Model.Type).To(Equal("virtio-non-transitional"))
Expect(domain.Spec.Devices.Interfaces[1].Type).To(Equal("user"))
Expect(domain.Spec.Devices.Interfaces[1].Model.Type).To(Equal("e1000"))
})
It("Should set domain interface source correctly for multus", func() {
v1.SetObjectDefaults_VirtualMachineInstance(vmi)
Expand Down Expand Up @@ -2257,7 +2212,6 @@ var _ = Describe("Converter", func() {
name1 := "Name"

iface1 := v1.Interface{Name: name1, InterfaceBindingMethod: v1.InterfaceBindingMethod{Masquerade: &v1.InterfaceMasquerade{}}}
iface1.InterfaceBindingMethod.Slirp = &v1.InterfaceSlirp{}
net1 := v1.DefaultPodNetwork()
net1.Name = name1

Expand All @@ -2274,7 +2228,6 @@ var _ = Describe("Converter", func() {
name1 := "Name"

iface1 := v1.Interface{Name: name1, InterfaceBindingMethod: v1.InterfaceBindingMethod{Masquerade: &v1.InterfaceMasquerade{}}}
iface1.InterfaceBindingMethod.Slirp = &v1.InterfaceSlirp{}
net1 := v1.DefaultPodNetwork()
net1.Name = name1

Expand Down Expand Up @@ -3275,7 +3228,7 @@ var _ = Describe("Converter", func() {
vmi.Spec.Domain.Devices.Rng = &v1.Rng{}
vmi.Spec.Domain.Devices.AutoattachMemBalloon = pointer.BoolPtr(true)
vmi.Spec.Domain.Devices.Interfaces = []v1.Interface{
*v1.DefaultBridgeNetworkInterface(), *v1.DefaultSlirpNetworkInterface(),
*v1.DefaultBridgeNetworkInterface(),
}
vmi.Spec.Networks = []v1.Network{
*v1.DefaultPodNetwork(), *v1.DefaultPodNetwork(),
Expand Down Expand Up @@ -3355,20 +3308,17 @@ var _ = Describe("Converter", func() {
It("should set IOMMU attribute of the virtio-net driver", func() {
domain := vmiToDomain(vmi, c)
Expect(domain).ToNot(BeNil())
Expect(domain.Spec.Devices.Interfaces).To(HaveLen(2))
Expect(domain.Spec.Devices.Interfaces).To(HaveLen(1))
Expect(domain.Spec.Devices.Interfaces[0].Driver).ToNot(BeNil())
Expect(domain.Spec.Devices.Interfaces[0].Driver.IOMMU).To(Equal("on"))
Expect(domain.Spec.Devices.Interfaces[1].Driver).To(BeNil())
})

It("should disable the iPXE option ROM", func() {
domain := vmiToDomain(vmi, c)
Expect(domain).ToNot(BeNil())
Expect(domain.Spec.Devices.Interfaces).To(HaveLen(2))
Expect(domain.Spec.Devices.Interfaces).To(HaveLen(1))
Expect(domain.Spec.Devices.Interfaces[0].Rom).ToNot(BeNil())
Expect(domain.Spec.Devices.Interfaces[0].Rom.Enabled).To(Equal("no"))
Expect(domain.Spec.Devices.Interfaces[1].Rom).ToNot(BeNil())
Expect(domain.Spec.Devices.Interfaces[1].Rom.Enabled).To(Equal("no"))
})
})

Expand Down
22 changes: 11 additions & 11 deletions pkg/virt-launcher/virtwrap/converter/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,17 +106,17 @@ func CreateDomainInterfaces(vmi *v1.VirtualMachineInstance, domain *api.Domain,
domainIface.Rom = &api.Rom{Enabled: "no"}
}
} else if iface.Slirp != nil {
domainIface.Type = "user"

// Create network interface
initializeQEMUCmdAndQEMUArg(domain)

// TODO: (seba) Need to change this if multiple interface can be connected to the same network
// append the ports from all the interfaces connected to the same network
err := createSlirpNetwork(iface, *net, domain)
if err != nil {
return nil, err
}
//domainIface.Type = "user"
//
//// Create network interface
//initializeQEMUCmdAndQEMUArg(domain)
//
//// TODO: (seba) Need to change this if multiple interface can be connected to the same network
//// append the ports from all the interfaces connected to the same network
//err := createSlirpNetwork(iface, *net, domain)
//if err != nil {
// return nil, err
//}
} else if iface.Macvtap != nil {
if net.Multus == nil {
return nil, fmt.Errorf("macvtap interface %s requires Multus meta-cni", iface.Name)
Expand Down

0 comments on commit bfd9ef0

Please sign in to comment.