Skip to content

Commit

Permalink
test: added test to validate the LVMO resources
Browse files Browse the repository at this point in the history
This test validates all the resources created by LVMO

Signed-off-by: riya-singhal31 <[email protected]>
  • Loading branch information
riya-singhal31 committed Apr 18, 2022
1 parent 2a5c5cd commit 76200a4
Show file tree
Hide file tree
Showing 5 changed files with 165 additions and 6 deletions.
3 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -311,10 +311,11 @@ lvm-must-gather:
# Variables required to run and build LVM end to end tests.
LVM_OPERATOR_INSTALL ?= true
LVM_OPERATOR_UNINSTALL ?= true
SUBSCRIPTION_CHANNEL ?= alpha

# Build and run lvm tests.
e2e-test: ginkgo
@echo "build and run e2e tests"
cd e2e/lvm && $(GINKGO) build
cd e2e/lvm && ./lvm.test --lvm-catalog-image=$(CATALOG_IMG) --lvm-subscription-channel=$(CHANNELS) --lvm-operator-install=$(LVM_OPERATOR_INSTALL) --lvm-operator-uninstall=$(LVM_OPERATOR_UNINSTALL)
cd e2e/lvm && ./lvm.test --lvm-catalog-image=$(CATALOG_IMG) --lvm-subscription-channel=$(SUBSCRIPTION_CHANNEL) --lvm-operator-install=$(LVM_OPERATOR_INSTALL) --lvm-operator-uninstall=$(LVM_OPERATOR_UNINSTALL) -ginkgo.v

1 change: 1 addition & 0 deletions e2e/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

// TestNamespace is the namespace we run all the tests in.
const TestNamespace = "lvm-endtoendtest"
const InstallNamespace = "openshift-storage"

var lvmOperatorInstall bool
var lvmOperatorUninstall bool
Expand Down
11 changes: 6 additions & 5 deletions e2e/lvm/lvm_suite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package lvm_test

import (
"flag"
"fmt"
"testing"

. "github.com/onsi/ginkgo/v2"
Expand All @@ -25,10 +24,12 @@ var _ = AfterSuite(func() {
tests.AfterTestSuiteCleanup()
})

var _ = Describe("lvmtest", func() {
Context("Run a dummy test", func() {
It("Should do nothing", func() {
fmt.Println("Do nothing")
// Test to validate all the resources created by LVMO.
var _ = Describe("Validation test", func() {
Context("Validate LVMCluster reconciliation", func() {
It("Should validate LVMCluster reconciliation", func() {
err := tests.ValidateResources()
Expect(err).To(BeNil())
})
})
})
155 changes: 155 additions & 0 deletions e2e/validation.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
package e2e

import (
"context"
"time"

. "github.com/onsi/gomega"
lvmv1alpha1 "github.com/red-hat-storage/lvm-operator/api/v1alpha1"
appsv1 "k8s.io/api/apps/v1"
storagev1 "k8s.io/api/storage/v1"
"k8s.io/apimachinery/pkg/types"
)

const (
timeout = time.Minute * 15
interval = time.Second * 30
lvmVolumeGroupName = "vg1"
storageClassName = "odf-lvm-vg1"
csiDriverName = "topolvm.cybozu.com"
topolvmNodeDaemonSetName = "topolvm-node"
topolvmCtrlDeploymentName = "topolvm-controller"
vgManagerDaemonsetName = "vg-manager"
)

// function to validate LVMVolume group.
func ValidateLVMvg() error {
lvmVG := lvmv1alpha1.LVMVolumeGroup{}

Eventually(func() bool {
err := DeployManagerObj.GetCrClient().Get(context.TODO(), types.NamespacedName{Name: lvmVolumeGroupName, Namespace: InstallNamespace}, &lvmVG)
return err == nil
}, timeout, interval).Should(BeTrue())

debug("VG found\n")
return nil
}

// function to validate storage class.
func ValidateStorageClass() error {
sc := storagev1.StorageClass{}

Eventually(func() bool {
err := DeployManagerObj.GetCrClient().Get(context.TODO(), types.NamespacedName{Name: storageClassName}, &sc)
return err == nil
}, timeout, interval).Should(BeTrue())

debug("SC found\n")
return nil
}

// function to validate CSI Driver.
func ValidateCSIDriver() error {
cd := storagev1.CSIDriver{}

Eventually(func() bool {
err := DeployManagerObj.GetCrClient().Get(context.TODO(), types.NamespacedName{Name: csiDriverName, Namespace: InstallNamespace}, &cd)
return err == nil
}, timeout, interval).Should(BeTrue())

debug("CSI Driver found\n")
return nil
}

// function to validate TopoLVM node.
func ValidateTopolvmNode() error {
ds := appsv1.DaemonSet{}
Eventually(func() bool {
err := DeployManagerObj.GetCrClient().Get(context.TODO(), types.NamespacedName{Name: topolvmNodeDaemonSetName, Namespace: InstallNamespace}, &ds)
return err == nil
}, timeout, interval).Should(BeTrue())
debug("TopoLVM node found\n")

/*
// checking for the ready status
Eventually(func() bool {
return ds.Status.DesiredNumberScheduled == ds.Status.NumberReady
}, timeout, interval).Should(BeTrue())
debug("Status is ready\n")*/

return nil
}

// function to validate vg manager resource.
func ValidateVGManager() error {
ds := appsv1.DaemonSet{}

Eventually(func() bool {
err := DeployManagerObj.GetCrClient().Get(context.TODO(), types.NamespacedName{Name: vgManagerDaemonsetName, Namespace: InstallNamespace}, &ds)
return err == nil
}, timeout, interval).Should(BeTrue())
debug("VG manager found\n")

return nil
}

// function to validate TopoLVM Deployment.
func ValidateTopolvmController() error {
dep := appsv1.Deployment{}

Eventually(func() bool {
err := DeployManagerObj.GetCrClient().Get(context.TODO(), types.NamespacedName{Name: topolvmCtrlDeploymentName, Namespace: InstallNamespace}, &dep)
return err == nil
}, timeout, interval).Should(BeTrue())

debug("depoloyment found\n")
return nil
}

// Validate all the resources created by LVMO.
func ValidateResources() error {

// Validate Storage class
err := ValidateStorageClass()
if err != nil {
debug("Storage class failed to validate: %v", err)
return err
}

// Validate LVMVg
err = ValidateLVMvg()
if err != nil {
debug("LVM Volume Group failed to validate: %v", err)
return err
}

// Validate CSI Driver
err = ValidateCSIDriver()
if err != nil {
debug("CSI Driver failed to validate: %v", err)
return err
}

// Validate Topolvm node
err = ValidateTopolvmNode()
if err != nil {
debug("TopoLVM node failed to validate: %v", err)
return err
}

//Validate TopoLVM Controller
err = ValidateTopolvmController()
if err != nil {
debug("TopoLVM Controller failed to validate: %v", err)
return err
}

// Validate VG Manager Daemonset
err = ValidateVGManager()
if err != nil {
debug("VG Manager failed to validate: %v", err)
return err
}

return nil
}
1 change: 1 addition & 0 deletions pkg/deploymanager/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ func NewDeployManager() (*DeployManager, error) {
// controller-runtime client
myScheme := runtime.NewScheme()
utilruntime.Must(lvmv1.AddToScheme(myScheme))
utilruntime.Must(scheme.AddToScheme(myScheme))
crClient, err := crclient.New(config, crclient.Options{Scheme: myScheme})
if err != nil {
return nil, err
Expand Down

0 comments on commit 76200a4

Please sign in to comment.