def test_delete_volume(self, list_mount_points): self.drv.share2nms = {self.TEST_EXPORT1: self.nms_mock} self._create_volume_db_entry() self.drv._ensure_share_mounted = lambda *_, **__: 0 self.drv._execute = lambda *_, **__: 0 self.nms_mock.server.get_prop.return_value = '/volumes' self.nms_mock.folder.get_child_props.return_value = { 'available': 1, 'used': 1 } self.drv.delete_volume({ 'id': '1', 'name': 'volume-1', 'provider_location': self.TEST_EXPORT1 }) self.nms_mock.folder.destroy.assert_called_with( 'stack/share/volume-1', '-r') list_mount_points.assert_called_once() # Check that exception not raised if folder does not exist on # NexentaStor appliance. mock = self.nms_mock.folder.destroy mock.side_effect = utils.NexentaException('Folder does not exist') self.drv.delete_volume({ 'id': '1', 'name': 'volume-1', 'provider_location': self.TEST_EXPORT1 })
def do_setup(self, context): if self.restapi_protocol == 'auto': protocol, auto = 'http', True else: protocol, auto = self.restapi_protocol, False try: self.restapi = jsonrpc.NexentaEdgeJSONProxy(protocol, self.restapi_host, self.restapi_port, '/', self.restapi_user, self.restapi_password, self.verify_ssl, auto=auto) data = self.restapi.get('service/' + self.iscsi_service)['data'] self.target_name = '%s%s' % (data['X-ISCSI-TargetName'], data['X-ISCSI-TargetID']) if 'X-VIPS' in data: if self.target_vip not in data['X-VIPS']: raise nexenta_utils.NexentaException( 'Configured client IP address does not match any VIP' ' provided by iSCSI service %s' % self.iscsi_service) else: self.ha_vip = self.target_vip except exception.VolumeBackendAPIException: with excutils.save_and_reraise_exception(): LOG.exception( 'Error verifying iSCSI service %(serv)s on ' 'host %(hst)s', { 'serv': self.iscsi_service, 'hst': self.restapi_host })
def _stub_all_export_methods(self): self.nms_mock.scsidisk.lu_exists.return_value = False self.nms_mock.scsidisk.lu_shared.side_effect = ( utils.NexentaException(['does not exist for zvol'])) self.nms_mock.scsidisk.create_lu.return_value = {'lun': 0} self.nms_mock.stmf.list_targets.return_value = [] self.nms_mock.stmf.list_targetgroups.return_value = [] self.nms_mock.stmf.list_targetgroup_members.return_value = [] self.nms_mock._get_target_name.return_value = ['iqn:1.1.1.1-0'] self.nms_mock.iscsitarget.create_targetgroup.return_value = ({ 'target_name': 'cinder/1.1.1.1-0'}) self.nms_mock.scsidisk.add_lun_mapping_entry.return_value = {'lun': 0}
def test_delete_snapshot(self): self._create_volume_db_entry() self.drv._collect_garbage = lambda vol: vol self.drv.delete_snapshot(self.TEST_SNAPSHOT_REF) self.nms_mock.snapshot.destroy.assert_called_with( 'cinder/volume1@snapshot1', '') # Check that exception not raised if snapshot does not exist self.drv.delete_snapshot(self.TEST_SNAPSHOT_REF) self.nms_mock.snapshot.destroy.side_effect = ( utils.NexentaException('does not exist')) self.nms_mock.snapshot.destroy.assert_called_with( 'cinder/volume1@snapshot1', '')
def __call__(self, *args): data = jsonutils.dumps({ 'object': self.obj, 'method': self.method, 'params': args }) LOG.debug('Sending JSON data: %s', data) r = self.session.post(self.url, data=data, timeout=TIMEOUT) response = r.json() LOG.debug('Got response: %s', response) if response.get('error') is not None: message = response['error'].get('message', '') raise utils.NexentaException(message) return response.get('result')
def test_do_create_volume(self): volume = { 'provider_location': self.TEST_EXPORT1, 'size': 1, 'name': 'volume-1' } self.drv.shares = {self.TEST_EXPORT1: None} self.drv.share2nms = {self.TEST_EXPORT1: self.nms_mock} compression = self.cfg.nexenta_dataset_compression self.nms_mock.folder.get_child_props.return_value = { 'available': 1, 'used': 1 } self.nms_mock.server.get_prop.return_value = '/volumes' self.nms_mock.netsvc.get_confopts( 'svc:/network/nfs/server:default', 'configure').AndReturn({'nfs_server_versmax': { 'current': u'3' }}) self.nms_mock.netsvc.get_confopts.return_value = { 'nfs_server_versmax': { 'current': 4 } } self.nms_mock._ensure_share_mounted.return_value = True self.drv._do_create_volume(volume) self.nms_mock.folder.create_with_props.assert_called_with( 'stack', 'share/volume-1', {'compression': compression}) self.nms_mock.netstorsvc.share_folder.assert_called_with( self.TEST_SHARE_SVC, 'stack/share/volume-1', self.TEST_SHARE_OPTS) mock_chmod = self.nms_mock.appliance.execute mock_chmod.assert_called_with( 'chmod ugo+rw /volumes/stack/share/volume-1/volume') mock_truncate = self.nms_mock.appliance.execute mock_truncate.side_effect = utils.NexentaException('fake_exception') self.nms_mock.server.get_prop.return_value = '/volumes' self.nms_mock.folder.get_child_props.return_value = { 'available': 1, 'used': 1 } self.assertRaises(utils.NexentaException, self.drv._do_create_volume, volume)