Skip pvc protection tests if no default SC is found

Other tests that check for default storageclass also
check for cloudprovider such as gce, aws and openstack
and hence are already skipped in bare metal environments.

But this particular test keeps failing because no such check exists.
k3s-v1.15.3
Hemant Kumar 2019-04-15 15:48:58 -04:00
parent b32b742d97
commit 6fee8a7727
6 changed files with 51 additions and 29 deletions

View File

@ -94,6 +94,7 @@ var _ = SIGDescribe("StatefulSet", func() {
// StorageClass and a dynamic provisioner.
ginkgo.It("should provide basic identity", func() {
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
framework.SkipIfNoDefaultStorageClass(c)
*(ss.Spec.Replicas) = 3
sst := framework.NewStatefulSetTester(c)
sst.PauseNewPods(ss)
@ -133,6 +134,7 @@ var _ = SIGDescribe("StatefulSet", func() {
// StorageClass and a dynamic provisioner.
ginkgo.It("should adopt matching orphans and release non-matching pods", func() {
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
framework.SkipIfNoDefaultStorageClass(c)
*(ss.Spec.Replicas) = 1
sst := framework.NewStatefulSetTester(c)
sst.PauseNewPods(ss)
@ -218,6 +220,7 @@ var _ = SIGDescribe("StatefulSet", func() {
// StorageClass and a dynamic provisioner.
ginkgo.It("should not deadlock when a pod's predecessor fails", func() {
ginkgo.By("Creating statefulset " + ssName + " in namespace " + ns)
framework.SkipIfNoDefaultStorageClass(c)
*(ss.Spec.Replicas) = 2
sst := framework.NewStatefulSetTester(c)
sst.PauseNewPods(ss)
@ -254,6 +257,7 @@ var _ = SIGDescribe("StatefulSet", func() {
// StorageClass and a dynamic provisioner.
ginkgo.It("should perform rolling updates and roll backs of template modifications with PVCs", func() {
ginkgo.By("Creating a new StatefulSet with PVCs")
framework.SkipIfNoDefaultStorageClass(c)
*(ss.Spec.Replicas) = 3
rollbackTest(c, ns, ss)
})

View File

@ -41,6 +41,7 @@ go_library(
"//pkg/apis/batch:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/apis/extensions:go_default_library",
"//pkg/apis/storage/v1/util:go_default_library",
"//pkg/client/conditions:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/controller/deployment/util:go_default_library",

View File

@ -29,6 +29,7 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/uuid"
clientset "k8s.io/client-go/kubernetes"
storageutil "k8s.io/kubernetes/pkg/apis/storage/v1/util"
"k8s.io/kubernetes/pkg/volume/util"
imageutils "k8s.io/kubernetes/test/utils/image"
)
@ -1021,3 +1022,33 @@ func GetBoundPV(client clientset.Interface, pvc *v1.PersistentVolumeClaim) (*v1.
pv, err := client.CoreV1().PersistentVolumes().Get(claim.Spec.VolumeName, metav1.GetOptions{})
return pv, err
}
// GetDefaultStorageClassName returns default storageClass or return error
func GetDefaultStorageClassName(c clientset.Interface) (string, error) {
list, err := c.StorageV1().StorageClasses().List(metav1.ListOptions{})
if err != nil {
return "", fmt.Errorf("Error listing storage classes: %v", err)
}
var scName string
for _, sc := range list.Items {
if storageutil.IsDefaultAnnotation(sc.ObjectMeta) {
if len(scName) != 0 {
return "", fmt.Errorf("Multiple default storage classes found: %q and %q", scName, sc.Name)
}
scName = sc.Name
}
}
if len(scName) == 0 {
return "", fmt.Errorf("No default storage class found")
}
Logf("Default storage class: %q", scName)
return scName, nil
}
// SkipIfNoDefaultStorageClass skips tests if no default SC can be found.
func SkipIfNoDefaultStorageClass(c clientset.Interface) {
_, err := GetDefaultStorageClassName(c)
if err != nil {
Skipf("error finding default storageClass : %v", err)
}
}

View File

@ -48,12 +48,11 @@ var _ = utils.SIGDescribe("PVC Protection", func() {
By("Creating a PVC")
suffix := "pvc-protection"
defaultSC := getDefaultStorageClassName(client)
framework.SkipIfNoDefaultStorageClass(client)
testStorageClass := testsuites.StorageClassTest{
ClaimSize: "1Gi",
}
pvc = newClaim(testStorageClass, nameSpace, suffix)
pvc.Spec.StorageClassName = &defaultSC
pvc, err = client.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc)
framework.ExpectNoError(err, "Error creating PVC")
pvcCreatedAndNotDeleted = true

View File

@ -52,17 +52,19 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() {
BeforeEach(func() {
c = f.ClientSet
ns = f.Namespace.Name
var err error
framework.SkipUnlessProviderIs("gce", "gke", "aws")
defaultScName = getDefaultStorageClassName(c)
verifyDefaultStorageClass(c, defaultScName, true)
defaultScName, err = framework.GetDefaultStorageClassName(c)
if err != nil {
framework.Failf(err.Error())
}
test := testsuites.StorageClassTest{
Name: "default",
ClaimSize: "2Gi",
}
pvc = newClaim(test, ns, "default")
var err error
metricsGrabber, err = metrics.NewMetricsGrabber(c, nil, true, false, true, false, false)
if err != nil {

View File

@ -775,7 +775,10 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
// Modifying the default storage class can be disruptive to other tests that depend on it
It("should be disabled by changing the default annotation [Serial] [Disruptive]", func() {
framework.SkipUnlessProviderIs("openstack", "gce", "aws", "gke", "vsphere", "azure")
scName := getDefaultStorageClassName(c)
scName, scErr := framework.GetDefaultStorageClassName(c)
if scErr != nil {
framework.Failf(scErr.Error())
}
test := testsuites.StorageClassTest{
Name: "default",
ClaimSize: "2Gi",
@ -806,7 +809,10 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
// Modifying the default storage class can be disruptive to other tests that depend on it
It("should be disabled by removing the default annotation [Serial] [Disruptive]", func() {
framework.SkipUnlessProviderIs("openstack", "gce", "aws", "gke", "vsphere", "azure")
scName := getDefaultStorageClassName(c)
scName, scErr := framework.GetDefaultStorageClassName(c)
if scErr != nil {
framework.Failf(scErr.Error())
}
test := testsuites.StorageClassTest{
Name: "default",
ClaimSize: "2Gi",
@ -975,27 +981,6 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() {
})
})
func getDefaultStorageClassName(c clientset.Interface) string {
list, err := c.StorageV1().StorageClasses().List(metav1.ListOptions{})
if err != nil {
framework.Failf("Error listing storage classes: %v", err)
}
var scName string
for _, sc := range list.Items {
if storageutil.IsDefaultAnnotation(sc.ObjectMeta) {
if len(scName) != 0 {
framework.Failf("Multiple default storage classes found: %q and %q", scName, sc.Name)
}
scName = sc.Name
}
}
if len(scName) == 0 {
framework.Failf("No default storage class found")
}
framework.Logf("Default storage class: %q", scName)
return scName
}
func verifyDefaultStorageClass(c clientset.Interface, scName string, expectedDefault bool) {
sc, err := c.StorageV1().StorageClasses().Get(scName, metav1.GetOptions{})
framework.ExpectNoError(err)