From 47f8380fbad4285a0fe565f577e1440b32f0d2e5 Mon Sep 17 00:00:00 2001 From: Drew Walters Date: Wed, 2 Dec 2020 20:19:39 +0000 Subject: [PATCH] Add vBMH package tests This commit introduces some tests for the vBMH package. --- go.sum | 3 ++ pkg/vbmh/vbmh_test.go | 103 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 pkg/vbmh/vbmh_test.go diff --git a/go.sum b/go.sum index cef91a9..63a2539 100644 --- a/go.sum +++ b/go.sum @@ -233,6 +233,7 @@ github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1a github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gophercloud/gophercloud v0.12.0 h1:mZrie07npp6ODiwHZolTicr5jV8Ogn43AvAsSMm6Ork= github.com/gophercloud/gophercloud v0.12.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -400,6 +401,7 @@ github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= @@ -669,6 +671,7 @@ k8s.io/apimachinery v0.18.6/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCk k8s.io/apimachinery v0.18.9/go.mod h1:PF5taHbXgTEJLU+xMypMmYTXTWPJ5LaW8bfsisxnEXk= k8s.io/apimachinery v0.19.0 h1:gjKnAda/HZp5k4xQYjL0K/Yb66IvNqjthCb03QlKpaQ= k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apimachinery v0.19.4 h1:+ZoddM7nbzrDCp0T3SWnyxqf8cbWPT2fkZImoyvHUG0= k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo= k8s.io/apiserver v0.18.6/go.mod h1:Zt2XvTHuaZjBz6EFYzpp+X4hTmgWGy8AthNVnTdm3Wg= k8s.io/apiserver v0.18.9/go.mod h1:vXQzMtUCLsGg1Bh+7Jo2mZKHpHZFCZn8eTNSepcIA1M= diff --git a/pkg/vbmh/vbmh_test.go b/pkg/vbmh/vbmh_test.go new file mode 100644 index 0000000..6a5667c --- /dev/null +++ b/pkg/vbmh/vbmh_test.go @@ -0,0 +1,103 @@ +package vbmh + +import ( + "fmt" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + metal3 "github.com/metal3-io/baremetal-operator/apis/metal3.io/v1alpha1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + mockClient "sigs.k8s.io/controller-runtime/pkg/client/fake" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/kubernetes/scheme" + ctrl "sigs.k8s.io/controller-runtime" + + airshipv1 "sipcluster/pkg/api/v1" +) + +const ( + // numNodes is the number of test vBMH objects (nodes) created for each test + numNodes = 7 +) + +var _ = Describe("MachineList", func() { + var machineList *MachineList + BeforeEach(func() { + nodes := map[string]*Machine{} + for n := 0; n < numNodes; n++ { + bmh := metal3.BareMetalHost{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("node0%d", n), + Namespace: "default", + Labels: map[string]string{ + "airshipit.org/vino-flavor": "master", + SipScheduleLabel: "false", + RackLabel: "r002", + ServerLabel: fmt.Sprintf("node0%dr002", n), + }, + }, + Spec: metal3.BareMetalHostSpec{ + NetworkData: &corev1.SecretReference{ + Namespace: "default", + Name: "fake-network-data", + }, + }, + } + + nodes[bmh.Name] = NewMachine(bmh, airshipv1.VmMaster, NotScheduled) + } + + machineList = &MachineList{ + NamespacedName: types.NamespacedName{ + Name: "vbmh", + Namespace: "default", + }, + Machines: nodes, + Log: ctrl.Log.WithName("controllers").WithName("SIPCluster"), + } + + err := metal3.AddToScheme(scheme.Scheme) + Expect(err).NotTo(HaveOccurred()) + }) + + It("Should report if it has a machine registered for a BMH object", func() { + for _, bmh := range machineList.Machines { + Expect(machineList.hasMachine(bmh.BMH)).Should(BeTrue()) + } + + unregisteredMachine := machineList.Machines["node01"] + unregisteredMachine.BMH.Name = "foo" + Expect(machineList.hasMachine(unregisteredMachine.BMH)).Should(BeFalse()) + }) + + It("Should produce a list of unscheduled BMH objects", func() { + // "Schedule" two nodes + machineList.Machines["node00"].BMH.Labels[SipScheduleLabel] = "true" + machineList.Machines["node01"].BMH.Labels[SipScheduleLabel] = "true" + scheduledNodes := []metal3.BareMetalHost{ + machineList.Machines["node00"].BMH, + machineList.Machines["node01"].BMH, + } + + var objs []runtime.Object + for _, machine := range machineList.Machines { + objs = append(objs, &machine.BMH) + } + + k8sClient := mockClient.NewFakeClient(objs...) + bmhList, err := machineList.getBMHs(k8sClient) + Expect(err).To(BeNil()) + + // Validate that the BMH list does not contain scheduled nodes + for _, bmh := range bmhList.Items { + for _, scheduled := range scheduledNodes { + Expect(bmh).ToNot(Equal(scheduled)) + Expect(bmh.Labels[SipScheduleLabel]).To(Equal("false")) + } + } + + }) + +})