From 093027c8914b19754af3ece5a83899376efae4b8 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Wed, 8 May 2019 17:58:58 +0200 Subject: [PATCH] e2e/storage: ensure that also external storage classes are unique One previously undocumented expectation is that GetDynamicProvisionStorageClass can be called more than once per test and then each time returns a new, unique storage class. The in-memory implementation in driveroperations.go:GetStorageClass ensured that, but loading from a .yaml file didn't. This caused the multivolume tests to fail when applied to an already installed GCE driver with the -storage.testdriver parameter. --- test/e2e/storage/external/BUILD | 1 + test/e2e/storage/external/external.go | 4 ++++ test/e2e/storage/testsuites/testdriver.go | 3 +++ 3 files changed, 8 insertions(+) diff --git a/test/e2e/storage/external/BUILD b/test/e2e/storage/external/BUILD index 603442833be..3112e6c98e4 100644 --- a/test/e2e/storage/external/BUILD +++ b/test/e2e/storage/external/BUILD @@ -11,6 +11,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//test/e2e/framework:go_default_library", "//test/e2e/storage/testpatterns:go_default_library", diff --git a/test/e2e/storage/external/external.go b/test/e2e/storage/external/external.go index d06c0ccf7a4..a539a54f347 100644 --- a/test/e2e/storage/external/external.go +++ b/test/e2e/storage/external/external.go @@ -27,6 +27,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apiserver/pkg/storage/names" "k8s.io/client-go/kubernetes/scheme" "k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/storage/testpatterns" @@ -242,6 +243,9 @@ func (d *driverDefinition) GetDynamicProvisionStorageClass(config *testsuites.Pe sc, ok := items[0].(*storagev1.StorageClass) gomega.Expect(ok).To(gomega.BeTrue(), "storage class from %s", d.StorageClass.FromFile) + // Ensure that we can load more than once as required for + // GetDynamicProvisionStorageClass by adding a random suffix. + sc.Name = names.SimpleNameGenerator.GenerateName(sc.Name + "-") if fsType != "" { if sc.Parameters == nil { sc.Parameters = map[string]string{} diff --git a/test/e2e/storage/testsuites/testdriver.go b/test/e2e/storage/testsuites/testdriver.go index 3736390b747..b7dc23b2b19 100644 --- a/test/e2e/storage/testsuites/testdriver.go +++ b/test/e2e/storage/testsuites/testdriver.go @@ -88,6 +88,9 @@ type PreprovisionedPVTestDriver interface { type DynamicPVTestDriver interface { TestDriver // GetDynamicProvisionStorageClass returns a StorageClass dynamic provision Persistent Volume. + // The StorageClass must be created in the current test's namespace and have + // a unique name inside that namespace because GetDynamicProvisionStorageClass might + // be called more than once per test. // It will set fsType to the StorageClass, if TestDriver supports it. // It will return nil, if the TestDriver doesn't support it. GetDynamicProvisionStorageClass(config *PerTestConfig, fsType string) *storagev1.StorageClass