Skip to content

Commit cf6fdcb

Browse files
humblecmergify[bot]
authored andcommitted
e2e: adjust migration e2e tests and introduce helper functions
This commit adjust existing migration e2e tests to a couple of tests to cover the scenarios. The seperate filesystem and block tests have been shrinked to single one and also introduced a couple of helper functions to setup and teardown migraition specific secret,configmap and sc. The static pv function has been renamed to a general name while the tests were adjusted. Signed-off-by: Humble Chirammal <hchiramm@redhat.com>
1 parent 784c3ef commit cf6fdcb

File tree

3 files changed

+110
-210
lines changed

3 files changed

+110
-210
lines changed

e2e/migration.go

Lines changed: 45 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -4,104 +4,13 @@ import (
44
"context"
55
"encoding/hex"
66
"fmt"
7-
"strconv"
87
"strings"
98

109
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1110
"k8s.io/client-go/kubernetes"
1211
"k8s.io/kubernetes/test/e2e/framework"
1312
)
1413

15-
func validateRBDStaticMigrationPVDeletion(f *framework.Framework, appPath, scName string, isBlock bool) error {
16-
opt := make(map[string]string)
17-
var (
18-
rbdImageName = "kubernetes-dynamic-pvc-e0b45b52-7e09-47d3-8f1b-806995fa4412"
19-
pvName = "pv-name"
20-
pvcName = "pvc-name"
21-
namespace = f.UniqueName
22-
sc = scName
23-
provisionerAnnKey = "pv.kubernetes.io/provisioned-by"
24-
provisionerAnnValue = "rbd.csi.ceph.com"
25-
)
26-
27-
c := f.ClientSet
28-
PVAnnMap := make(map[string]string)
29-
PVAnnMap[provisionerAnnKey] = provisionerAnnValue
30-
mons, err := getMons(rookNamespace, c)
31-
if err != nil {
32-
return fmt.Errorf("failed to get mons: %w", err)
33-
}
34-
mon := strings.Join(mons, ",")
35-
size := staticPVSize
36-
// create rbd image
37-
cmd := fmt.Sprintf(
38-
"rbd create %s --size=%s --image-feature=layering %s",
39-
rbdImageName,
40-
staticPVSize,
41-
rbdOptions(defaultRBDPool))
42-
43-
_, stdErr, err := execCommandInToolBoxPod(f, cmd, rookNamespace)
44-
if err != nil {
45-
return err
46-
}
47-
if stdErr != "" {
48-
return fmt.Errorf("failed to create rbd image %s", stdErr)
49-
}
50-
51-
opt["migration"] = "true"
52-
opt["clusterID"] = getMonsHash(mon)
53-
opt["imageFeatures"] = staticPVImageFeature
54-
opt["pool"] = defaultRBDPool
55-
opt["staticVolume"] = strconv.FormatBool(true)
56-
opt["imageName"] = rbdImageName
57-
58-
// Make volumeID similar to the migration volumeID
59-
volID := composeIntreeMigVolID(mon, rbdImageName)
60-
pv := getStaticPV(
61-
pvName,
62-
volID,
63-
size,
64-
rbdNodePluginSecretName,
65-
cephCSINamespace,
66-
sc,
67-
provisionerAnnValue,
68-
isBlock,
69-
opt,
70-
PVAnnMap,
71-
deletePolicy)
72-
73-
_, err = c.CoreV1().PersistentVolumes().Create(context.TODO(), pv, metav1.CreateOptions{})
74-
if err != nil {
75-
return fmt.Errorf("PV Create API error: %w", err)
76-
}
77-
78-
pvc := getStaticPVC(pvcName, pvName, size, namespace, sc, isBlock)
79-
80-
_, err = c.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(context.TODO(), pvc, metav1.CreateOptions{})
81-
if err != nil {
82-
return fmt.Errorf("PVC Create API error: %w", err)
83-
}
84-
// bind pvc to app
85-
app, err := loadApp(appPath)
86-
if err != nil {
87-
return err
88-
}
89-
90-
app.Namespace = namespace
91-
app.Spec.Volumes[0].PersistentVolumeClaim.ClaimName = pvcName
92-
err = createApp(f.ClientSet, app, deployTimeout)
93-
if err != nil {
94-
return err
95-
}
96-
97-
err = deletePVCAndApp("", f, pvc, app)
98-
if err != nil {
99-
return fmt.Errorf("failed to delete PVC and application: %w", err)
100-
}
101-
102-
return err
103-
}
104-
10514
// composeIntreeMigVolID create a volID similar to intree migration volID
10615
// the migration volID format looks like below
10716
// mig-mons-<hash>-image-<UUID_<poolhash>
@@ -190,6 +99,7 @@ func createMigrationUserSecretAndSC(f *framework.Framework, scName string) error
19099
return nil
191100
}
192101

102+
// createMigrationSC create a SC with migration specific secrets and clusterid.
193103
func createMigrationSC(f *framework.Framework, scName string) error {
194104
err := deleteResource(rbdExamplePath + "storageclass.yaml")
195105
if err != nil {
@@ -203,6 +113,13 @@ func createMigrationSC(f *framework.Framework, scName string) error {
203113
param["csi.storage.k8s.io/controller-expand-secret-name"] = rbdMigrationProvisionerSecretName
204114
param["csi.storage.k8s.io/node-stage-secret-namespace"] = cephCSINamespace
205115
param["csi.storage.k8s.io/node-stage-secret-name"] = rbdMigrationNodePluginSecretName
116+
mons, err := getMons(rookNamespace, f.ClientSet)
117+
if err != nil {
118+
return fmt.Errorf("failed to get mons: %w", err)
119+
}
120+
mon := strings.Join(mons, ",")
121+
param["migration"] = "true"
122+
param["clusterID"] = getMonsHash(mon)
206123
err = createRBDStorageClass(f.ClientSet, f, scName, nil, param, deletePolicy)
207124
if err != nil {
208125
return fmt.Errorf("failed to create storageclass: %w", err)
@@ -274,3 +191,40 @@ func deleteProvNodeMigrationSecret(f *framework.Framework, provisionerSecret, no
274191

275192
return nil
276193
}
194+
195+
// setupMigrationCMSecretAndSC create custom configmap, secret and SC for migration tests.
196+
func setupMigrationCMSecretAndSC(f *framework.Framework, scName string) error {
197+
c := f.ClientSet
198+
if scName == "" {
199+
scName = defaultSCName
200+
}
201+
err := generateClusterIDConfigMapForMigration(f, c)
202+
if err != nil {
203+
return fmt.Errorf("failed to generate clusterID configmap: %w", err)
204+
}
205+
206+
err = createMigrationUserSecretAndSC(f, scName)
207+
if err != nil {
208+
return fmt.Errorf("failed to create storageclass: %w", err)
209+
}
210+
211+
return nil
212+
}
213+
214+
// tearDownMigrationSetup deletes custom configmap and secret.
215+
func tearDownMigrationSetup(f *framework.Framework) error {
216+
err := deleteConfigMap(rbdDirPath)
217+
if err != nil {
218+
return fmt.Errorf("failed to delete configmap: %w", err)
219+
}
220+
err = createConfigMap(rbdDirPath, f.ClientSet, f)
221+
if err != nil {
222+
return fmt.Errorf("failed to create configmap: %w", err)
223+
}
224+
err = deleteProvNodeMigrationSecret(f, true, true)
225+
if err != nil {
226+
return fmt.Errorf("failed to delete migration users and Secrets associated: %w", err)
227+
}
228+
229+
return nil
230+
}

e2e/rbd.go

Lines changed: 39 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -402,37 +402,58 @@ var _ = Describe("RBD", func() {
402402
}
403403
})
404404

405-
// todo: may be remove the below deletion test later once the migration nodestage tests are adjusted
406-
// also to have deletion validation through the same.
407-
By("validate RBD migration+static Block PVC Deletion", func() {
408-
err := generateClusterIDConfigMapForMigration(f, c)
405+
By("validate RBD migration PVC", func() {
406+
err := setupMigrationCMSecretAndSC(f, "")
409407
if err != nil {
410-
e2elog.Failf("failed to generate clusterID configmap: %v", err)
408+
e2elog.Failf("failed to setup migration prerequisites: %v", err)
411409
}
410+
err = validatePVCAndAppBinding(pvcPath, appPath, f)
411+
if err != nil {
412+
e2elog.Failf("failed to validate pvc and application binding: %v", err)
413+
}
414+
// validate created backend rbd images
415+
validateRBDImageCount(f, 0, defaultRBDPool)
412416

413-
// create a sc with different migration secret
414-
err = createMigrationUserSecretAndSC(f, "migrationsc")
417+
// Block PVC resize
418+
err = resizePVCAndValidateSize(rawPvcPath, rawAppPath, f)
415419
if err != nil {
416-
e2elog.Failf("failed to create storageclass: %v", err)
420+
e2elog.Failf("failed to resize block PVC: %v", err)
417421
}
418-
err = validateRBDStaticMigrationPVDeletion(f, rawAppPath, "migrationsc", true)
422+
423+
// FileSystem PVC resize
424+
err = resizePVCAndValidateSize(pvcPath, appPath, f)
419425
if err != nil {
420-
e2elog.Failf("failed to validate rbd migrated static block pv: %v", err)
426+
e2elog.Failf("failed to resize filesystem PVC: %v", err)
421427
}
422-
// validate created backend rbd images
423-
validateRBDImageCount(f, 0, defaultRBDPool)
424-
err = deleteConfigMap(rbdDirPath)
428+
err = deleteResource(rbdExamplePath + "storageclass.yaml")
425429
if err != nil {
426-
e2elog.Failf("failed to delete configmap: %v", err)
430+
e2elog.Failf("failed to delete storageclass: %v", err)
431+
}
432+
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, nil, deletePolicy)
433+
if err != nil {
434+
e2elog.Failf("failed to create storageclass: %v", err)
427435
}
428-
err = createConfigMap(rbdDirPath, f.ClientSet, f)
436+
err = tearDownMigrationSetup(f)
429437
if err != nil {
430-
e2elog.Failf("failed to create configmap: %v", err)
438+
e2elog.Failf("failed to tear down migration setup: %v", err)
431439
}
440+
})
432441

433-
err = deleteProvNodeMigrationSecret(f, true, true)
442+
By("validate RBD migration+static FileSystem", func() {
443+
err := setupMigrationCMSecretAndSC(f, "migrationsc")
444+
if err != nil {
445+
e2elog.Failf("failed to setup migration prerequisites: %v", err)
446+
}
447+
// validate filesystem pvc mount
448+
err = validateRBDStaticMigrationPVC(f, appPath, "migrationsc", false)
434449
if err != nil {
435-
e2elog.Failf("failed to delete migration users and Secrets associated: %v", err)
450+
e2elog.Failf("failed to validate rbd migrated static file mode pvc: %v", err)
451+
}
452+
// validate created backend rbd images
453+
validateRBDImageCount(f, 0, defaultRBDPool)
454+
err = tearDownMigrationSetup(f)
455+
if err != nil {
456+
e2elog.Failf("failed to tear down migration setup: %v", err)
436457
}
437458
err = createRBDStorageClass(f.ClientSet, f, defaultSCName, nil, nil, deletePolicy)
438459
if err != nil {
@@ -2117,72 +2138,6 @@ var _ = Describe("RBD", func() {
21172138
validateRBDImageCount(f, 0, defaultRBDPool)
21182139
})
21192140

2120-
By("validate RBD migration+static FileSystem PVC", func() {
2121-
err := generateClusterIDConfigMapForMigration(f, c)
2122-
if err != nil {
2123-
e2elog.Failf("failed to generate clusterID configmap: %v", err)
2124-
}
2125-
// create node user and migration secret.
2126-
err = createProvNodeCephUserAndSecret(f, false, true)
2127-
if err != nil {
2128-
e2elog.Failf("failed to create users and secret: %v", err)
2129-
}
2130-
2131-
err = validateRBDStaticMigrationPV(f, appPath, rbdMigrationNodePluginSecretName, false)
2132-
if err != nil {
2133-
e2elog.Failf("failed to validate rbd migrated static pv: %v", err)
2134-
}
2135-
// validate created backend rbd images
2136-
validateRBDImageCount(f, 0, defaultRBDPool)
2137-
2138-
err = deleteProvNodeMigrationSecret(f, false, true)
2139-
if err != nil {
2140-
e2elog.Failf("failed to delete users and secret: %v", err)
2141-
}
2142-
2143-
err = deleteConfigMap(rbdDirPath)
2144-
if err != nil {
2145-
e2elog.Failf("failed to delete configmap: %v", err)
2146-
}
2147-
err = createConfigMap(rbdDirPath, f.ClientSet, f)
2148-
if err != nil {
2149-
e2elog.Failf("failed to create configmap: %v", err)
2150-
}
2151-
})
2152-
2153-
By("validate RBD migration+static Block PVC", func() {
2154-
err := generateClusterIDConfigMapForMigration(f, c)
2155-
if err != nil {
2156-
e2elog.Failf("failed to generate clusterID configmap: %v", err)
2157-
}
2158-
// create node user and migration secret.
2159-
err = createProvNodeCephUserAndSecret(f, false, true)
2160-
if err != nil {
2161-
e2elog.Failf("failed to create users and secret: %v", err)
2162-
}
2163-
2164-
err = validateRBDStaticMigrationPV(f, rawAppPath, rbdMigrationNodePluginSecretName, true)
2165-
if err != nil {
2166-
e2elog.Failf("failed to validate rbd migrated static block pv: %v", err)
2167-
}
2168-
// validate created backend rbd images
2169-
validateRBDImageCount(f, 0, defaultRBDPool)
2170-
2171-
err = deleteProvNodeMigrationSecret(f, false, true)
2172-
if err != nil {
2173-
e2elog.Failf("failed to delete users and secret: %v", err)
2174-
}
2175-
2176-
err = deleteConfigMap(rbdDirPath)
2177-
if err != nil {
2178-
e2elog.Failf("failed to delete configmap: %v", err)
2179-
}
2180-
err = createConfigMap(rbdDirPath, f.ClientSet, f)
2181-
if err != nil {
2182-
e2elog.Failf("failed to create configmap: %v", err)
2183-
}
2184-
})
2185-
21862141
By("validate failure of RBD static PVC without imageFeatures parameter", func() {
21872142
err := validateRBDStaticPV(f, rawAppPath, true, true)
21882143
if err != nil {

0 commit comments

Comments
 (0)