mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-30 23:15:14 +00:00
Merge pull request #81375 from msau42/reduce-storage-e2es
Skip preprovisioned and inline volume tests if driver supports dynamic provisioning
This commit is contained in:
commit
8f0d626228
@ -17,7 +17,7 @@ limitations under the License.
|
|||||||
package testpatterns
|
package testpatterns
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
storagev1 "k8s.io/api/storage/v1"
|
storagev1 "k8s.io/api/storage/v1"
|
||||||
"k8s.io/kubernetes/test/e2e/framework/volume"
|
"k8s.io/kubernetes/test/e2e/framework/volume"
|
||||||
)
|
)
|
||||||
@ -233,3 +233,12 @@ var (
|
|||||||
AllowExpansion: true,
|
AllowExpansion: true,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// NewVolTypeMap creates a map with the given TestVolTypes enabled
|
||||||
|
func NewVolTypeMap(types ...TestVolType) map[TestVolType]bool {
|
||||||
|
m := map[TestVolType]bool{}
|
||||||
|
for _, t := range types {
|
||||||
|
m[t] = true
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
@ -61,6 +61,8 @@ type TestSuite interface {
|
|||||||
// Called inside a Ginkgo context that reflects the current driver and test pattern,
|
// Called inside a Ginkgo context that reflects the current driver and test pattern,
|
||||||
// so the test suite can define tests directly with ginkgo.It.
|
// so the test suite can define tests directly with ginkgo.It.
|
||||||
defineTests(TestDriver, testpatterns.TestPattern)
|
defineTests(TestDriver, testpatterns.TestPattern)
|
||||||
|
// skipRedundantSuite will skip the test suite based on the given TestPattern and TestDriver
|
||||||
|
skipRedundantSuite(TestDriver, testpatterns.TestPattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestSuiteInfo represents a set of parameters for TestSuite
|
// TestSuiteInfo represents a set of parameters for TestSuite
|
||||||
@ -90,6 +92,7 @@ func DefineTestSuite(driver TestDriver, tsInits []func() TestSuite) {
|
|||||||
ginkgo.Context(getTestNameStr(suite, p), func() {
|
ginkgo.Context(getTestNameStr(suite, p), func() {
|
||||||
ginkgo.BeforeEach(func() {
|
ginkgo.BeforeEach(func() {
|
||||||
// Skip unsupported tests to avoid unnecessary resource initialization
|
// Skip unsupported tests to avoid unnecessary resource initialization
|
||||||
|
suite.skipRedundantSuite(driver, p)
|
||||||
skipUnsupportedTest(driver, p)
|
skipUnsupportedTest(driver, p)
|
||||||
})
|
})
|
||||||
suite.defineTests(driver, p)
|
suite.defineTests(driver, p)
|
||||||
@ -614,3 +617,11 @@ func validateMigrationVolumeOpCounts(cs clientset.Interface, pluginName string,
|
|||||||
// guarantees (as well as more informative metrics).
|
// guarantees (as well as more informative metrics).
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip skipVolTypes patterns if the driver supports dynamic provisioning
|
||||||
|
func skipVolTypePatterns(pattern testpatterns.TestPattern, driver TestDriver, skipVolTypes map[testpatterns.TestVolType]bool) {
|
||||||
|
_, supportsProvisioning := driver.(DynamicPVTestDriver)
|
||||||
|
if supportsProvisioning && skipVolTypes[pattern.VolType] {
|
||||||
|
framework.Skipf("Driver supports dynamic provisioning, skipping %s pattern", pattern.VolType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -18,7 +18,7 @@ package testsuites
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
clientset "k8s.io/client-go/kubernetes"
|
clientset "k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
"k8s.io/kubernetes/test/e2e/storage/testpatterns"
|
||||||
@ -38,20 +38,25 @@ func InitDisruptiveTestSuite() TestSuite {
|
|||||||
name: "disruptive",
|
name: "disruptive",
|
||||||
featureTag: "[Disruptive]",
|
featureTag: "[Disruptive]",
|
||||||
testPatterns: []testpatterns.TestPattern{
|
testPatterns: []testpatterns.TestPattern{
|
||||||
|
// FSVolMode is already covered in subpath testsuite
|
||||||
testpatterns.DefaultFsInlineVolume,
|
testpatterns.DefaultFsInlineVolume,
|
||||||
testpatterns.FsVolModePreprovisionedPV,
|
testpatterns.FsVolModePreprovisionedPV,
|
||||||
testpatterns.FsVolModeDynamicPV,
|
testpatterns.FsVolModeDynamicPV,
|
||||||
testpatterns.BlockVolModePreprovisionedPV,
|
testpatterns.BlockVolModePreprovisionedPV,
|
||||||
|
testpatterns.BlockVolModePreprovisionedPV,
|
||||||
testpatterns.BlockVolModeDynamicPV,
|
testpatterns.BlockVolModeDynamicPV,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *disruptiveTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
func (s *disruptiveTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
||||||
return s.tsInfo
|
return s.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *disruptiveTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
skipVolTypePatterns(pattern, driver, testpatterns.NewVolTypeMap(testpatterns.PreprovisionedPV))
|
||||||
|
}
|
||||||
|
|
||||||
func (s *disruptiveTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (s *disruptiveTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
type local struct {
|
type local struct {
|
||||||
config *PerTestConfig
|
config *PerTestConfig
|
||||||
@ -121,41 +126,43 @@ func (s *disruptiveTestSuite) defineTests(driver TestDriver, pattern testpattern
|
|||||||
runTestBlock: utils.TestKubeletRestartsAndRestoresMap,
|
runTestBlock: utils.TestKubeletRestartsAndRestoresMap,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
testItStmt: "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.",
|
testItStmt: "Should test that pv used in a pod that is deleted while the kubelet is down cleans up when the kubelet returns.",
|
||||||
runTestFile: utils.TestVolumeUnmountsFromDeletedPod,
|
// File test is covered by subpath testsuite
|
||||||
runTestBlock: utils.TestVolumeUnmapsFromDeletedPod,
|
runTestBlock: utils.TestVolumeUnmapsFromDeletedPod,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
testItStmt: "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.",
|
testItStmt: "Should test that pv used in a pod that is force deleted while the kubelet is down cleans up when the kubelet returns.",
|
||||||
runTestFile: utils.TestVolumeUnmountsFromForceDeletedPod,
|
// File test is covered by subpath testsuite
|
||||||
runTestBlock: utils.TestVolumeUnmapsFromForceDeletedPod,
|
runTestBlock: utils.TestVolumeUnmapsFromForceDeletedPod,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, test := range disruptiveTestTable {
|
for _, test := range disruptiveTestTable {
|
||||||
func(t disruptiveTest) {
|
if test.runTestFile != nil {
|
||||||
ginkgo.It(t.testItStmt, func() {
|
func(t disruptiveTest) {
|
||||||
init()
|
ginkgo.It(t.testItStmt, func() {
|
||||||
defer cleanup()
|
init()
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
var pvcs []*v1.PersistentVolumeClaim
|
var pvcs []*v1.PersistentVolumeClaim
|
||||||
var inlineSources []*v1.VolumeSource
|
var inlineSources []*v1.VolumeSource
|
||||||
if pattern.VolType == testpatterns.InlineVolume {
|
if pattern.VolType == testpatterns.InlineVolume {
|
||||||
inlineSources = append(inlineSources, l.resource.volSource)
|
inlineSources = append(inlineSources, l.resource.volSource)
|
||||||
} else {
|
} else {
|
||||||
pvcs = append(pvcs, l.resource.pvc)
|
pvcs = append(pvcs, l.resource.pvc)
|
||||||
}
|
}
|
||||||
ginkgo.By("Creating a pod with pvc")
|
ginkgo.By("Creating a pod with pvc")
|
||||||
l.pod, err = framework.CreateSecPodWithNodeSelection(l.cs, l.ns.Name, pvcs, inlineSources, false, "", false, false, framework.SELinuxLabel, nil, framework.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout)
|
l.pod, err = framework.CreateSecPodWithNodeSelection(l.cs, l.ns.Name, pvcs, inlineSources, false, "", false, false, framework.SELinuxLabel, nil, framework.NodeSelection{Name: l.config.ClientNodeName}, framework.PodStartTimeout)
|
||||||
framework.ExpectNoError(err, "While creating pods for kubelet restart test")
|
framework.ExpectNoError(err, "While creating pods for kubelet restart test")
|
||||||
|
|
||||||
if pattern.VolMode == v1.PersistentVolumeBlock {
|
if pattern.VolMode == v1.PersistentVolumeBlock {
|
||||||
t.runTestBlock(l.cs, l.config.Framework, l.pod)
|
t.runTestBlock(l.cs, l.config.Framework, l.pod)
|
||||||
} else {
|
} else {
|
||||||
t.runTestFile(l.cs, l.config.Framework, l.pod)
|
t.runTestFile(l.cs, l.config.Framework, l.pod)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}(test)
|
}(test)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,9 @@ func (p *ephemeralTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return p.tsInfo
|
return p.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *ephemeralTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
}
|
||||||
|
|
||||||
func (p *ephemeralTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (p *ephemeralTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
type local struct {
|
type local struct {
|
||||||
config *PerTestConfig
|
config *PerTestConfig
|
||||||
|
@ -56,6 +56,10 @@ func (t *multiVolumeTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return t.tsInfo
|
return t.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *multiVolumeTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
skipVolTypePatterns(pattern, driver, testpatterns.NewVolTypeMap(testpatterns.PreprovisionedPV))
|
||||||
|
}
|
||||||
|
|
||||||
func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (t *multiVolumeTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
type local struct {
|
type local struct {
|
||||||
config *PerTestConfig
|
config *PerTestConfig
|
||||||
|
@ -82,6 +82,9 @@ func (p *provisioningTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return p.tsInfo
|
return p.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *provisioningTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
}
|
||||||
|
|
||||||
func (p *provisioningTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (p *provisioningTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
type local struct {
|
type local struct {
|
||||||
config *PerTestConfig
|
config *PerTestConfig
|
||||||
|
@ -66,6 +66,9 @@ func (s *snapshottableTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return s.tsInfo
|
return s.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *snapshottableTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
}
|
||||||
|
|
||||||
func (s *snapshottableTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (s *snapshottableTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
var (
|
var (
|
||||||
sDriver SnapshottableTestDriver
|
sDriver SnapshottableTestDriver
|
||||||
|
@ -74,6 +74,12 @@ func (s *subPathTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return s.tsInfo
|
return s.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *subPathTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
skipVolTypePatterns(pattern, driver, testpatterns.NewVolTypeMap(
|
||||||
|
testpatterns.PreprovisionedPV,
|
||||||
|
testpatterns.InlineVolume))
|
||||||
|
}
|
||||||
|
|
||||||
func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (s *subPathTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
type local struct {
|
type local struct {
|
||||||
config *PerTestConfig
|
config *PerTestConfig
|
||||||
|
@ -64,6 +64,9 @@ func (v *volumeExpandTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return v.tsInfo
|
return v.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *volumeExpandTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
}
|
||||||
|
|
||||||
func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (v *volumeExpandTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
type local struct {
|
type local struct {
|
||||||
config *PerTestConfig
|
config *PerTestConfig
|
||||||
|
@ -77,6 +77,12 @@ func (t *volumeIOTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return t.tsInfo
|
return t.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *volumeIOTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
skipVolTypePatterns(pattern, driver, testpatterns.NewVolTypeMap(
|
||||||
|
testpatterns.PreprovisionedPV,
|
||||||
|
testpatterns.InlineVolume))
|
||||||
|
}
|
||||||
|
|
||||||
func (t *volumeIOTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (t *volumeIOTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
type local struct {
|
type local struct {
|
||||||
config *PerTestConfig
|
config *PerTestConfig
|
||||||
|
@ -63,6 +63,9 @@ func (t *volumeModeTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return t.tsInfo
|
return t.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *volumeModeTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
|
}
|
||||||
|
|
||||||
func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
func (t *volumeModeTestSuite) defineTests(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
type local struct {
|
type local struct {
|
||||||
config *PerTestConfig
|
config *PerTestConfig
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
|
|
||||||
"github.com/onsi/ginkgo"
|
"github.com/onsi/ginkgo"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
"k8s.io/kubernetes/test/e2e/framework/volume"
|
"k8s.io/kubernetes/test/e2e/framework/volume"
|
||||||
@ -78,7 +78,7 @@ func (t *volumesTestSuite) getTestSuiteInfo() TestSuiteInfo {
|
|||||||
return t.tsInfo
|
return t.tsInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *volumesTestSuite) skipUnsupportedTest(pattern testpatterns.TestPattern, driver TestDriver) {
|
func (t *volumesTestSuite) skipRedundantSuite(driver TestDriver, pattern testpatterns.TestPattern) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func skipExecTest(driver TestDriver) {
|
func skipExecTest(driver TestDriver) {
|
||||||
|
Loading…
Reference in New Issue
Block a user