]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Fix status comparison for attached volume backup
authorLin Yang <lin.a.yang@intel.com>
Mon, 3 Aug 2015 07:28:15 +0000 (15:28 +0800)
committerLin Yang <lin.a.yang@intel.com>
Mon, 3 Aug 2015 09:40:34 +0000 (17:40 +0800)
1) When do backup for an attached volume, its previous_status should be
'in-use' instead of 'in_use'.
2) Added more assertions in corresponding unittest case for this function
to make sure it enter this if-block. Previous test case was passed even
with the incorrect status.

Change-Id: I80385aa593aea5d749409bf591e5a3c5f8ed478f
Closes-Bug: #1480734

cinder/tests/unit/test_volume.py
cinder/volume/driver.py

index a01029073ecfec9878d5ccffe351a0219a03b2fc..c20930ade710d04fdef50e620382e59dd72072df 100644 (file)
@@ -5607,7 +5607,8 @@ class GenericVolumeDriverTestCase(DriverTestCase):
                                  mock_file_open,
                                  mock_temporary_chown):
         vol = tests_utils.create_volume(self.context)
-        vol['status'] = 'in-use'
+        vol['previous_status'] = 'in-use'
+        temp_vol = tests_utils.create_volume(self.context)
         self.context.user_id = 'fake'
         self.context.project_id = 'fake'
         backup = tests_utils.create_backup(self.context,
@@ -5620,11 +5621,11 @@ class GenericVolumeDriverTestCase(DriverTestCase):
         self.volume.driver._attach_volume = mock.MagicMock()
         self.volume.driver._detach_volume = mock.MagicMock()
         self.volume.driver.terminate_connection = mock.MagicMock()
-        self.volume.driver.create_snapshot = mock.MagicMock()
-        self.volume.driver.delete_snapshot = mock.MagicMock()
-        self.volume.driver.create_volume_from_snapshot = mock.MagicMock()
+        self.volume.driver._create_temp_cloned_volume = mock.MagicMock()
+        self.volume.driver._delete_volume = mock.MagicMock()
 
         mock_volume_get.return_value = vol
+        self.volume.driver._create_temp_cloned_volume.return_value = temp_vol
         mock_get_connector_properties.return_value = properties
         f = mock_file_open.return_value = file('/dev/null')
 
@@ -5635,6 +5636,10 @@ class GenericVolumeDriverTestCase(DriverTestCase):
                                          backup_service)
 
         mock_volume_get.assert_called_with(self.context, vol['id'])
+        self.volume.driver._create_temp_cloned_volume.assert_called_once_with(
+            self.context, vol)
+        self.volume.driver._delete_volume.assert_called_once_with(self.context,
+                                                                  temp_vol)
 
     def test_restore_backup(self):
         vol = tests_utils.create_volume(self.context)
@@ -6141,10 +6146,14 @@ class LVMVolumeDriverTestCase(DriverTestCase):
                                  mock_get_connector_properties,
                                  mock_file_open,
                                  mock_temporary_chown):
+
         vol = tests_utils.create_volume(self.context)
-        vol['status'] = 'in-use'
+        vol['previous_status'] = 'in-use'
         self.context.user_id = 'fake'
         self.context.project_id = 'fake'
+
+        mock_volume_get.return_value = vol
+        temp_snapshot = tests_utils.create_snapshot(self.context, vol['id'])
         backup = tests_utils.create_backup(self.context,
                                            vol['id'])
         backup_obj = objects.Backup.get_by_id(self.context, backup.id)
@@ -6155,20 +6164,24 @@ class LVMVolumeDriverTestCase(DriverTestCase):
         self.volume.driver._detach_volume = mock.MagicMock()
         self.volume.driver._attach_volume = mock.MagicMock()
         self.volume.driver.terminate_connection = mock.MagicMock()
-        self.volume.driver.create_snapshot = mock.MagicMock()
-        self.volume.driver.delete_snapshot = mock.MagicMock()
+        self.volume.driver._create_temp_snapshot = mock.MagicMock()
+        self.volume.driver._delete_snapshot = mock.MagicMock()
 
-        mock_volume_get.return_value = vol
         mock_get_connector_properties.return_value = properties
         f = mock_file_open.return_value = file('/dev/null')
 
         backup_service.backup(backup_obj, f, None)
         self.volume.driver._attach_volume.return_value = attach_info
+        self.volume.driver._create_temp_snapshot.return_value = temp_snapshot
 
         self.volume.driver.backup_volume(self.context, backup_obj,
                                          backup_service)
 
         mock_volume_get.assert_called_with(self.context, vol['id'])
+        self.volume.driver._create_temp_snapshot.assert_called_once_with(
+            self.context, vol)
+        self.volume.driver._delete_snapshot.assert_called_once_with(
+            self.context, temp_snapshot)
 
     def test_create_volume_from_snapshot_none_sparse(self):
 
index 2d3bdbc279d0e5a8cd32c5e400caa7aa3933913c..71936b2d41455bbe3830aa19e03f2d4c9fa8fc70 100644 (file)
@@ -756,7 +756,7 @@ class BaseVD(object):
         # volume.
         previous_status = volume.get('previous_status', None)
         temp_vol_ref = None
-        if previous_status == "in_use":
+        if previous_status == "in-use":
             temp_vol_ref = self._create_temp_cloned_volume(
                 context, volume)
             backup.temp_volume_id = temp_vol_ref['id']