def test__snapshot_removed_not_present(self): vol = objects.Volume(self.backend, name='vol_name', description='vol_desc', size=10) snap = objects.Snapshot(vol) snap2 = objects.Snapshot(vol) vol._snapshots = [snap2] vol._ovo.snapshots.objects = [snap2._ovo] # Just check it doesn't break or remove any other snaps vol._snapshot_removed(snap) self.assertEqual([snap2], vol._snapshots) self.assertEqual([snap2._ovo], vol._ovo.snapshots.objects)
def test__snapshot_removed(self): vol = objects.Volume(self.backend, name='vol_name', description='vol_desc', size=10) snap = objects.Snapshot(vol) snap2 = objects.Snapshot(vol) snap_other_instance = objects.Snapshot(vol, id=snap.id, description='d') snap_other_instance2 = objects.Snapshot(vol, id=snap.id, description='e') vol._snapshots = [snap2, snap_other_instance] vol._ovo.snapshots.objects = [snap2._ovo, snap_other_instance2._ovo] # Just check it doesn't break or remove any other snaps vol._snapshot_removed(snap) self.assertEqual([snap2], vol._snapshots) self.assertEqual([snap2._ovo], vol._ovo.snapshots.objects)
def test__snapshot_removed_not_loaded(self): vol = objects.Volume(self.backend, name='vol_name', description='vol_desc', size=10) vol._snapshots = None snap = objects.Snapshot(vol) # Just check it doesn't break vol._snapshot_removed(snap)
def test_snap_to_and_from(self): vol = objects.Volume(self.backend, size=10) snap = objects.Snapshot(vol, name='disk') json_data = snap.json # Confirm vol.json property is equivalent to the non simplified version self.assertEqual(json_data, snap.to_json(simplified=False)) snap2 = objects.Snapshot.load(json_data) self.assertEqual(snap.json, snap2.json)
def get_snapshots(self, snapshot_id=None, snapshot_name=None, volume_id=None): filters = self._build_filter(id=snapshot_id, volume_id=volume_id, display_name=snapshot_name) LOG.debug('get_snapshots for %s', filters) ovos = cinder_objs.SnapshotList.get_all(objects.CONTEXT, filters=filters) result = [objects.Snapshot(None, __ovo=ovo) for ovo in ovos.objects] return result
def setUp(self): super(TestSnapshot, self).setUp() self.vol = objects.Volume(self.backend_name, size=10, extra_specs={'e': 'v'}, qos_specs={'q': 'qv'}) self.snap = objects.Snapshot(self.vol, name='my_snap', description='my_desc') self.vol._snapshots.append(self.snap) self.vol._ovo.snapshots.objects.append(self.snap._ovo)
def test_vol_to_and_from(self): vol = objects.Volume(self.backend, size=10) snap = objects.Snapshot(vol, name='disk') # Associate the snapshot with the volume vol._snapshots = None with mock.patch.object(vol.persistence, 'get_snapshots', return_value=[snap]): vol.snapshots self.assertEqual(1, len(vol.snapshots)) json_data = vol.json # Confirm vol.json property is equivalent to the non simplified version self.assertEqual(json_data, vol.to_json(simplified=False)) vol2 = objects.Volume.load(json_data) # Check snapshots are recovered as well self.assertEqual(1, len(vol2.snapshots)) self.assertEqual(vol.json, vol2.json)
def test_snapshots_lazy_loading(self): vol = objects.Volume(self.backend, size=10) vol._snapshots = None snaps = [objects.Snapshot(vol, name='my_snap')] # Persistence retrieves Snapshots without the Volume, just volume_id snaps[0]._ovo.volume = None mock_get_snaps = self.persistence.get_snapshots mock_get_snaps.return_value = snaps result = vol.snapshots mock_get_snaps.called_once_with(vol.id) self.assertEqual(snaps, result) self.assertEqual(snaps, vol._snapshots) self.assertEqual(1, len(vol._ovo.snapshots)) self.assertEqual(vol._ovo.snapshots[0], result[0]._ovo) # There is no second call when we reference it again mock_get_snaps.reset_mock() result = vol.snapshots self.assertEqual(snaps, result) mock_get_snaps.not_called()
def test_init_from_ovo(self): snap2 = objects.Snapshot(None, __ovo=self.snap._ovo) self.assertEqual(self.snap.backend, snap2.backend) self.assertEqual(self.snap._ovo, snap2._ovo) self.assertEqual(self.vol, self.snap.volume)
def test_delete_error_with_snaps(self): vol = objects.Volume(self.backend_name, size=10, status='available') snap = objects.Snapshot(vol) vol._snapshots.append(snap) self.assertRaises(exception.InvalidVolume, vol.delete) self.assertEqual('available', vol._ovo.status)