def test_rbd_volume_proxy_init(self): snap = u'snapshot-name' client = self.mock_client.return_value client.__enter__.return_value = client with mock.patch.object(self.driver, '_connect_to_rados') as \ mock_connect_from_rados: with mock.patch.object(self.driver, '_disconnect_from_rados') as \ mock_disconnect_from_rados: mock_connect_from_rados.return_value = (None, None) mock_disconnect_from_rados.return_value = (None, None) with driver.RBDVolumeProxy(self.driver, self.volume_name): mock_connect_from_rados.assert_called_once() self.assertFalse(mock_disconnect_from_rados.called) mock_disconnect_from_rados.assert_called_once() mock_connect_from_rados.reset_mock() mock_disconnect_from_rados.reset_mock() with driver.RBDVolumeProxy(self.driver, self.volume_name, snapshot=snap): mock_connect_from_rados.assert_called_once() self.assertFalse(mock_disconnect_from_rados.called) mock_disconnect_from_rados.assert_called_once()
def test_rbd_volume_proxy_init(self): name = u'volume-00000001' snap = u'snapshot-name' self.stubs.Set(self.driver, '_connect_to_rados', lambda x: (None, None)) self.mox.StubOutWithMock(self.driver, '_disconnect_from_rados') # no snapshot self.rbd.Image(None, str(name), snapshot=None, read_only=False) \ .AndReturn(None) # snapshot self.rbd.Image(None, str(name), snapshot=str(snap), read_only=True) \ .AndReturn(None) # error causes disconnect self.stubs.Set(self.rbd, 'Error', test.TestingException) self.rbd.Image(None, str(name), snapshot=None, read_only=False) \ .AndRaise(test.TestingException) self.driver._disconnect_from_rados(None, None) self.mox.ReplayAll() driver.RBDVolumeProxy(self.driver, name) driver.RBDVolumeProxy(self.driver, name, snapshot=snap, read_only=True) self.assertRaises(test.TestingException, driver.RBDVolumeProxy, self.driver, name)
def test_rbd_volume_proxy_init(self): mock_driver = mock.Mock(name='driver') mock_driver._connect_to_rados.return_value = (None, None) with driver.RBDVolumeProxy(mock_driver, self.volume_name): self.assertEqual(1, mock_driver._connect_to_rados.call_count) self.assertFalse(mock_driver._disconnect_from_rados.called) self.assertEqual(1, mock_driver._disconnect_from_rados.call_count) mock_driver.reset_mock() snap = u'snapshot-name' with driver.RBDVolumeProxy(mock_driver, self.volume_name, snapshot=snap): self.assertEqual(1, mock_driver._connect_to_rados.call_count) self.assertFalse(mock_driver._disconnect_from_rados.called) self.assertEqual(1, mock_driver._disconnect_from_rados.call_count)
def test_uncloneable_unreadable(self): self.stubs.Set(self.driver, '_get_fsid', lambda: 'abc') location = 'rbd://abc/pool/image/snap' self.stubs.Set(self.rbd, 'Error', test.TestingException) self.mox.StubOutWithMock(driver, 'RBDVolumeProxy') driver.RBDVolumeProxy(self.driver, 'image', pool='pool', snapshot='snap', read_only=True).AndRaise(test.TestingException) self.mox.ReplayAll() self.assertFalse(self.driver._is_cloneable(location))
def test_cloneable(self): self.stubs.Set(self.driver, '_get_fsid', lambda: 'abc') location = 'rbd://abc/pool/image/snap' mock_proxy = self.mox.CreateMockAnything() self.mox.StubOutWithMock(driver, 'RBDVolumeProxy') driver.RBDVolumeProxy(self.driver, 'image', pool='pool', snapshot='snap', read_only=True).AndReturn(mock_proxy) mock_proxy.__enter__().AndReturn(mock_proxy) mock_proxy.__exit__(None, None, None).AndReturn(None) self.mox.ReplayAll() self.assertTrue(self.driver._is_cloneable(location))
def test_create_cloned_volume(self): src_name = u'volume-00000001' dst_name = u'volume-00000002' mock_proxy = self.mox.CreateMockAnything() mock_proxy.ioctx = self.mox.CreateMockAnything() self.mox.StubOutWithMock(driver, 'RBDVolumeProxy') driver.RBDVolumeProxy(self.driver, src_name, read_only=True) \ .AndReturn(mock_proxy) mock_proxy.__enter__().AndReturn(mock_proxy) mock_proxy.copy(mock_proxy.ioctx, str(dst_name)) mock_proxy.__exit__(None, None, None).AndReturn(None) self.mox.ReplayAll() self.driver.create_cloned_volume(dict(name=dst_name), dict(name=src_name))
def test_delete_snapshot(self): vol_name = u'volume-00000001' snap_name = u'snapshot-name' snapshot = dict(volume_name=vol_name, name=snap_name) mock_proxy = self.mox.CreateMockAnything() self.mox.StubOutWithMock(driver, 'RBDVolumeProxy') driver.RBDVolumeProxy(self.driver, vol_name) \ .AndReturn(mock_proxy) mock_proxy.__enter__().AndReturn(mock_proxy) self.rbd.RBD_FEATURE_LAYERING = 1 mock_proxy.unprotect_snap(str(snap_name)) mock_proxy.remove_snap(str(snap_name)) mock_proxy.__exit__(None, None, None).AndReturn(None) self.mox.ReplayAll() self.driver.delete_snapshot(snapshot)