1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 """Block Storage API Test (Volumes/Snapshots)"""
18
19
20 from yakumo.smoketest import *
21 from yakumo import utils
22
23
24 IMAGE_NAME = 'cirros'
25
26
27 -def main(c, image=None):
28
29 LOG.debug("image: %s", image)
30
31 LOG.info("Create Volume #1")
32 name = get_random_str('volume')
33 metadata = {'foo': 'bar', 'foo2': 'bar2'}
34 with c.volume.create(name=name,
35 description="volume 1",
36 source=image,
37 metadata=metadata,
38 size=1) as v1:
39
40 test("Volume #1 is created", v1 is not None)
41
42 LOG.debug("wait for created")
43 v1.wait_for_finished()
44
45 test("Volume #1 name is " + name, v1.name == name)
46 test("Volume #1 is available", v1.status == 'available')
47 test("Volume #1 source is the image", v1.source_image == image)
48
49 LOG.debug("Initial metadata: %s", v1.metadata)
50 test("Metadata has %s" % metadata, v1.metadata == metadata)
51
52 m = {'foo2': 'bar4', 'foo3': 'bar3'}
53 LOG.debug("Set metadata : %s", m)
54 metadata.update(m)
55 v1.set_metadata(**m)
56 LOG.debug("Updated metadata: %s", v1.metadata)
57 test("Metadata has %s" % metadata, v1.metadata == metadata)
58
59 m = ['foo', 'foo2']
60 LOG.debug("Unset metadata : %s", m)
61 for key in m:
62 metadata.pop(key)
63 v1.unset_metadata(*m)
64 LOG.debug("Updated metadata: %s", v1.metadata)
65 test("Metadata has %s" % metadata, v1.metadata == metadata)
66
67 LOG.info("Create Snapshot #1 from Volume #1")
68 name = get_random_str('snapshot')
69 metadata = {'foo': 'bar', 'foo2': 'bar2'}
70 with c.volume_snapshot.create(name=name,
71 description="snapshot 1",
72 metadata=metadata,
73 force=True,
74 source=v1) as s:
75
76 test("Snapshot #1 is created", s is not None)
77
78 LOG.debug("wait for created")
79 s.wait_for_finished()
80
81 test("Snapshot #1 name is " + name, s.name == name)
82 test("Snapshot #1 is available", s.status == 'available')
83 test("Snapshot #1 source is Volume #1", s.source == v1)
84
85 LOG.debug("Initial metadata: %s", s.metadata)
86 test("Metadata has %s" % metadata, s.metadata == metadata)
87
88 m = {'foo2': 'bar4', 'foo3': 'bar3'}
89 LOG.debug("Set metadata : %s", m)
90 metadata.update(m)
91 s.set_metadata(**m)
92 LOG.debug("Updated metadata: %s", s.metadata)
93 test("Metadata has %s" % metadata, s.metadata == metadata)
94
95 m = ['foo', 'foo2']
96 LOG.debug("Unset metadata : %s", m)
97 for key in m:
98 metadata.pop(key)
99 s.unset_metadata(*m)
100 LOG.debug("Updated metadata: %s", s.metadata)
101 test("Metadata has %s" % metadata, s.metadata == metadata)
102
103 LOG.info("Create Volume #2 from Snapshot #1")
104 name = get_random_str('volume')
105 with c.volume.create(name=name,
106 description="volume 2",
107 source=s) as v2:
108
109 test("Volume #2 is created", v2 is not None)
110
111 LOG.debug("wait for created")
112 v2.wait_for_finished()
113
114 test("Volume #2 name is " + name, v2.name == name)
115 test("Volume #2 is available", v2.status == 'available')
116 test("Volume #2 source is Snapshot #1",
117 v2.source_snapshot == s)
118
119 test("Volume #2 is deleted", v2 not in c.volume.list())
120
121 test("Snapshot #1 is deleted", s not in c.volume.list())
122
123 LOG.info("Create Volume #3 from Volume #1")
124 name = get_random_str('volume')
125 with c.volume.create(name=name,
126 description="volume 3", source=v1) as v3:
127
128 test("Volume #3 is created", v3 is not None)
129
130 LOG.debug("wait for created")
131 v3.wait_for_finished()
132
133 test("Volume #3 name is " + name, v3.name == name)
134 test("Volume #3 is available", v3.status == 'available')
135 test("Volume #3 source is Volume #1", v3.source_volume == v1)
136
137 test("Volume #3 is deleted", v3 not in c.volume.list())
138
139 test("Volume #1 is deleted", v1 not in c.volume.list())
140
141
142 if __name__ == '__main__':
143 c = utils.get_client()
144 i = c.image.find_one(name=IMAGE_NAME)
145
146 LOG.debug("list volumes: %s", [_.name for _ in c.volume.list()])
147 LOG.debug("list snapshots: %s", [_.name for _ in c.volume_snapshot.list()])
148 main(c, image=i)
149 LOG.debug("list volumes: %s", [_.name for _ in c.volume.list()])
150 LOG.debug("list snapshots: %s", [_.name for _ in c.volume_snapshot.list()])
151
152 show_test_summary()
153