containerized-data-importer/tests/alpha_test.go
Michael Henriksen 75f4fd6f2f
update k8s deps to 18.6 and controller runtime to 0.6.2 (#1330)
* update k8s deps to 1.18.6 and controller runtime to 0.6.2

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* remove building code generators from docker image.  This way the k8s ligray version only has to be updated in go.mod

Do more stuff in the bazel container.  Faster and better interop

Fix unit tests

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* make format

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* remove unnecessary rsync

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* redo code generator dep management

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>

* builder uses go modules

Signed-off-by: Michael Henriksen <mhenriks@redhat.com>
2020-08-07 14:09:52 +02:00

134 lines
4.8 KiB
Go

package tests_test
import (
"context"
"fmt"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
cdiv1alpha1 "kubevirt.io/containerized-data-importer/pkg/apis/core/v1alpha1"
cdiv1 "kubevirt.io/containerized-data-importer/pkg/apis/core/v1beta1"
"kubevirt.io/containerized-data-importer/tests"
"kubevirt.io/containerized-data-importer/tests/framework"
"kubevirt.io/containerized-data-importer/tests/utils"
)
var _ = Describe("Alpha API tests", func() {
f := framework.NewFramework("alpha-api-test", framework.Config{})
Context("with v1alpha1 api", func() {
It("should get CDI config", func() {
config, err := f.CdiClient.CdiV1alpha1().CDIConfigs().Get(context.TODO(), "config", metav1.GetOptions{})
Expect(err).ToNot(HaveOccurred())
Expect(config).ToNot(BeNil())
})
It("should", func() {
By("create a upload DataVolume")
out, err := tests.RunKubectlCommand(f, "create", "-f", "manifests/dvAlphaUpload.yaml", "-n", f.Namespace.Name)
fmt.Fprintf(GinkgoWriter, "INFO: Output from kubectl: %s\n", out)
Expect(err).ToNot(HaveOccurred())
By("waiting for DataVolume to be ready")
err = utils.WaitForDataVolumePhase(f.CdiClient, f.Namespace.Name, cdiv1.UploadReady, "upload")
By("create a upload token")
out, err = tests.RunKubectlCommand(f, "create", "-f", "manifests/tokenAlpha.yaml", "-n", f.Namespace.Name)
fmt.Fprintf(GinkgoWriter, "INFO: Output from kubectl: %s\n", out)
Expect(err).ToNot(HaveOccurred())
})
It("should clone across namespace with alpha", func() {
By("create source PVC")
pvcDef := utils.NewPVCDefinition("source-pvc", "1G", nil, nil)
source, err := f.K8sClient.CoreV1().PersistentVolumeClaims(f.Namespace.Name).Create(context.TODO(), pvcDef, metav1.CreateOptions{})
Expect(err).ToNot(HaveOccurred())
By("create target namespace")
targetNs, err := f.CreateNamespace(f.NsPrefix, map[string]string{
framework.NsPrefixLabel: f.NsPrefix,
})
Expect(err).ToNot(HaveOccurred())
f.AddNamespaceToDelete(targetNs)
targetDef := createCloneDataVolume("target-dv", source)
target, err := f.CdiClient.CdiV1alpha1().DataVolumes(targetNs.Name).Create(context.TODO(), targetDef, metav1.CreateOptions{})
Expect(err).ToNot(HaveOccurred())
By("waiting for DataVolume to be complete")
err = utils.WaitForDataVolumePhase(f.CdiClient, target.Namespace, cdiv1.Succeeded, target.Name)
Expect(err).ToNot(HaveOccurred())
})
It("should not", func() {
By("create a upload DataVolume")
out, err := tests.RunKubectlCommand(f, "create", "-f", "manifests/dvAlphaMissingAccessModes.yaml", "-n", f.Namespace.Name)
fmt.Fprintf(GinkgoWriter, "INFO: Output from kubectl: %s\n", out)
Expect(out).Should(ContainSubstring("at least 1 access mode is required"))
Expect(err).To(HaveOccurred())
})
Context("with deletion blocked", func() {
var originalStrategy *cdiv1.CDIUninstallStrategy
BeforeEach(func() {
strategy := cdiv1.CDIUninstallStrategyBlockUninstallIfWorkloadsExist
originalStrategy = updateUninstallStrategy(f.CdiClient, &strategy)
})
AfterEach(func() {
updateUninstallStrategy(f.CdiClient, originalStrategy)
})
It("should block cdi delete", func() {
By("create a upload DataVolume")
out, err := tests.RunKubectlCommand(f, "create", "-f", "manifests/dvAlphaUpload.yaml", "-n", f.Namespace.Name)
fmt.Fprintf(GinkgoWriter, "INFO: Output from kubectl: %s\n", out)
Expect(err).ToNot(HaveOccurred())
By("waiting for DataVolume to be ready")
err = utils.WaitForDataVolumePhase(f.CdiClient, f.Namespace.Name, cdiv1.UploadReady, "upload")
// tests listing alpha api
alphaCDIs, err := f.CdiClient.CdiV1alpha1().CDIs().List(context.TODO(), metav1.ListOptions{})
Expect(err).ToNot(HaveOccurred())
Expect(alphaCDIs.Items).Should(HaveLen(1))
// will invoke webhook for alpha
err = f.CdiClient.CdiV1alpha1().CDIs().Delete(context.TODO(), alphaCDIs.Items[0].Name, metav1.DeleteOptions{DryRun: []string{"All"}})
Expect(err).To(HaveOccurred())
Expect(err.Error()).To(ContainSubstring("there are still DataVolumes present"))
})
})
})
})
func createCloneDataVolume(name string, source *corev1.PersistentVolumeClaim) *cdiv1alpha1.DataVolume {
dv := &cdiv1alpha1.DataVolume{
ObjectMeta: metav1.ObjectMeta{
Name: name,
},
Spec: cdiv1alpha1.DataVolumeSpec{
Source: cdiv1alpha1.DataVolumeSource{
PVC: &cdiv1alpha1.DataVolumeSourcePVC{
Namespace: source.Namespace,
Name: source.Name,
},
},
PVC: &corev1.PersistentVolumeClaimSpec{
AccessModes: source.Spec.AccessModes,
Resources: source.Spec.Resources,
VolumeMode: source.Spec.VolumeMode,
StorageClassName: source.Spec.StorageClassName,
},
},
}
return dv
}