]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
add error flow tests for volume detach
authorLiang Chen <cbjchen@cn.ibm.com>
Fri, 31 May 2013 02:56:18 +0000 (10:56 +0800)
committerLiang Chen <cbjchen@cn.ibm.com>
Fri, 31 May 2013 03:06:36 +0000 (11:06 +0800)
engine.resources.volume.VolumeAttachment lacks tests for some
exception flows

Fixes bug #1183239

Change-Id: I3d84fadb1ff60c622fbfbd634e003aaab382b405

heat/tests/test_volume.py

index b49c4f37aa193fb97929e0b2c2f79348bbedcd88..9a490bb29e85bf08b471d585e8aad26d8548de04 100644 (file)
@@ -257,6 +257,67 @@ class VolumeTest(HeatTestCase):
 
         self.m.VerifyAll()
 
+    def test_volume_detachment_err(self):
+        fv = FakeVolume('creating', 'available')
+        fva = FakeVolume('in-use', 'available')
+        stack_name = 'test_volume_detach_stack'
+
+        # volume create
+        clients.OpenStackClients.cinder().MultipleTimes().AndReturn(
+            self.cinder_fc)
+        self.cinder_fc.volumes.create(
+            size=u'1', availability_zone='nova',
+            display_description='%s.DataVolume' % stack_name,
+            display_name='%s.DataVolume' % stack_name).AndReturn(fv)
+
+        # create script
+        clients.OpenStackClients.nova().MultipleTimes().AndReturn(self.fc)
+        self.fc.volumes.create_server_volume(
+            device=u'/dev/vdc',
+            server_id=u'WikiDatabase',
+            volume_id=u'vol-123').AndReturn(fva)
+
+        self.cinder_fc.volumes.get('vol-123').AndReturn(fva)
+
+        # delete script
+        fva = FakeVolume('i-use', 'available')
+        self.m.StubOutWithMock(fva, 'get')
+        fva.get().MultipleTimes()
+        fva.status = "in-use"
+
+        self.cinder_fc.volumes.get('vol-123').AndReturn(fva)
+
+        self.fc.volumes.delete_server_volume(
+            'WikiDatabase', 'vol-123').AndRaise(
+                clients.novaclient.exceptions.NotFound('Not found'))
+
+        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
+        self.fc.volumes.delete_server_volume(
+            'WikiDatabase', 'vol-123').AndRaise(
+                clients.novaclient.exceptions.NotFound('Not found'))
+
+        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
+        self.fc.volumes.delete_server_volume(
+            'WikiDatabase', 'vol-123').AndRaise(
+                clients.cinderclient.exceptions.NotFound('Not found'))
+
+        self.m.ReplayAll()
+
+        t = template_format.parse(volume_template)
+        t['Resources']['DataVolume']['Properties']['AvailabilityZone'] = 'nova'
+        stack = parse_stack(t, stack_name=stack_name)
+
+        scheduler.TaskRunner(stack['DataVolume'].create)()
+        self.assertEqual(fv.status, 'available')
+        rsrc = self.create_attachment(t, stack, 'MountPoint')
+
+        self.assertRaises(resource.UpdateReplace,
+                          rsrc.handle_update, {}, {}, {})
+
+        self.assertEqual(rsrc.delete(), None)
+
+        self.m.VerifyAll()
+
     @skipIf(volume_backups is None, 'unable to import volume_backups')
     def test_snapshot(self):
         stack_name = 'test_volume_stack'