summaryrefslogtreecommitdiffstats
path: root/qa/workunits/rbd/rbd_groups.sh
blob: a3261848441f046ee53a9ce1dcafe352e9156d6a (plain)
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
#!/usr/bin/env bash

set -ex

#
# rbd_consistency_groups.sh - test consistency groups cli commands
#

#
# Functions
#

create_group()
{
    local group_name=$1

    rbd group create $group_name
}

list_groups()
{
    rbd group list
}

check_group_exists()
{
    local group_name=$1
    list_groups | grep $group_name
}

remove_group()
{
    local group_name=$1

    rbd group remove $group_name
}

rename_group()
{
    local src_name=$1
    local dest_name=$2

    rbd group rename $src_name $dest_name
}

check_group_does_not_exist()
{
    local group_name=$1
    for v in $(list_groups); do
        if [ "$v" == "$group_name" ]; then
            return 1
        fi
    done
    return 0
}

create_image()
{
    local image_name=$1
    rbd create --size 10M $image_name
}

remove_image()
{
    local image_name=$1
    rbd remove $image_name
}

add_image_to_group()
{
    local image_name=$1
    local group_name=$2
    rbd group image add $group_name $image_name
}

remove_image_from_group()
{
    local image_name=$1
    local group_name=$2
    rbd group image remove $group_name $image_name
}

check_image_in_group()
{
    local image_name=$1
    local group_name=$2
    for v in $(rbd group image list $group_name); do
        local vtrimmed=${v#*/}
        if [ "$vtrimmed" = "$image_name" ]; then
            return 0
        fi
    done
    return 1
}

check_image_not_in_group()
{
    local image_name=$1
    local group_name=$2
    for v in $(rbd group image list $group_name); do
        local vtrimmed=${v#*/}
        if [ "$vtrimmed" = "$image_name" ]; then
            return 1
        fi
    done
    return 0
}

create_snapshot()
{
    local group_name=$1
    local snap_name=$2
    rbd group snap create $group_name@$snap_name
}

create_snapshots()
{
    local group_name=$1
    local snap_name=$2
    local snap_count=$3
    for i in `seq 1 $snap_count`; do
        rbd group snap create $group_name@$snap_name$i
    done
}

remove_snapshot()
{
    local group_name=$1
    local snap_name=$2
    rbd group snap remove $group_name@$snap_name
}

remove_snapshots()
{
    local group_name=$1
    local snap_name=$2
    local snap_count=$3
    for i in `seq 1 $snap_count`; do
        rbd group snap remove $group_name@$snap_name$i
    done
}

rename_snapshot()
{
    local group_name=$1
    local snap_name=$2
    local new_snap_name=$3
    rbd group snap rename $group_name@$snap_name $new_snap_name
}

list_snapshots()
{
    local group_name=$1
    rbd group snap list $group_name
}

rollback_snapshot()
{
    local group_name=$1
    local snap_name=$2
    rbd group snap rollback $group_name@$snap_name
}

check_snapshot_in_group()
{
    local group_name=$1
    local snap_name=$2
    list_snapshots $group_name | grep $snap_name
}

check_snapshots_count_in_group()
{
    local group_name=$1
    local snap_name=$2
    local expected_count=$3
    local actual_count
    actual_count=$(list_snapshots $group_name | grep -c $snap_name)
    (( actual_count == expected_count ))
}

check_snapshot_not_in_group()
{
    local group_name=$1
    local snap_name=$2
    for v in $(list_snapshots $group_name | awk '{print $1}'); do
        if [ "$v" = "$snap_name" ]; then
            return 1
        fi
    done
    return 0
}

echo "TEST: create remove consistency group"
group="test_consistency_group"
new_group="test_new_consistency_group"
create_group $group
check_group_exists $group
rename_group $group $new_group
check_group_exists $new_group
remove_group $new_group
check_group_does_not_exist $new_group
echo "PASSED"

echo "TEST: add remove images to consistency group"
image="test_image"
group="test_consistency_group"
create_image $image
create_group $group
add_image_to_group $image $group
check_image_in_group $image $group
remove_image_from_group $image $group
check_image_not_in_group $image $group
remove_group $group
remove_image $image
echo "PASSED"

echo "TEST: create remove snapshots of consistency group"
image="test_image"
group="test_consistency_group"
snap="group_snap"
new_snap="new_group_snap"
sec_snap="group_snap2"
create_image $image
create_group $group
add_image_to_group $image $group
create_snapshot $group $snap
check_snapshot_in_group $group $snap
rename_snapshot $group $snap $new_snap
check_snapshot_not_in_group $group $snap
create_snapshot $group $sec_snap
check_snapshot_in_group $group $sec_snap
rollback_snapshot $group $new_snap
remove_snapshot $group $new_snap
check_snapshot_not_in_group $group $new_snap
remove_snapshot $group $sec_snap
check_snapshot_not_in_group $group $sec_snap
remove_group $group
remove_image $image
echo "PASSED"

echo "TEST: list snapshots of consistency group"
image="test_image"
group="test_consistency_group"
snap="group_snap"
create_image $image
create_group $group
add_image_to_group $image $group
create_snapshots $group $snap 10
check_snapshots_count_in_group $group $snap 10
remove_snapshots $group $snap 10
create_snapshots $group $snap 100
check_snapshots_count_in_group $group $snap 100
remove_snapshots $group $snap 100
remove_group $group
remove_image $image
echo "PASSED"

echo "OK"