forked from IBM/ibm-csi-common
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_statefulset.go
66 lines (58 loc) · 2.11 KB
/
test_statefulset.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* Copyright 2021 IBM Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package testsuites
import (
. "github.com/onsi/ginkgo"
v1 "k8s.io/api/core/v1"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/kubernetes/test/e2e/framework"
)
//Statefulset will provision required PVC and pods
// Testing if the Pod can write and read to mounted volumes
//Drain a node and again testing if the Pod can write and read to mounted volumes
type StatefulsetWithVolWRTest struct {
Pod PodDetails
PodCheck *PodExecCheck
Labels map[string]string
ReplicaCount int32
ServiceName string
}
func (t *StatefulsetWithVolWRTest) Run(client clientset.Interface, namespace *v1.Namespace, drainNode bool) {
tStatefulset, cleanup := t.Pod.SetupStatefulset(client, namespace, t.ServiceName, t.Labels, t.ReplicaCount)
// defer must be called here for resources not get removed before using them
for i := range cleanup {
defer cleanup[i]()
}
newstatefulSet := framework.NewStatefulSetTester(client)
By("deploying the statefulset")
tStatefulset.Create(newstatefulSet)
By("checking that the pod(s) is/are running")
tStatefulset.WaitForPodReady(newstatefulSet)
if t.PodCheck != nil {
By("checking pod exec before pod delete")
tStatefulset.Exec(t.PodCheck.Cmd, t.PodCheck.ExpectedString01)
}
if drainNode == true {
tStatefulset.drainNode()
defer tStatefulset.uncordonNode()
By("checking again that the pod(s) is/are running")
tStatefulset.WaitForPodReady(newstatefulSet)
if t.PodCheck != nil {
By("checking pod exec after pod recreate")
tStatefulset.Exec(t.PodCheck.Cmd, t.PodCheck.ExpectedString01)
}
}
}