Package yakumo :: Package smoketests :: Module st40_volume_snapshot
[hide private]
[frames] | no frames]

Source Code for Module yakumo.smoketests.st40_volume_snapshot

  1  #!/usr/bin/env python 
  2  # 
  3  # Copyright 2014-2017 by Akira Yoshiyama <akirayoshiyama@gmail.com>. 
  4  # All Rights Reserved. 
  5  # 
  6  #    Licensed under the Apache License, Version 2.0 (the "License"); you may 
  7  #    not use this file except in compliance with the License. You may obtain 
  8  #    a copy of the License at 
  9  # 
 10  #         http://www.apache.org/licenses/LICENSE-2.0 
 11  # 
 12  #    Unless required by applicable law or agreed to in writing, software 
 13  #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 
 14  #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 
 15  #    License for the specific language governing permissions and limitations 
 16  #    under the License. 
 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