Skip to content

Commit

Permalink
libvmi: Promote libvmi from e2e usages to the root pkg/
Browse files Browse the repository at this point in the history
`libvmi` has been widely used by source code outside e2e tests.
As it serves now both unit tests and e2e tests, it fits to exist in a
location that fits both parties.

By promoting `libvmi` at the root `pkg/`, we allow both unit and e2e
tests to use its services.

While all libvmi builders moved, the factory was left in the e2e test.
The factory package has been renamed to `libvmifact` and used solely in
the e2e tests per need.

Signed-off-by: Edward Haas <edwardh@redhat.com>
  • Loading branch information
EdDev committed Mar 16, 2024
1 parent 3f3c10e commit 9ef681e
Show file tree
Hide file tree
Showing 152 changed files with 886 additions and 678 deletions.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -209,14 +209,15 @@ lint:
if [ $$(wc -l < tests/utils.go) -gt 2027 ]; then echo >&2 "do not make tests/utils longer"; exit 1; fi
hack/dockerized "golangci-lint run --timeout 20m --verbose \
pkg/instancetype/... \
pkg/libvmi/... \
pkg/network/namescheme/... \
pkg/network/domainspec/... \
pkg/network/sriov/... \
tests/console/... \
tests/libnet/... \
tests/libnode/... \
tests/libpod/... \
tests/libvmi/... \
tests/libvmifact/... \
&& \
golangci-lint run --disable-all -E ginkgolinter --timeout 10m --verbose --no-config \
./pkg/... \
Expand Down
5 changes: 1 addition & 4 deletions tests/libvmi/BUILD.bazel → pkg/libvmi/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,21 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = [
"architecture.go",
"cloudinit.go",
"config.go",
"cpu.go",
"factory.go",
"memory.go",
"network.go",
"selector.go",
"storage.go",
"vm.go",
"vmi.go",
],
importpath = "kubevirt.io/kubevirt/tests/libvmi",
importpath = "kubevirt.io/kubevirt/pkg/libvmi",
visibility = ["//visibility:public"],
deps = [
"//pkg/pointer:go_default_library",
"//staging/src/kubevirt.io/api/core/v1:go_default_library",
"//tests/containerdisk:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
Expand Down
File renamed without changes.
5 changes: 1 addition & 4 deletions tests/libvmi/README.md → pkg/libvmi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ libvmi is a VMI manifest composer.

### Motivation

While reading code, especially e2e test code, a difficulty has been
While reading code, especially test code, a difficulty has been
observed to understand in an easy and clear manner, what is the content
of a VMI object. In a long chain of function call stack, different portions
of the VMI got updated, sometime overriding previously set fields.
Expand Down Expand Up @@ -60,9 +60,6 @@ and should not be overused. It would be better to just ask to change the rules.
- VMI: `vmi.go` contains the most basic tooling to start building VMI manifests.
It contains the most basic factory (`New`), the definition of how the builders
look like and any other helper that serves the whole libvmi package.
- Factory: `factory.go` file contains commonly used base VMI specs.
Users will usually pick one factory to use and then add different
builders to continue building the spec.
- Subject builders: Various files in which builders and defined.
These files should group builders with some commonality, such that they
can be easily found. With time, the grouping and naming may change
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion pkg/network/netbinding/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ go_test(
deps = [
":go_default_library",
"//pkg/hooks:go_default_library",
"//pkg/libvmi:go_default_library",
"//staging/src/kubevirt.io/api/core/v1:go_default_library",
"//staging/src/kubevirt.io/client-go/testutils:go_default_library",
"//tests/libvmi:go_default_library",
"//vendor/github.com/onsi/ginkgo/v2:go_default_library",
"//vendor/github.com/onsi/gomega:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
Expand Down
3 changes: 1 addition & 2 deletions pkg/network/netbinding/netbinding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,8 @@ import (
v1 "kubevirt.io/api/core/v1"

"kubevirt.io/kubevirt/pkg/hooks"
"kubevirt.io/kubevirt/pkg/libvmi"
"kubevirt.io/kubevirt/pkg/network/netbinding"

"kubevirt.io/kubevirt/tests/libvmi"
)

var _ = Describe("Network Binding", func() {
Expand Down
2 changes: 1 addition & 1 deletion pkg/network/vmispec/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ go_test(
],
deps = [
":go_default_library",
"//pkg/libvmi:go_default_library",
"//staging/src/kubevirt.io/api/core/v1:go_default_library",
"//staging/src/kubevirt.io/client-go/testutils:go_default_library",
"//tests/libvmi:go_default_library",
"//vendor/github.com/onsi/ginkgo/v2:go_default_library",
"//vendor/github.com/onsi/gomega:go_default_library",
],
Expand Down
2 changes: 1 addition & 1 deletion pkg/network/vmispec/interface_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ import (
. "github.com/onsi/gomega"
v1 "kubevirt.io/api/core/v1"

"kubevirt.io/kubevirt/pkg/libvmi"
netvmispec "kubevirt.io/kubevirt/pkg/network/vmispec"
"kubevirt.io/kubevirt/tests/libvmi"
)

var _ = Describe("VMI network spec", func() {
Expand Down
2 changes: 1 addition & 1 deletion pkg/virt-controller/network/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,12 @@ go_test(
],
embed = [":go_default_library"],
deps = [
"//pkg/libvmi:go_default_library",
"//pkg/network/vmispec:go_default_library",
"//pkg/testutils:go_default_library",
"//pkg/virt-config:go_default_library",
"//staging/src/kubevirt.io/api/core/v1:go_default_library",
"//staging/src/kubevirt.io/client-go/testutils:go_default_library",
"//tests/libvmi:go_default_library",
"//vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1:go_default_library",
"//vendor/github.com/onsi/ginkgo/v2:go_default_library",
"//vendor/github.com/onsi/gomega:go_default_library",
Expand Down
2 changes: 1 addition & 1 deletion pkg/virt-controller/network/hotplug_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ import (

v1 "kubevirt.io/api/core/v1"

"kubevirt.io/kubevirt/pkg/libvmi"
"kubevirt.io/kubevirt/pkg/network/vmispec"
"kubevirt.io/kubevirt/pkg/virt-controller/network"
"kubevirt.io/kubevirt/tests/libvmi"
)

var _ = Describe("Network interface hot{un}plug", func() {
Expand Down
2 changes: 1 addition & 1 deletion pkg/virt-controller/watch/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ go_test(
"//staging/src/kubevirt.io/client-go/kubecli:go_default_library",
"//staging/src/kubevirt.io/client-go/log:go_default_library",
"//staging/src/kubevirt.io/client-go/testutils:go_default_library",
"//tests/libvmi:go_default_library",
"//tests/libvmifact:go_default_library",
"//vendor/github.com/emicklei/go-restful/v3:go_default_library",
"//vendor/github.com/evanphx/json-patch:go_default_library",
"//vendor/github.com/golang/mock/gomock:go_default_library",
Expand Down
2 changes: 1 addition & 1 deletion pkg/virt-controller/watch/clone/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ go_test(
],
embed = [":go_default_library"],
deps = [
"//pkg/libvmi:go_default_library",
"//pkg/pointer:go_default_library",
"//pkg/testutils:go_default_library",
"//staging/src/kubevirt.io/api/clone/v1alpha1:go_default_library",
Expand All @@ -50,7 +51,6 @@ go_test(
"//staging/src/kubevirt.io/client-go/generated/kubevirt/clientset/versioned/fake:go_default_library",
"//staging/src/kubevirt.io/client-go/kubecli:go_default_library",
"//staging/src/kubevirt.io/client-go/testutils:go_default_library",
"//tests/libvmi:go_default_library",
"//tests/util:go_default_library",
"//vendor/github.com/evanphx/json-patch:go_default_library",
"//vendor/github.com/golang/mock/gomock:go_default_library",
Expand Down
2 changes: 1 addition & 1 deletion pkg/virt-controller/watch/clone/clone_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@ import (
kubevirtfake "kubevirt.io/client-go/generated/kubevirt/clientset/versioned/fake"
"kubevirt.io/client-go/kubecli"

"kubevirt.io/kubevirt/pkg/libvmi"
"kubevirt.io/kubevirt/pkg/pointer"
"kubevirt.io/kubevirt/pkg/testutils"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/util"
)

Expand Down
2 changes: 1 addition & 1 deletion pkg/virt-controller/watch/topology/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,12 @@ go_test(
],
embed = [":go_default_library"],
deps = [
"//pkg/libvmi:go_default_library",
"//pkg/testutils:go_default_library",
"//pkg/virt-config:go_default_library",
"//staging/src/kubevirt.io/api/core/v1:go_default_library",
"//staging/src/kubevirt.io/client-go/kubecli:go_default_library",
"//staging/src/kubevirt.io/client-go/testutils:go_default_library",
"//tests/libvmi:go_default_library",
"//vendor/github.com/golang/mock/gomock:go_default_library",
"//vendor/github.com/onsi/ginkgo/v2:go_default_library",
"//vendor/github.com/onsi/gomega:go_default_library",
Expand Down
3 changes: 1 addition & 2 deletions pkg/virt-controller/watch/topology/tsc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ import (

v1 "kubevirt.io/api/core/v1"

"kubevirt.io/kubevirt/tests/libvmi"

. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"

"kubevirt.io/kubevirt/pkg/libvmi"
"kubevirt.io/kubevirt/pkg/virt-controller/watch/topology"
)

Expand Down
10 changes: 5 additions & 5 deletions pkg/virt-controller/watch/vsock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
virtv1 "kubevirt.io/api/core/v1"

"kubevirt.io/kubevirt/pkg/controller"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/libvmifact"
)

var _ = Describe("VSOCK", func() {
Expand All @@ -18,7 +18,7 @@ var _ = Describe("VSOCK", func() {
newRandomVMIsWithORWithoutVSOCK := func(totalVMINum, vsockVMINum int) []*virtv1.VirtualMachineInstance {
var vmis []*virtv1.VirtualMachineInstance
for i := 0; i < totalVMINum; i++ {
vmi := libvmi.NewCirros()
vmi := libvmifact.NewCirros()
// NewCirros isn't guaranteed to have a unique name.
vmi.Name = fmt.Sprintf("%s-%d", vmi.Name, i)
vmi.Namespace = "vsock"
Expand Down Expand Up @@ -91,12 +91,12 @@ var _ = Describe("VSOCK", func() {
Context("CIDs iteration", func() {
It("should wrap arround if reaches the maximum", func() {
m.randCID = func() uint32 { return math.MaxUint32 }
vmi := libvmi.NewCirros()
vmi := libvmifact.NewCirros()
Expect(m.Allocate(vmi)).To(Succeed())
Expect(vmi.Status.VSOCKCID).NotTo(BeNil())
Expect(*vmi.Status.VSOCKCID).To(BeNumerically("==", math.MaxUint32))

vmi2 := libvmi.NewCirros()
vmi2 := libvmifact.NewCirros()
Expect(m.Allocate(vmi2)).To(Succeed())
Expect(vmi2.Status.VSOCKCID).NotTo(BeNil())
Expect(*vmi2.Status.VSOCKCID).To(BeNumerically("==", 3))
Expand All @@ -118,7 +118,7 @@ var _ = Describe("VSOCK", func() {
Expect(m.reverse).To(HaveLen(len(vmis)))

// The next one will fail
vmi := libvmi.NewCirros()
vmi := libvmifact.NewCirros()
Expect(m.Allocate(vmi)).NotTo(Succeed())
})
})
Expand Down
5 changes: 3 additions & 2 deletions tests/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ go_library(
visibility = ["//visibility:public"],
deps = [
"//pkg/certificates/triple/cert:go_default_library",
"//pkg/libvmi:go_default_library",
"//pkg/pointer:go_default_library",
"//pkg/util:go_default_library",
"//pkg/virt-controller/services:go_default_library",
Expand All @@ -30,7 +31,6 @@ go_library(
"//tests/libnode:go_default_library",
"//tests/libpod:go_default_library",
"//tests/libstorage:go_default_library",
"//tests/libvmi:go_default_library",
"//tests/libwait:go_default_library",
"//tests/testsuite:go_default_library",
"//tests/util:go_default_library",
Expand Down Expand Up @@ -149,6 +149,7 @@ go_test(
"//pkg/hooks/v1alpha2:go_default_library",
"//pkg/hooks/v1alpha3:go_default_library",
"//pkg/instancetype:go_default_library",
"//pkg/libvmi:go_default_library",
"//pkg/network/dns:go_default_library",
"//pkg/pointer:go_default_library",
"//pkg/storage/backend-storage:go_default_library",
Expand Down Expand Up @@ -210,7 +211,7 @@ go_test(
"//tests/libreplicaset:go_default_library",
"//tests/libssh:go_default_library",
"//tests/libstorage:go_default_library",
"//tests/libvmi:go_default_library",
"//tests/libvmifact:go_default_library",
"//tests/libwait:go_default_library",
"//tests/migration:go_default_library",
"//tests/monitoring:go_default_library",
Expand Down
6 changes: 4 additions & 2 deletions tests/clone_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (

"k8s.io/apimachinery/pkg/api/errors"

"kubevirt.io/kubevirt/pkg/libvmi"

"kubevirt.io/kubevirt/tests/decorators"
"kubevirt.io/kubevirt/tests/testsuite"

Expand Down Expand Up @@ -36,7 +38,7 @@ import (
. "kubevirt.io/kubevirt/tests/framework/matcher"
"kubevirt.io/kubevirt/tests/libinstancetype"
"kubevirt.io/kubevirt/tests/libstorage"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/libvmifact"
)

const (
Expand All @@ -58,7 +60,7 @@ var _ = Describe("[Serial]VirtualMachineClone Tests", Serial, func() {
})

createVM := func(options ...libvmi.Option) (vm *virtv1.VirtualMachine) {
vmi := libvmi.NewCirros(options...)
vmi := libvmifact.NewCirros(options...)
vmi.Namespace = testsuite.GetTestNamespace(nil)
vm = libvmi.NewVirtualMachine(vmi)
vm.Annotations = vmi.Annotations
Expand Down
3 changes: 2 additions & 1 deletion tests/compute/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ go_library(
importpath = "kubevirt.io/kubevirt/tests/compute",
visibility = ["//visibility:public"],
deps = [
"//pkg/libvmi:go_default_library",
"//pkg/pointer:go_default_library",
"//pkg/virt-launcher/virtwrap/api:go_default_library",
"//staging/src/kubevirt.io/api/core/v1:go_default_library",
Expand All @@ -20,7 +21,7 @@ go_library(
"//tests/decorators:go_default_library",
"//tests/framework/kubevirt:go_default_library",
"//tests/framework/matcher:go_default_library",
"//tests/libvmi:go_default_library",
"//tests/libvmifact:go_default_library",
"//tests/libwait:go_default_library",
"//tests/testsuite:go_default_library",
"//tests/util:go_default_library",
Expand Down
16 changes: 9 additions & 7 deletions tests/compute/console.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ import (
v1 "kubevirt.io/api/core/v1"
"kubevirt.io/client-go/kubecli"

"kubevirt.io/kubevirt/pkg/libvmi"

"kubevirt.io/kubevirt/tests"
"kubevirt.io/kubevirt/tests/console"
"kubevirt.io/kubevirt/tests/framework/kubevirt"
"kubevirt.io/kubevirt/tests/libvmi"
"kubevirt.io/kubevirt/tests/libvmifact"
"kubevirt.io/kubevirt/tests/testsuite"
)

Expand All @@ -60,15 +62,15 @@ var _ = SIGDescribe("[rfe_id:127][posneg:negative][crit:medium][vendor:cnv-qe@re
Describe("[rfe_id:127][posneg:negative][crit:medium][vendor:cnv-qe@redhat.com][level:component]A new VirtualMachineInstance", func() {
Context("with a serial console", func() {
It("[test_id:1588]should return OS login", func() {
vmi := libvmi.NewCirros()
vmi := libvmifact.NewCirros()
vmi = tests.RunVMIAndExpectLaunch(vmi, startupTimeout)
expectConsoleOutput(
vmi,
"login as 'cirros' user",
)
})
It("[test_id:1590]should be able to reconnect to console multiple times", func() {
vmi := libvmi.NewAlpine()
vmi := libvmifact.NewAlpine()
vmi = tests.RunVMIAndExpectLaunch(vmi, startupTimeout)

for i := 0; i < 5; i++ {
Expand All @@ -77,7 +79,7 @@ var _ = SIGDescribe("[rfe_id:127][posneg:negative][crit:medium][vendor:cnv-qe@re
})

It("[test_id:1591]should close console connection when new console connection is opened", func() {
vmi := tests.RunVMIAndExpectLaunch(libvmi.NewAlpine(), startupTimeout)
vmi := tests.RunVMIAndExpectLaunch(libvmifact.NewAlpine(), startupTimeout)

By("opening 1st console connection")
stream, err := virtClient.VirtualMachineInstance(vmi.Namespace).SerialConsole(vmi.Name, &kubecli.SerialConsoleOptions{})
Expand Down Expand Up @@ -105,7 +107,7 @@ var _ = SIGDescribe("[rfe_id:127][posneg:negative][crit:medium][vendor:cnv-qe@re
})

It("[test_id:1592]should wait until the virtual machine is in running state and return a stream interface", func() {
vmi := libvmi.NewAlpine()
vmi := libvmifact.NewAlpine()
By("Creating a new VirtualMachineInstance")
vmi, err := virtClient.VirtualMachineInstance(testsuite.GetTestNamespace(vmi)).Create(context.Background(), vmi, metav1.CreateOptions{})
Expect(err).ToNot(HaveOccurred())
Expand All @@ -116,7 +118,7 @@ var _ = SIGDescribe("[rfe_id:127][posneg:negative][crit:medium][vendor:cnv-qe@re
})

It("[test_id:1593]should not be connected if scheduled to non-existing host", func() {
vmi := libvmi.NewAlpine(
vmi := libvmifact.NewAlpine(
libvmi.WithNodeAffinityFor("nonexistent"),
)

Expand All @@ -131,7 +133,7 @@ var _ = SIGDescribe("[rfe_id:127][posneg:negative][crit:medium][vendor:cnv-qe@re

Context("without a serial console", func() {
It("[test_id:4118]should run but not be connectable via the serial console", func() {
vmi := libvmi.NewAlpine(libvmi.WithoutSerialConsole())
vmi := libvmifact.NewAlpine(libvmi.WithoutSerialConsole())
vmi = tests.RunVMIAndExpectLaunch(vmi, startupTimeout)

By("failing to connect to serial console")
Expand Down

0 comments on commit 9ef681e

Please sign in to comment.