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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
import ddt
from cnslibs.common.cns_libs import (
enable_pvc_resize)
from cnslibs.common.heketi_ops import (
verify_volume_name_prefix)
from cnslibs.common.openshift_ops import (
resize_pvc,
get_pod_name_from_dc,
get_pv_name_from_pvc,
oc_create_app_dc_with_io,
oc_create_pvc,
oc_create_secret,
oc_create_sc,
oc_delete,
oc_rsh,
oc_version,
scale_dc_pod_amount_and_wait,
verify_pv_size,
verify_pvc_size,
verify_pvc_status_is_bound,
wait_for_pod_be_ready,
wait_for_resource_absence)
from cnslibs.cns.cns_baseclass import CnsBaseClass
from glusto.core import Glusto as g
@ddt.ddt
class TestPvResizeClass(CnsBaseClass):
'''
Class that contain test cases for
pv resize
'''
@classmethod
def setUpClass(cls):
super(TestPvResizeClass, cls).setUpClass()
version = oc_version(cls.ocp_master_node[0])
if any(v in version for v in ("3.6", "3.7", "3.8")):
return
enable_pvc_resize(cls.ocp_master_node[0])
def setUp(self):
super(TestPvResizeClass, self).setUp()
version = oc_version(self.ocp_master_node[0])
if any(v in version for v in ("3.6", "3.7", "3.8")):
msg = ("pv resize is not available in openshift "
"version %s " % version)
g.log.error(msg)
raise self.skipTest(msg)
def _create_storage_class(self, volname_prefix=False):
sc = self.cns_storage_class['storage_class1']
secret = self.cns_secret['secret1']
# create secret
self.secret_name = oc_create_secret(
self.ocp_master_node[0],
namespace=secret['namespace'],
data_key=self.heketi_cli_key,
secret_type=secret['type'])
self.addCleanup(
oc_delete, self.ocp_master_node[0], 'secret', self.secret_name)
# create storageclass
self.sc_name = oc_create_sc(
self.ocp_master_node[0], provisioner='kubernetes.io/glusterfs',
resturl=sc['resturl'], restuser=sc['restuser'],
secretnamespace=sc['secretnamespace'],
secretname=self.secret_name,
allow_volume_expansion=True,
**({"volumenameprefix": sc['volumenameprefix']}
if volname_prefix else {})
)
self.addCleanup(oc_delete, self.ocp_master_node[0], 'sc', self.sc_name)
return self.sc_name
@ddt.data(False, True)
def test_pv_resize_with_prefix_for_name(self, volname_prefix=False):
"""testcases CNS-1037 and CNS-1038 """
dir_path = "/mnt/"
self._create_storage_class(volname_prefix)
node = self.ocp_master_node[0]
# Create PVC
pvc_name = oc_create_pvc(node, self.sc_name, pvc_size=1)
self.addCleanup(wait_for_resource_absence,
node, 'pvc', pvc_name)
self.addCleanup(oc_delete, node, 'pvc', pvc_name)
verify_pvc_status_is_bound(node, pvc_name)
# Create DC with POD and attached PVC to it.
dc_name = oc_create_app_dc_with_io(node, pvc_name)
self.addCleanup(oc_delete, node, 'dc', dc_name)
self.addCleanup(scale_dc_pod_amount_and_wait,
node, dc_name, 0)
pod_name = get_pod_name_from_dc(node, dc_name)
wait_for_pod_be_ready(node, pod_name)
if volname_prefix:
storage_class = self.cns_storage_class['storage_class1']
ret = verify_volume_name_prefix(node,
storage_class['volumenameprefix'],
storage_class['secretnamespace'],
pvc_name, self.heketi_server_url)
self.assertTrue(ret, "verify volnameprefix failed")
cmd = ("dd if=/dev/urandom of=%sfile "
"bs=100K count=1000") % dir_path
ret, out, err = oc_rsh(node, pod_name, cmd)
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, node))
cmd = ("dd if=/dev/urandom of=%sfile2 "
"bs=100K count=10000") % dir_path
ret, out, err = oc_rsh(node, pod_name, cmd)
self.assertNotEqual(ret, 0, " This IO did not fail as expected "
"command %s on %s" % (cmd, node))
pvc_size = 2
resize_pvc(node, pvc_name, pvc_size)
verify_pvc_size(node, pvc_name, pvc_size)
pv_name = get_pv_name_from_pvc(node, pvc_name)
verify_pv_size(node, pv_name, pvc_size)
oc_delete(node, 'pod', pod_name)
wait_for_resource_absence(node, 'pod', pod_name)
pod_name = get_pod_name_from_dc(node, dc_name)
wait_for_pod_be_ready(node, pod_name)
cmd = ("dd if=/dev/urandom of=%sfile_new "
"bs=50K count=10000") % dir_path
ret, out, err = oc_rsh(node, pod_name, cmd)
self.assertEqual(ret, 0, "failed to execute command %s on %s" % (
cmd, node))
|