Merge "Extracted HTTP response codes to constants"

This commit is contained in:
Jenkins
2017-03-25 00:28:11 +00:00
committed by Gerrit Code Review
8 changed files with 148 additions and 122 deletions

View File

@@ -21,6 +21,7 @@ import ddt
import json import json
import mock import mock
from simplejson import scanner from simplejson import scanner
from six.moves import http_client
from cinder import exception from cinder import exception
from cinder import test from cinder import test
@@ -48,11 +49,13 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
self.my_client._endpoint = eseries_fake.FAKE_ENDPOINT_HTTP self.my_client._endpoint = eseries_fake.FAKE_ENDPOINT_HTTP
fake_response = mock.Mock() fake_response = mock.Mock()
fake_response.status_code = 200 fake_response.status_code = http_client.OK
self.my_client.invoke_service = mock.Mock(return_value=fake_response) self.my_client.invoke_service = mock.Mock(return_value=fake_response)
self.my_client.api_version = '01.52.9000.1' self.my_client.api_version = '01.52.9000.1'
@ddt.data(200, 201, 203, 204) @ddt.data(http_client.OK, http_client.CREATED,
http_client.NON_AUTHORITATIVE_INFORMATION,
http_client.NO_CONTENT)
def test_eval_response_success(self, status_code): def test_eval_response_success(self, status_code):
fake_resp = mock.Mock() fake_resp = mock.Mock()
fake_resp.status_code = status_code fake_resp.status_code = status_code
@@ -76,7 +79,7 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
('unknown', None)) ('unknown', None))
@ddt.unpack @ddt.unpack
def test_eval_response_422(self, ret_code, exc_regex): def test_eval_response_422(self, ret_code, exc_regex):
status_code = 422 status_code = http_client.UNPROCESSABLE_ENTITY
fake_resp = mock.Mock() fake_resp = mock.Mock()
fake_resp.text = "fakeError" fake_resp.text = "fakeError"
fake_resp.json = mock.Mock(return_value={'retcode': ret_code}) fake_resp.json = mock.Mock(return_value={'retcode': ret_code})
@@ -89,7 +92,7 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
self.assertEqual(status_code, exc.status_code) self.assertEqual(status_code, exc.status_code)
def test_eval_response_424(self): def test_eval_response_424(self):
status_code = 424 status_code = http_client.FAILED_DEPENDENCY
fake_resp = mock.Mock() fake_resp = mock.Mock()
fake_resp.status_code = status_code fake_resp.status_code = status_code
fake_resp.text = "Fake Error Message" fake_resp.text = "Fake Error Message"
@@ -567,7 +570,7 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
self.assertEqual(fake_volume, volume) self.assertEqual(fake_volume, volume)
def test_list_volume_v2_not_found(self): def test_list_volume_v2_not_found(self):
status_code = 404 status_code = http_client.NOT_FOUND
url = client.RestClient.RESOURCE_PATHS['ssc_volume'] url = client.RestClient.RESOURCE_PATHS['ssc_volume']
self.my_client.features = mock.Mock() self.my_client.features = mock.Mock()
self.my_client.features.SSC_API_V2 = na_utils.FeatureState( self.my_client.features.SSC_API_V2 = na_utils.FeatureState(
@@ -586,7 +589,7 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
mock.ANY}) mock.ANY})
def test_list_volume_v2_failure(self): def test_list_volume_v2_failure(self):
status_code = 422 status_code = http_client.UNPROCESSABLE_ENTITY
url = client.RestClient.RESOURCE_PATHS['ssc_volume'] url = client.RestClient.RESOURCE_PATHS['ssc_volume']
self.my_client.features = mock.Mock() self.my_client.features = mock.Mock()
self.my_client.features.SSC_API_V2 = na_utils.FeatureState( self.my_client.features.SSC_API_V2 = na_utils.FeatureState(
@@ -1145,7 +1148,7 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
fake_response = mock.Mock() fake_response = mock.Mock()
fake_response.json = mock.Mock(side_effect=scanner.JSONDecodeError( fake_response.json = mock.Mock(side_effect=scanner.JSONDecodeError(
'', '{}', 1)) '', '{}', 1))
fake_response.status_code = 424 fake_response.status_code = http_client.FAILED_DEPENDENCY
fake_response.text = "Fake Response" fake_response.text = "Fake Response"
self.mock_object(self.my_client, 'invoke_service', self.mock_object(self.my_client, 'invoke_service',
return_value=fake_response) return_value=fake_response)

View File

@@ -23,6 +23,7 @@ from mock import patch
from oslo_serialization import jsonutils from oslo_serialization import jsonutils
import requests import requests
from requests import adapters from requests import adapters
from six.moves import http_client
from cinder import exception from cinder import exception
from cinder import test from cinder import test
@@ -33,7 +34,7 @@ USERNAME = 'user'
PASSWORD = 'pass' PASSWORD = 'pass'
def gen_response(code=200, json=None): def gen_response(code=http_client.OK, json=None):
r = requests.Response() r = requests.Response()
r.headers['Content-Type'] = 'application/json' r.headers['Content-Type'] = 'application/json'
r.encoding = 'utf8' r.encoding = 'utf8'
@@ -80,7 +81,7 @@ class TestNexentaJSONProxyAuth(test.TestCase):
# an url is being requested for the second time # an url is being requested for the second time
if self.counter == 1: if self.counter == 1:
# make the fake backend respond 401 # make the fake backend respond 401
r = gen_response(401) r = gen_response(http_client.UNAUTHORIZED)
r._content = '' r._content = ''
r.connection = mock.Mock() r.connection = mock.Mock()
r_ = gen_response(json={'data': []}) r_ = gen_response(json={'data': []})
@@ -147,31 +148,36 @@ class TestNexentaJSONProxy(test.TestCase):
def test_post(self): def test_post(self):
random_dict = {'data': uuid.uuid4().hex} random_dict = {'data': uuid.uuid4().hex}
rnd_url = 'some/random/url' rnd_url = 'some/random/url'
self._mount_adapter(rnd_url, self.gen_adapter(201, random_dict)) self._mount_adapter(rnd_url, self.gen_adapter(http_client.CREATED,
random_dict))
self.assertEqual(random_dict, self.nef.post(rnd_url)) self.assertEqual(random_dict, self.nef.post(rnd_url))
def test_delete(self): def test_delete(self):
random_dict = {'data': uuid.uuid4().hex} random_dict = {'data': uuid.uuid4().hex}
rnd_url = 'some/random/url' rnd_url = 'some/random/url'
self._mount_adapter(rnd_url, self.gen_adapter(201, random_dict)) self._mount_adapter(rnd_url, self.gen_adapter(http_client.CREATED,
random_dict))
self.assertEqual(random_dict, self.nef.delete(rnd_url)) self.assertEqual(random_dict, self.nef.delete(rnd_url))
def test_put(self): def test_put(self):
random_dict = {'data': uuid.uuid4().hex} random_dict = {'data': uuid.uuid4().hex}
rnd_url = 'some/random/url' rnd_url = 'some/random/url'
self._mount_adapter(rnd_url, self.gen_adapter(201, random_dict)) self._mount_adapter(rnd_url, self.gen_adapter(http_client.CREATED,
random_dict))
self.assertEqual(random_dict, self.nef.put(rnd_url)) self.assertEqual(random_dict, self.nef.put(rnd_url))
def test_get_200(self): def test_get_200(self):
random_dict = {'data': uuid.uuid4().hex} random_dict = {'data': uuid.uuid4().hex}
rnd_url = 'some/random/url' rnd_url = 'some/random/url'
self._mount_adapter(rnd_url, self.gen_adapter(200, random_dict)) self._mount_adapter(rnd_url, self.gen_adapter(http_client.OK,
random_dict))
self.assertEqual(random_dict, self.nef.get(rnd_url)) self.assertEqual(random_dict, self.nef.get(rnd_url))
def test_get_201(self): def test_get_201(self):
random_dict = {'data': uuid.uuid4().hex} random_dict = {'data': uuid.uuid4().hex}
rnd_url = 'some/random/url' rnd_url = 'some/random/url'
self._mount_adapter(rnd_url, self.gen_adapter(201, random_dict)) self._mount_adapter(rnd_url, self.gen_adapter(http_client.CREATED,
random_dict))
self.assertEqual(random_dict, self.nef.get(rnd_url)) self.assertEqual(random_dict, self.nef.get(rnd_url))
def test_get_500(self): def test_get_500(self):
@@ -185,7 +191,7 @@ class TestNexentaJSONProxy(test.TestCase):
'code': 'NEF_ERROR', 'code': 'NEF_ERROR',
'message': 'Some error' 'message': 'Some error'
} }
r = gen_response(500, json) r = gen_response(http_client.INTERNAL_SERVER_ERROR, json)
r.request = request r.request = request
return r return r
@@ -201,7 +207,7 @@ class TestNexentaJSONProxy(test.TestCase):
super(TestAdapter, self).__init__() super(TestAdapter, self).__init__()
def send(self, request, *args, **kwargs): def send(self, request, *args, **kwargs):
r = gen_response(404) r = gen_response(http_client.NOT_FOUND)
r._content = 'Page Not Found' r._content = 'Page Not Found'
r.request = request r.request = request
return r return r
@@ -219,7 +225,7 @@ class TestNexentaJSONProxy(test.TestCase):
super(TestAdapter, self).__init__() super(TestAdapter, self).__init__()
def send(self, request, *args, **kwargs): def send(self, request, *args, **kwargs):
r = gen_response(404) r = gen_response(http_client.NOT_FOUND)
r.request = request r.request = request
return r return r
@@ -241,11 +247,12 @@ class TestNexentaJSONProxy(test.TestCase):
json = { json = {
'links': [{'href': redirect_url}] 'links': [{'href': redirect_url}]
} }
r = gen_response(202, json) r = gen_response(http_client.ACCEPTED, json)
r.request = request r.request = request
return r return r
rnd_url = 'some/random/url' rnd_url = 'some/random/url'
self._mount_adapter(rnd_url, RedirectTestAdapter()) self._mount_adapter(rnd_url, RedirectTestAdapter())
self._mount_adapter(redirect_url, self.gen_adapter(201)) self._mount_adapter(redirect_url, self.gen_adapter(
http_client.CREATED))
self.assertIsNone(self.nef.get(rnd_url)) self.assertIsNone(self.nef.get(rnd_url))

View File

@@ -21,6 +21,7 @@ import math
import mock import mock
from oslo_utils import units from oslo_utils import units
import requests import requests
from six.moves import http_client
from six import string_types from six import string_types
from cinder import context from cinder import context
@@ -148,8 +149,8 @@ class MockResponse(object):
class SynoSessionTestCase(test.TestCase): class SynoSessionTestCase(test.TestCase):
@mock.patch('requests.post', return_value= @mock.patch('requests.post', return_value=MockResponse(
MockResponse({'data': {'sid': 'sid'}, 'success': True}, 200)) {'data': {'sid': 'sid'}, 'success': True}, http_client.OK))
def setUp(self, _mock_post): def setUp(self, _mock_post):
super(SynoSessionTestCase, self).setUp() super(SynoSessionTestCase, self).setUp()
@@ -190,12 +191,12 @@ class SynoSessionTestCase(test.TestCase):
FAKE_API: out FAKE_API: out
}, },
'success': True 'success': True
}, 200), }, http_client.OK),
MockResponse({ MockResponse({
'data': { 'data': {
FAKE_API: out FAKE_API: out
} }
}, 200), }, http_client.OK),
]) ])
result = self.session.query(FAKE_API) result = self.session.query(FAKE_API)
@@ -289,18 +290,21 @@ class SynoAPIRequestTestCase(test.TestCase):
self.request._encode_param = mock.Mock(side_effect=lambda x: x) self.request._encode_param = mock.Mock(side_effect=lambda x: x)
self.request.new_session = mock.Mock() self.request.new_session = mock.Mock()
requests.post = mock.Mock(side_effect=[ requests.post = mock.Mock(side_effect=[
MockResponse({'success': True}, 200), MockResponse({'success': True}, http_client.OK),
MockResponse({'error': {'code': 101}, 'success': False}, 200), MockResponse({'error': {'code': http_client.SWITCHING_PROTOCOLS},
MockResponse({'error': {'code': 101}}, 200), 'success': False}, http_client.OK),
MockResponse({}, 500) MockResponse({'error': {'code': http_client.SWITCHING_PROTOCOLS}},
http_client.OK),
MockResponse({}, http_client.INTERNAL_SERVER_ERROR)
]) ])
result = self.request.request(FAKE_API, FAKE_METHOD, version) result = self.request.request(FAKE_API, FAKE_METHOD, version)
self.assertDictEqual({'success': True}, result) self.assertDictEqual({'success': True}, result)
result = self.request.request(FAKE_API, FAKE_METHOD, version) result = self.request.request(FAKE_API, FAKE_METHOD, version)
self.assertDictEqual({'error': {'code': 101}, 'success': False}, self.assertDictEqual(
result) {'error': {'code': http_client.SWITCHING_PROTOCOLS},
'success': False}, result)
self.assertRaises(exception.MalformedResponse, self.assertRaises(exception.MalformedResponse,
self.request.request, self.request.request,
@@ -309,7 +313,8 @@ class SynoAPIRequestTestCase(test.TestCase):
version) version)
result = self.request.request(FAKE_API, FAKE_METHOD, version) result = self.request.request(FAKE_API, FAKE_METHOD, version)
self.assertDictEqual({'http_status': 500}, result) self.assertDictEqual(
{'http_status': http_client.INTERNAL_SERVER_ERROR}, result)
@mock.patch.object(common.LOG, 'debug') @mock.patch.object(common.LOG, 'debug')
def test_request_auth_error(self, _log): def test_request_auth_error(self, _log):
@@ -322,7 +327,7 @@ class SynoAPIRequestTestCase(test.TestCase):
MockResponse({ MockResponse({
'error': {'code': 105}, 'error': {'code': 105},
'success': False 'success': False
}, 200)) }, http_client.OK))
self.assertRaises(exception.SynoAuthError, self.assertRaises(exception.SynoAuthError,
self.request.request, self.request.request,
@@ -1141,7 +1146,7 @@ class SynoCommonTestCase(test.TestCase):
version = 1 version = 1
resp = {} resp = {}
bad_resp = { bad_resp = {
'http_status': 500 'http_status': http_client.INTERNAL_SERVER_ERROR
} }
expected = copy.deepcopy(resp) expected = copy.deepcopy(resp)
expected.update(api_info={'api': api, expected.update(api_info={'api': api,

View File

@@ -76,7 +76,7 @@ def common_mocks(f):
inst.mock_response = mock.Mock() inst.mock_response = mock.Mock()
inst.mock_response.read.return_value = '{}' inst.mock_response.read.return_value = '{}'
inst.mock_response.status = 200 inst.mock_response.status = http_client.OK
inst.mock_conn.request.return_value = True inst.mock_conn.request.return_value = True
inst.mock_conn.getresponse.return_value = inst.mock_response inst.mock_conn.getresponse.return_value = inst.mock_response
@@ -150,28 +150,28 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
@common_mocks @common_mocks
def test_http_mock_success(self): def test_http_mock_success(self):
self.mock_response.read.return_value = '{}' self.mock_response.read.return_value = '{}'
self.mock_response.status = 200 self.mock_response.status = http_client.OK
conn = http_client.HTTPSConnection('whatever', None) conn = http_client.HTTPSConnection('whatever', None)
conn.request('GET', '/blah', '{}', {}) conn.request('GET', '/blah', '{}', {})
rsp = conn.getresponse() rsp = conn.getresponse()
self.assertEqual('{}', rsp.read()) self.assertEqual('{}', rsp.read())
self.assertEqual(200, rsp.status) self.assertEqual(http_client.OK, rsp.status)
@common_mocks @common_mocks
def test_http_mock_failure(self): def test_http_mock_failure(self):
mock_body = '{"error": "no results matching query", "status": 413}' mock_body = '{"error": "no results matching query", "status": 413}'
self.mock_response.read.return_value = mock_body self.mock_response.read.return_value = mock_body
self.mock_response.status = 413 self.mock_response.status = http_client.REQUEST_ENTITY_TOO_LARGE
conn = http_client.HTTPSConnection('whatever', None) conn = http_client.HTTPSConnection('whatever', None)
conn.request('GET', '/blah', '{}', {}) conn.request('GET', '/blah', '{}', {})
rsp = conn.getresponse() rsp = conn.getresponse()
self.assertEqual(mock_body, rsp.read()) self.assertEqual(mock_body, rsp.read())
self.assertEqual(413, rsp.status) self.assertEqual(http_client.REQUEST_ENTITY_TOO_LARGE, rsp.status)
@common_mocks @common_mocks
def test_cfg_api_host(self): def test_cfg_api_host(self):
@@ -264,7 +264,7 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
mock_body = '{"message": "no results matching query", "status": 413}' mock_body = '{"message": "no results matching query", "status": 413}'
self.mock_response.read.return_value = mock_body self.mock_response.read.return_value = mock_body
self.mock_response.status = 413 self.mock_response.status = http_client.REQUEST_ENTITY_TOO_LARGE
self.assertRaisesRegex(exception.VolumeBackendAPIException, self.assertRaisesRegex(exception.VolumeBackendAPIException,
"no results matching query", "no results matching query",
@@ -310,7 +310,7 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
mock_body = '{"message": "over quota", "status": 413}' mock_body = '{"message": "over quota", "status": 413}'
self.mock_response.read.return_value = mock_body self.mock_response.read.return_value = mock_body
self.mock_response.status = 413 self.mock_response.status = http_client.REQUEST_ENTITY_TOO_LARGE
self.assertRaisesRegex(exception.VolumeBackendAPIException, self.assertRaisesRegex(exception.VolumeBackendAPIException,
"over quota", "over quota",
@@ -363,7 +363,7 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
mock_body = '{"message": "over quota", "status": 413}' mock_body = '{"message": "over quota", "status": 413}'
self.mock_response.read.return_value = mock_body self.mock_response.read.return_value = mock_body
self.mock_response.status = 413 self.mock_response.status = http_client.REQUEST_ENTITY_TOO_LARGE
src_vref = dict( src_vref = dict(
name='cloned_volume_source', name='cloned_volume_source',
@@ -409,7 +409,7 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
def test_extend_volume_overquota(self): def test_extend_volume_overquota(self):
mock_body = '{"message": "over quota", "status": 413}' mock_body = '{"message": "over quota", "status": 413}'
self.mock_response.read.return_value = mock_body self.mock_response.read.return_value = mock_body
self.mock_response.status = 413 self.mock_response.status = http_client.REQUEST_ENTITY_TOO_LARGE
self.assertRaisesRegex(exception.VolumeBackendAPIException, self.assertRaisesRegex(exception.VolumeBackendAPIException,
"over quota", "over quota",
@@ -459,7 +459,7 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
def test_create_snapshot_overquota(self): def test_create_snapshot_overquota(self):
mock_body = '{"message": "over quota", "status": 413}' mock_body = '{"message": "over quota", "status": 413}'
self.mock_response.read.return_value = mock_body self.mock_response.read.return_value = mock_body
self.mock_response.status = 413 self.mock_response.status = http_client.REQUEST_ENTITY_TOO_LARGE
self.assertRaisesRegex(exception.VolumeBackendAPIException, self.assertRaisesRegex(exception.VolumeBackendAPIException,
"over quota", "over quota",
@@ -501,7 +501,7 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
mock_generate_password.return_value = 'mock-password-abcdef123456' mock_generate_password.return_value = 'mock-password-abcdef123456'
self.mock_response.read.return_value = FIXTURE_VOL_EXPORT_OK self.mock_response.read.return_value = FIXTURE_VOL_EXPORT_OK
self.mock_response.status = 200 self.mock_response.status = http_client.OK
props = self.driver.initialize_connection(self.volume, self.connector) props = self.driver.initialize_connection(self.volume, self.connector)
@@ -563,7 +563,7 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
@common_mocks @common_mocks
def test_get_volume_stats_forbidden(self): def test_get_volume_stats_forbidden(self):
self.mock_response.status = 403 self.mock_response.status = http_client.FORBIDDEN
self.assertRaisesRegex(exception.NotAuthorized, self.assertRaisesRegex(exception.NotAuthorized,
"Insufficient privileges", "Insufficient privileges",
self.driver.get_volume_stats, self.driver.get_volume_stats,
@@ -571,7 +571,7 @@ class BlockbridgeISCSIDriverTestCase(test.TestCase):
@common_mocks @common_mocks
def test_get_volume_stats_unauthorized(self): def test_get_volume_stats_unauthorized(self):
self.mock_response.status = 401 self.mock_response.status = http_client.UNAUTHORIZED
self.assertRaisesRegex(exception.NotAuthorized, self.assertRaisesRegex(exception.NotAuthorized,
"Invalid credentials", "Invalid credentials",
self.driver.get_volume_stats, self.driver.get_volume_stats,

View File

@@ -21,6 +21,7 @@ import mock
from oslo_utils import units from oslo_utils import units
import requests import requests
import six import six
from six.moves import http_client
from cinder import exception from cinder import exception
from cinder import test from cinder import test
@@ -129,7 +130,7 @@ class InfiniboxDriverTestCase(test.TestCase):
response.status_code = result response.status_code = result
response.raw = six.BytesIO(six.b(json.dumps(dict()))) response.raw = six.BytesIO(six.b(json.dumps(dict())))
else: else:
response.status_code = 200 response.status_code = http_client.OK
response.raw = six.BytesIO(six.b(json.dumps(dict(result=result)))) response.raw = six.BytesIO(six.b(json.dumps(dict(result=result))))
return response return response
@@ -225,7 +226,8 @@ class InfiniboxDriverTestCase(test.TestCase):
self.driver.delete_volume(test_volume) self.driver.delete_volume(test_volume)
def test_delete_volume_doesnt_exist_on_delete(self): def test_delete_volume_doesnt_exist_on_delete(self):
self._responses["DELETE"][VOLUME_URL + APPROVAL] = 404 self._responses["DELETE"][VOLUME_URL + APPROVAL] = (
http_client.NOT_FOUND)
# due to a possible race condition (get+delete is not atomic) the # due to a possible race condition (get+delete is not atomic) the
# GET may return the volume but it may still be deleted before # GET may return the volume but it may still be deleted before
# the DELETE request # the DELETE request
@@ -309,7 +311,8 @@ class InfiniboxDriverTestCase(test.TestCase):
self.driver.delete_snapshot(test_snapshot) self.driver.delete_snapshot(test_snapshot)
def test_delete_snapshot_doesnt_exist_on_delete(self): def test_delete_snapshot_doesnt_exist_on_delete(self):
self._responses["DELETE"][SNAPSHOT_URL + APPROVAL] = 404 self._responses["DELETE"][SNAPSHOT_URL + APPROVAL] = (
http_client.NOT_FOUND)
# due to a possible race condition (get+delete is not atomic) the # due to a possible race condition (get+delete is not atomic) the
# GET may return the snapshot but it may still be deleted before # GET may return the snapshot but it may still be deleted before
# the DELETE request # the DELETE request

View File

@@ -15,6 +15,7 @@
import mock import mock
from six.moves import http_client
import sys import sys
from cinder import context from cinder import context
@@ -215,7 +216,7 @@ class NimbleDriverBaseTestCase(test.TestCase):
configuration=configuration) configuration=configuration)
mock_login_response = mock_urllib2.post.return_value mock_login_response = mock_urllib2.post.return_value
mock_login_response = mock.MagicMock() mock_login_response = mock.MagicMock()
mock_login_response.status_code.return_value = 200 mock_login_response.status_code.return_value = http_client.OK
mock_login_response.json.return_value = ( mock_login_response.json.return_value = (
FAKE_LOGIN_POST_RESPONSE) FAKE_LOGIN_POST_RESPONSE)
self.driver.do_setup(context.get_admin_context()) self.driver.do_setup(context.get_admin_context())
@@ -237,7 +238,7 @@ class NimbleDriverBaseTestCase(test.TestCase):
configuration=configuration) configuration=configuration)
mock_login_response = mock_urllib2.post.return_value mock_login_response = mock_urllib2.post.return_value
mock_login_response = mock.MagicMock() mock_login_response = mock.MagicMock()
mock_login_response.status_code.return_value = 200 mock_login_response.status_code.return_value = http_client.OK
mock_login_response.json.return_value = ( mock_login_response.json.return_value = (
FAKE_LOGIN_POST_RESPONSE) FAKE_LOGIN_POST_RESPONSE)
self.driver.do_setup(context.get_admin_context()) self.driver.do_setup(context.get_admin_context())

View File

@@ -19,6 +19,7 @@ import sys
import ddt import ddt
import mock import mock
from oslo_utils import units from oslo_utils import units
from six.moves import http_client
from cinder import exception from cinder import exception
from cinder import test from cinder import test
@@ -790,7 +791,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.list_volume_private_connections.return_value = {} self.array.list_volume_private_connections.return_value = {}
self.array.destroy_volume.side_effect = \ self.array.destroy_volume.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Volume does not exist" text="Volume does not exist"
) )
self.driver.delete_volume(VOLUME) self.driver.delete_volume(VOLUME)
@@ -805,8 +806,8 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.assert_has_calls(expected) self.array.assert_has_calls(expected)
self.assertFalse(self.array.eradicate_volume.called) self.assertFalse(self.array.eradicate_volume.called)
self.array.destroy_volume.side_effect = ( self.array.destroy_volume.side_effect = (
self.purestorage_module.PureHTTPError(code=400, text="does not " self.purestorage_module.PureHTTPError(code=http_client.BAD_REQUEST,
"exist")) text="does not exist"))
self.driver.delete_volume(VOLUME) self.driver.delete_volume(VOLUME)
self.array.destroy_volume.side_effect = None self.array.destroy_volume.side_effect = None
self.assert_error_propagates([self.array.destroy_volume], self.assert_error_propagates([self.array.destroy_volume],
@@ -864,7 +865,8 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.assert_has_calls(expected) self.array.assert_has_calls(expected)
self.assertFalse(self.array.eradicate_volume.called) self.assertFalse(self.array.eradicate_volume.called)
self.array.destroy_volume.side_effect = ( self.array.destroy_volume.side_effect = (
self.purestorage_module.PureHTTPError(code=400, text=error_text)) self.purestorage_module.PureHTTPError(code=http_client.BAD_REQUEST,
text=error_text))
self.driver.delete_snapshot(SNAPSHOT) self.driver.delete_snapshot(SNAPSHOT)
self.array.destroy_volume.side_effect = None self.array.destroy_volume.side_effect = None
self.assert_error_propagates([self.array.destroy_volume], self.assert_error_propagates([self.array.destroy_volume],
@@ -917,7 +919,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
# Branch where connection is missing and the host is still deleted # Branch where connection is missing and the host is still deleted
self.array.reset_mock() self.array.reset_mock()
self.array.disconnect_host.side_effect = \ self.array.disconnect_host.side_effect = \
self.purestorage_module.PureHTTPError(code=400, self.purestorage_module.PureHTTPError(code=http_client.BAD_REQUEST,
text="is not connected") text="is not connected")
self.driver.terminate_connection(VOLUME, ISCSI_CONNECTOR) self.driver.terminate_connection(VOLUME, ISCSI_CONNECTOR)
self.array.disconnect_host.assert_called_with(PURE_HOST_NAME, vol_name) self.array.disconnect_host.assert_called_with(PURE_HOST_NAME, vol_name)
@@ -928,7 +930,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.reset_mock() self.array.reset_mock()
self.array.disconnect_host.side_effect = \ self.array.disconnect_host.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=500, code=http_client.INTERNAL_SERVER_ERROR,
text="Some other error" text="Some other error"
) )
self.assertRaises(self.purestorage_module.PureHTTPError, self.assertRaises(self.purestorage_module.PureHTTPError,
@@ -945,7 +947,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.reset_mock() self.array.reset_mock()
self.array.list_host_connections.return_value = [] self.array.list_host_connections.return_value = []
self.array.delete_host.side_effect = \ self.array.delete_host.side_effect = \
self.purestorage_module.PureHTTPError(code=400, self.purestorage_module.PureHTTPError(code=http_client.BAD_REQUEST,
text=error) text=error)
self.driver.terminate_connection(VOLUME, ISCSI_CONNECTOR) self.driver.terminate_connection(VOLUME, ISCSI_CONNECTOR)
self.array.disconnect_host.assert_called_with(PURE_HOST_NAME, vol_name) self.array.disconnect_host.assert_called_with(PURE_HOST_NAME, vol_name)
@@ -1145,7 +1147,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.destroy_pgroup.side_effect = \ self.array.destroy_pgroup.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Protection group has been destroyed." text="Protection group has been destroyed."
) )
self.driver.delete_consistencygroup(mock_context, self.driver.delete_consistencygroup(mock_context,
@@ -1157,7 +1159,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.destroy_pgroup.side_effect = \ self.array.destroy_pgroup.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Protection group does not exist" text="Protection group does not exist"
) )
self.driver.delete_consistencygroup(mock_context, self.driver.delete_consistencygroup(mock_context,
@@ -1169,7 +1171,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.destroy_pgroup.side_effect = \ self.array.destroy_pgroup.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Some other error" text="Some other error"
) )
self.assertRaises(self.purestorage_module.PureHTTPError, self.assertRaises(self.purestorage_module.PureHTTPError,
@@ -1180,7 +1182,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.destroy_pgroup.side_effect = \ self.array.destroy_pgroup.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=500, code=http_client.INTERNAL_SERVER_ERROR,
text="Another different error" text="Another different error"
) )
self.assertRaises(self.purestorage_module.PureHTTPError, self.assertRaises(self.purestorage_module.PureHTTPError,
@@ -1315,7 +1317,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.destroy_pgroup.side_effect = \ self.array.destroy_pgroup.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Protection group snapshot has been destroyed." text="Protection group snapshot has been destroyed."
) )
self.driver.delete_cgsnapshot(mock_context, mock_cgsnap, [mock_snap]) self.driver.delete_cgsnapshot(mock_context, mock_cgsnap, [mock_snap])
@@ -1324,7 +1326,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.destroy_pgroup.side_effect = \ self.array.destroy_pgroup.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Protection group snapshot does not exist" text="Protection group snapshot does not exist"
) )
self.driver.delete_cgsnapshot(mock_context, mock_cgsnap, [mock_snap]) self.driver.delete_cgsnapshot(mock_context, mock_cgsnap, [mock_snap])
@@ -1333,7 +1335,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.destroy_pgroup.side_effect = \ self.array.destroy_pgroup.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Some other error" text="Some other error"
) )
self.assertRaises(self.purestorage_module.PureHTTPError, self.assertRaises(self.purestorage_module.PureHTTPError,
@@ -1344,7 +1346,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.destroy_pgroup.side_effect = \ self.array.destroy_pgroup.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=500, code=http_client.INTERNAL_SERVER_ERROR,
text="Another different error" text="Another different error"
) )
self.assertRaises(self.purestorage_module.PureHTTPError, self.assertRaises(self.purestorage_module.PureHTTPError,
@@ -1411,7 +1413,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.get_volume.side_effect = \ self.array.get_volume.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
text="Volume does not exist.", text="Volume does not exist.",
code=400 code=http_client.BAD_REQUEST
) )
self.assertRaises(exception.ManageExistingInvalidReference, self.assertRaises(exception.ManageExistingInvalidReference,
self.driver.manage_existing, self.driver.manage_existing,
@@ -1479,7 +1481,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.rename_volume.side_effect = \ self.array.rename_volume.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
text="Volume does not exist.", text="Volume does not exist.",
code=400 code=http_client.BAD_REQUEST
) )
self.driver.unmanage(VOLUME) self.driver.unmanage(VOLUME)
@@ -1537,7 +1539,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.get_volume.side_effect = \ self.array.get_volume.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
text="Volume does not exist.", text="Volume does not exist.",
code=400 code=http_client.BAD_REQUEST
) )
self.assertRaises(exception.ManageExistingInvalidReference, self.assertRaises(exception.ManageExistingInvalidReference,
self.driver.manage_existing_snapshot, self.driver.manage_existing_snapshot,
@@ -1596,7 +1598,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.get_volume.side_effect = \ self.array.get_volume.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
text="Volume does not exist.", text="Volume does not exist.",
code=400 code=http_client.BAD_REQUEST
) )
self.assertRaises(exception.ManageExistingInvalidReference, self.assertRaises(exception.ManageExistingInvalidReference,
self.driver.manage_existing_snapshot_get_size, self.driver.manage_existing_snapshot_get_size,
@@ -1624,7 +1626,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.array.rename_volume.side_effect = \ self.array.rename_volume.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
text="Snapshot does not exist.", text="Snapshot does not exist.",
code=400 code=http_client.BAD_REQUEST
) )
self.driver.unmanage_snapshot(SNAPSHOT) self.driver.unmanage_snapshot(SNAPSHOT)
@@ -1853,7 +1855,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
def test_does_pgroup_exist_not_exists(self): def test_does_pgroup_exist_not_exists(self):
self.array.get_pgroup.side_effect = ( self.array.get_pgroup.side_effect = (
self.purestorage_module.PureHTTPError(code=400, self.purestorage_module.PureHTTPError(code=http_client.BAD_REQUEST,
text="does not exist")) text="does not exist"))
exists = self.driver._does_pgroup_exist(self.array, "some_pgroup") exists = self.driver._does_pgroup_exist(self.array, "some_pgroup")
self.assertFalse(exists) self.assertFalse(exists)
@@ -2045,7 +2047,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self, mock_get_volume_type): self, mock_get_volume_type):
mock_get_volume_type.return_value = REPLICATED_VOL_TYPE mock_get_volume_type.return_value = REPLICATED_VOL_TYPE
self.array.set_pgroup.side_effect = FakePureStorageHTTPError( self.array.set_pgroup.side_effect = FakePureStorageHTTPError(
code=400, text='already belongs to') code=http_client.BAD_REQUEST, text='already belongs to')
self.driver._enable_replication_if_needed(self.array, VOLUME) self.driver._enable_replication_if_needed(self.array, VOLUME)
self.array.set_pgroup.assert_called_with( self.array.set_pgroup.assert_called_with(
self.driver._replication_pg_name, self.driver._replication_pg_name,
@@ -2148,7 +2150,7 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
def test_disable_replication_already_disabled(self): def test_disable_replication_already_disabled(self):
self.array.set_pgroup.side_effect = FakePureStorageHTTPError( self.array.set_pgroup.side_effect = FakePureStorageHTTPError(
code=400, text='could not be found') code=http_client.BAD_REQUEST, text='could not be found')
self.driver._disable_replication(VOLUME) self.driver._disable_replication(VOLUME)
self.array.set_pgroup.assert_called_with( self.array.set_pgroup.assert_called_with(
self.driver._replication_pg_name, self.driver._replication_pg_name,
@@ -2375,7 +2377,7 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
[expected, {"host": "extra", "lun": 2}] [expected, {"host": "extra", "lun": 2}]
self.array.connect_host.side_effect = \ self.array.connect_host.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Connection already exists" text="Connection already exists"
) )
actual = self.driver._connect(VOLUME, ISCSI_CONNECTOR) actual = self.driver._connect(VOLUME, ISCSI_CONNECTOR)
@@ -2389,7 +2391,7 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
self.array.list_volume_private_connections.return_value = {} self.array.list_volume_private_connections.return_value = {}
self.array.connect_host.side_effect = \ self.array.connect_host.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Connection already exists" text="Connection already exists"
) )
self.assertRaises(exception.PureDriverException, self.driver._connect, self.assertRaises(exception.PureDriverException, self.driver._connect,
@@ -2401,10 +2403,11 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
def test_connect_already_connected_list_hosts_exception(self, mock_host): def test_connect_already_connected_list_hosts_exception(self, mock_host):
mock_host.return_value = PURE_HOST mock_host.return_value = PURE_HOST
self.array.list_volume_private_connections.side_effect = \ self.array.list_volume_private_connections.side_effect = \
self.purestorage_module.PureHTTPError(code=400, text="") self.purestorage_module.PureHTTPError(code=http_client.BAD_REQUEST,
text="")
self.array.connect_host.side_effect = \ self.array.connect_host.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Connection already exists" text="Connection already exists"
) )
self.assertRaises(self.purestorage_module.PureHTTPError, self.assertRaises(self.purestorage_module.PureHTTPError,
@@ -2422,7 +2425,7 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
self.array.set_host.side_effect = ( self.array.set_host.side_effect = (
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, text='Host does not exist.')) code=http_client.BAD_REQUEST, text='Host does not exist.'))
# Because we mocked out retry make sure we are raising the right # Because we mocked out retry make sure we are raising the right
# exception to allow for retries to happen. # exception to allow for retries to happen.
@@ -2436,7 +2439,8 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
self.array.create_host.side_effect = ( self.array.create_host.side_effect = (
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, text='The specified IQN is already in use.')) code=http_client.BAD_REQUEST,
text='The specified IQN is already in use.'))
# Because we mocked out retry make sure we are raising the right # Because we mocked out retry make sure we are raising the right
# exception to allow for retries to happen. # exception to allow for retries to happen.
@@ -2450,7 +2454,7 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
self.array.create_host.side_effect = ( self.array.create_host.side_effect = (
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, text='Host already exists.')) code=http_client.BAD_REQUEST, text='Host already exists.'))
# Because we mocked out retry make sure we are raising the right # Because we mocked out retry make sure we are raising the right
# exception to allow for retries to happen. # exception to allow for retries to happen.
@@ -2578,7 +2582,7 @@ class PureFCDriverTestCase(PureDriverTestCase):
[expected, {"host": "extra", "lun": 2}] [expected, {"host": "extra", "lun": 2}]
self.array.connect_host.side_effect = \ self.array.connect_host.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Connection already exists" text="Connection already exists"
) )
actual = self.driver._connect(VOLUME, FC_CONNECTOR) actual = self.driver._connect(VOLUME, FC_CONNECTOR)
@@ -2592,7 +2596,7 @@ class PureFCDriverTestCase(PureDriverTestCase):
self.array.list_volume_private_connections.return_value = {} self.array.list_volume_private_connections.return_value = {}
self.array.connect_host.side_effect = \ self.array.connect_host.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Connection already exists" text="Connection already exists"
) )
self.assertRaises(exception.PureDriverException, self.driver._connect, self.assertRaises(exception.PureDriverException, self.driver._connect,
@@ -2604,10 +2608,11 @@ class PureFCDriverTestCase(PureDriverTestCase):
def test_connect_already_connected_list_hosts_exception(self, mock_host): def test_connect_already_connected_list_hosts_exception(self, mock_host):
mock_host.return_value = PURE_HOST mock_host.return_value = PURE_HOST
self.array.list_volume_private_connections.side_effect = \ self.array.list_volume_private_connections.side_effect = \
self.purestorage_module.PureHTTPError(code=400, text="") self.purestorage_module.PureHTTPError(code=http_client.BAD_REQUEST,
text="")
self.array.connect_host.side_effect = \ self.array.connect_host.side_effect = \
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, code=http_client.BAD_REQUEST,
text="Connection already exists" text="Connection already exists"
) )
self.assertRaises(self.purestorage_module.PureHTTPError, self.assertRaises(self.purestorage_module.PureHTTPError,
@@ -2621,7 +2626,8 @@ class PureFCDriverTestCase(PureDriverTestCase):
self.array.create_host.side_effect = ( self.array.create_host.side_effect = (
self.purestorage_module.PureHTTPError( self.purestorage_module.PureHTTPError(
code=400, text='The specified WWN is already in use.')) code=http_client.BAD_REQUEST,
text='The specified WWN is already in use.'))
# Because we mocked out retry make sure we are raising the right # Because we mocked out retry make sure we are raising the right
# exception to allow for retries to happen. # exception to allow for retries to happen.

View File

@@ -14,6 +14,7 @@
# under the License. # under the License.
import mock import mock
from six.moves import http_client
from cinder import context from cinder import context
from cinder import exception from cinder import exception
@@ -119,7 +120,7 @@ ISE_GET_QUERY_XML =\
</array>""" % (ISE_IP1, ISE_IP2) </array>""" % (ISE_IP1, ISE_IP2)
ISE_GET_QUERY_RESP =\ ISE_GET_QUERY_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_QUERY_XML.split())} 'content': " ".join(ISE_GET_QUERY_XML.split())}
@@ -139,7 +140,7 @@ ISE_GET_QUERY_NO_CAP_XML =\
</array>""" % (ISE_IP1, ISE_IP2) </array>""" % (ISE_IP1, ISE_IP2)
ISE_GET_QUERY_NO_CAP_RESP =\ ISE_GET_QUERY_NO_CAP_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_QUERY_NO_CAP_XML.split())} 'content': " ".join(ISE_GET_QUERY_NO_CAP_XML.split())}
@@ -158,7 +159,7 @@ ISE_GET_QUERY_NO_CTRL_XML =\
</array>""" </array>"""
ISE_GET_QUERY_NO_CTRL_RESP =\ ISE_GET_QUERY_NO_CTRL_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_QUERY_NO_CTRL_XML.split())} 'content': " ".join(ISE_GET_QUERY_NO_CTRL_XML.split())}
@@ -187,7 +188,7 @@ ISE_GET_QUERY_NO_IP_XML =\
</array>""" </array>"""
ISE_GET_QUERY_NO_IP_RESP =\ ISE_GET_QUERY_NO_IP_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_QUERY_NO_IP_XML.split())} 'content': " ".join(ISE_GET_QUERY_NO_IP_XML.split())}
@@ -213,7 +214,7 @@ ISE_GET_QUERY_NO_GID_XML =\
</array>""" % (ISE_IP1, ISE_IP2) </array>""" % (ISE_IP1, ISE_IP2)
ISE_GET_QUERY_NO_GID_RESP =\ ISE_GET_QUERY_NO_GID_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_QUERY_NO_GID_XML.split())} 'content': " ".join(ISE_GET_QUERY_NO_GID_XML.split())}
@@ -239,7 +240,7 @@ ISE_GET_QUERY_NO_CLONE_XML =\
</array>""" % (ISE_IP1, ISE_IP2) </array>""" % (ISE_IP1, ISE_IP2)
ISE_GET_QUERY_NO_CLONE_RESP =\ ISE_GET_QUERY_NO_CLONE_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_QUERY_NO_CLONE_XML.split())} 'content': " ".join(ISE_GET_QUERY_NO_CLONE_XML.split())}
@@ -287,7 +288,7 @@ ISE_GET_STORAGE_POOLS_XML =\
""" """
ISE_GET_STORAGE_POOLS_RESP =\ ISE_GET_STORAGE_POOLS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': 'Pool location', 'location': 'Pool location',
'content': " ".join(ISE_GET_STORAGE_POOLS_XML.split())} 'content': " ".join(ISE_GET_STORAGE_POOLS_XML.split())}
@@ -295,7 +296,7 @@ ISE_GET_VOL_STATUS_NO_VOL_NODE_XML =\
"""<volumes></volumes>""" """<volumes></volumes>"""
ISE_GET_VOL_STATUS_NO_VOL_NODE_RESP =\ ISE_GET_VOL_STATUS_NO_VOL_NODE_RESP =\
{'status': 200, {'status': http_client.OK,
'location': 'u%s' % ISE_VOLUME1_LOCATION_URL, 'location': 'u%s' % ISE_VOLUME1_LOCATION_URL,
'content': " ".join(ISE_GET_VOL_STATUS_NO_VOL_NODE_XML.split())} 'content': " ".join(ISE_GET_VOL_STATUS_NO_VOL_NODE_XML.split())}
@@ -306,7 +307,7 @@ ISE_GET_VOL_STATUS_NO_STATUS_XML =\
</volumes>""" % (ISE_VOLUME1_LOCATION_URL) </volumes>""" % (ISE_VOLUME1_LOCATION_URL)
ISE_GET_VOL_STATUS_NO_STATUS_RESP =\ ISE_GET_VOL_STATUS_NO_STATUS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': 'u%s' % ISE_VOLUME1_LOCATION_URL, 'location': 'u%s' % ISE_VOLUME1_LOCATION_URL,
'content': " ".join(ISE_GET_VOL_STATUS_NO_STATUS_XML.split())} 'content': " ".join(ISE_GET_VOL_STATUS_NO_STATUS_XML.split())}
@@ -323,7 +324,7 @@ ISE_GET_VOL1_STATUS_XML =\
</volumes>""" % (ISE_VOLUME1_LOCATION_URL) </volumes>""" % (ISE_VOLUME1_LOCATION_URL)
ISE_GET_VOL1_STATUS_RESP =\ ISE_GET_VOL1_STATUS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': 'u%s' % ISE_VOLUME1_LOCATION_URL, 'location': 'u%s' % ISE_VOLUME1_LOCATION_URL,
'content': " ".join(ISE_GET_VOL1_STATUS_XML.split())} 'content': " ".join(ISE_GET_VOL1_STATUS_XML.split())}
@@ -339,7 +340,7 @@ ISE_GET_VOL2_STATUS_XML =\
</volumes>""" % (ISE_VOLUME2_LOCATION_URL) </volumes>""" % (ISE_VOLUME2_LOCATION_URL)
ISE_GET_VOL2_STATUS_RESP =\ ISE_GET_VOL2_STATUS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': 'u%s' % ISE_VOLUME2_LOCATION_URL, 'location': 'u%s' % ISE_VOLUME2_LOCATION_URL,
'content': " ".join(ISE_GET_VOL2_STATUS_XML.split())} 'content': " ".join(ISE_GET_VOL2_STATUS_XML.split())}
@@ -355,7 +356,7 @@ ISE_GET_VOL3_STATUS_XML =\
</volumes>""" % (ISE_VOLUME3_LOCATION_URL) </volumes>""" % (ISE_VOLUME3_LOCATION_URL)
ISE_GET_VOL3_STATUS_RESP =\ ISE_GET_VOL3_STATUS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': 'u%s' % ISE_VOLUME3_LOCATION_URL, 'location': 'u%s' % ISE_VOLUME3_LOCATION_URL,
'content': " ".join(ISE_GET_VOL3_STATUS_XML.split())} 'content': " ".join(ISE_GET_VOL3_STATUS_XML.split())}
@@ -371,7 +372,7 @@ ISE_GET_SNAP1_STATUS_XML =\
</volumes>""" % (ISE_SNAPSHOT_LOCATION_URL) </volumes>""" % (ISE_SNAPSHOT_LOCATION_URL)
ISE_GET_SNAP1_STATUS_RESP =\ ISE_GET_SNAP1_STATUS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': 'u%s' % ISE_SNAPSHOT_LOCATION_URL, 'location': 'u%s' % ISE_SNAPSHOT_LOCATION_URL,
'content': " ".join(ISE_GET_SNAP1_STATUS_XML.split())} 'content': " ".join(ISE_GET_SNAP1_STATUS_XML.split())}
@@ -387,14 +388,14 @@ ISE_GET_CLONE1_STATUS_XML =\
</volumes>""" % (ISE_CLONE_LOCATION_URL) </volumes>""" % (ISE_CLONE_LOCATION_URL)
ISE_GET_CLONE1_STATUS_RESP =\ ISE_GET_CLONE1_STATUS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': 'u%s' % ISE_CLONE_LOCATION_URL, 'location': 'u%s' % ISE_CLONE_LOCATION_URL,
'content': " ".join(ISE_GET_CLONE1_STATUS_XML.split())} 'content': " ".join(ISE_GET_CLONE1_STATUS_XML.split())}
ISE_CREATE_VOLUME_XML = """<volume/>""" ISE_CREATE_VOLUME_XML = """<volume/>"""
ISE_CREATE_VOLUME_RESP =\ ISE_CREATE_VOLUME_RESP =\
{'status': 201, {'status': http_client.CREATED,
'location': ISE_VOLUME1_LOCATION_URL, 'location': ISE_VOLUME1_LOCATION_URL,
'content': " ".join(ISE_CREATE_VOLUME_XML.split())} 'content': " ".join(ISE_CREATE_VOLUME_XML.split())}
@@ -411,7 +412,7 @@ ISE_GET_IONETWORKS_XML =\
</chap>""" </chap>"""
ISE_GET_IONETWORKS_RESP =\ ISE_GET_IONETWORKS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_IONETWORKS_XML.split())} 'content': " ".join(ISE_GET_IONETWORKS_XML.split())}
@@ -428,14 +429,14 @@ ISE_GET_IONETWORKS_CHAP_XML =\
</chap>""" </chap>"""
ISE_GET_IONETWORKS_CHAP_RESP =\ ISE_GET_IONETWORKS_CHAP_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_IONETWORKS_CHAP_XML.split())} 'content': " ".join(ISE_GET_IONETWORKS_CHAP_XML.split())}
ISE_DELETE_VOLUME_XML = """<volumes/>""" ISE_DELETE_VOLUME_XML = """<volumes/>"""
ISE_DELETE_VOLUME_RESP =\ ISE_DELETE_VOLUME_RESP =\
{'status': 204, {'status': http_client.NO_CONTENT,
'location': '', 'location': '',
'content': " ".join(ISE_DELETE_VOLUME_XML.split())} 'content': " ".join(ISE_DELETE_VOLUME_XML.split())}
@@ -454,7 +455,7 @@ ISE_GET_ALLOC_WITH_EP_XML =\
(ISE_ALLOCATION_LOCATION_URL, VOLUME1['name'], HOST1) (ISE_ALLOCATION_LOCATION_URL, VOLUME1['name'], HOST1)
ISE_GET_ALLOC_WITH_EP_RESP =\ ISE_GET_ALLOC_WITH_EP_RESP =\
{'status': 200, {'status': http_client.OK,
'location': ISE_ALLOCATION_LOCATION_URL, 'location': ISE_ALLOCATION_LOCATION_URL,
'content': " ".join(ISE_GET_ALLOC_WITH_EP_XML.split())} 'content': " ".join(ISE_GET_ALLOC_WITH_EP_XML.split())}
@@ -462,14 +463,14 @@ ISE_GET_ALLOC_WITH_NO_ALLOC_XML =\
"""<allocations self="%s"/>""" % ISE_ALLOCATION_LOCATION_URL """<allocations self="%s"/>""" % ISE_ALLOCATION_LOCATION_URL
ISE_GET_ALLOC_WITH_NO_ALLOC_RESP =\ ISE_GET_ALLOC_WITH_NO_ALLOC_RESP =\
{'status': 200, {'status': http_client.OK,
'location': ISE_ALLOCATION_LOCATION_URL, 'location': ISE_ALLOCATION_LOCATION_URL,
'content': " ".join(ISE_GET_ALLOC_WITH_NO_ALLOC_XML.split())} 'content': " ".join(ISE_GET_ALLOC_WITH_NO_ALLOC_XML.split())}
ISE_DELETE_ALLOC_XML = """<allocations/>""" ISE_DELETE_ALLOC_XML = """<allocations/>"""
ISE_DELETE_ALLOC_RESP =\ ISE_DELETE_ALLOC_RESP =\
{'status': 204, {'status': http_client.NO_CONTENT,
'location': '', 'location': '',
'content': " ".join(ISE_DELETE_ALLOC_XML.split())} 'content': " ".join(ISE_DELETE_ALLOC_XML.split())}
@@ -477,7 +478,7 @@ ISE_GET_HOSTS_NOHOST_XML =\
"""<hosts self="http://ip/storage/hosts"/>""" """<hosts self="http://ip/storage/hosts"/>"""
ISE_GET_HOSTS_NOHOST_RESP =\ ISE_GET_HOSTS_NOHOST_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_HOSTS_NOHOST_XML.split())} 'content': " ".join(ISE_GET_HOSTS_NOHOST_XML.split())}
@@ -502,7 +503,7 @@ ISE_GET_HOSTS_HOST1_XML =\
</hosts>""" % HOST1 </hosts>""" % HOST1
ISE_GET_HOSTS_HOST1_RESP =\ ISE_GET_HOSTS_HOST1_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_HOSTS_HOST1_XML.split())} 'content': " ".join(ISE_GET_HOSTS_HOST1_XML.split())}
@@ -527,7 +528,7 @@ ISE_GET_HOSTS_HOST1_HOST_TYPE_XML =\
</hosts>""" % HOST1 </hosts>""" % HOST1
ISE_GET_HOSTS_HOST1_HOST_TYPE_RESP =\ ISE_GET_HOSTS_HOST1_HOST_TYPE_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_HOSTS_HOST1_HOST_TYPE_XML.split())} 'content': " ".join(ISE_GET_HOSTS_HOST1_HOST_TYPE_XML.split())}
@@ -551,7 +552,7 @@ ISE_GET_HOSTS_HOST2_XML =\
</hosts>""" % HOST2 </hosts>""" % HOST2
ISE_GET_HOSTS_HOST2_RESP =\ ISE_GET_HOSTS_HOST2_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_HOSTS_HOST2_XML.split())} 'content': " ".join(ISE_GET_HOSTS_HOST2_XML.split())}
@@ -559,7 +560,7 @@ ISE_CREATE_HOST_XML =\
"""<hosts self="http://ip/storage/hosts"/>""" """<hosts self="http://ip/storage/hosts"/>"""
ISE_CREATE_HOST_RESP =\ ISE_CREATE_HOST_RESP =\
{'status': 201, {'status': http_client.CREATED,
'location': 'http://ip/storage/hosts/host1', 'location': 'http://ip/storage/hosts/host1',
'content': " ".join(ISE_CREATE_HOST_XML.split())} 'content': " ".join(ISE_CREATE_HOST_XML.split())}
@@ -567,7 +568,7 @@ ISE_CREATE_ALLOC_XML =\
"""<allocations self="http://ip/storage/allocations"/>""" """<allocations self="http://ip/storage/allocations"/>"""
ISE_CREATE_ALLOC_RESP =\ ISE_CREATE_ALLOC_RESP =\
{'status': 201, {'status': http_client.CREATED,
'location': ISE_ALLOCATION_LOCATION_URL, 'location': ISE_ALLOCATION_LOCATION_URL,
'content': " ".join(ISE_CREATE_ALLOC_XML.split())} 'content': " ".join(ISE_CREATE_ALLOC_XML.split())}
@@ -607,7 +608,7 @@ ISE_GET_ENDPOINTS_XML =\
ISE_ALLOCATION_LOCATION_URL) ISE_ALLOCATION_LOCATION_URL)
ISE_GET_ENDPOINTS_RESP =\ ISE_GET_ENDPOINTS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_ENDPOINTS_XML.split())} 'content': " ".join(ISE_GET_ENDPOINTS_XML.split())}
@@ -659,35 +660,35 @@ ISE_GET_CONTROLLERS_XML =\
ISE_ISCSI_IP2, ISE_WWN3, ISE_WWN4) ISE_ISCSI_IP2, ISE_WWN3, ISE_WWN4)
ISE_GET_CONTROLLERS_RESP =\ ISE_GET_CONTROLLERS_RESP =\
{'status': 200, {'status': http_client.OK,
'location': '', 'location': '',
'content': " ".join(ISE_GET_CONTROLLERS_XML.split())} 'content': " ".join(ISE_GET_CONTROLLERS_XML.split())}
ISE_CREATE_SNAPSHOT_XML = """<snapshot/>""" ISE_CREATE_SNAPSHOT_XML = """<snapshot/>"""
ISE_CREATE_SNAPSHOT_RESP =\ ISE_CREATE_SNAPSHOT_RESP =\
{'status': 201, {'status': http_client.CREATED,
'location': ISE_SNAPSHOT_LOCATION_URL, 'location': ISE_SNAPSHOT_LOCATION_URL,
'content': " ".join(ISE_CREATE_SNAPSHOT_XML.split())} 'content': " ".join(ISE_CREATE_SNAPSHOT_XML.split())}
ISE_PREP_SNAPSHOT_XML = """<snapshot/>""" ISE_PREP_SNAPSHOT_XML = """<snapshot/>"""
ISE_PREP_SNAPSHOT_RESP =\ ISE_PREP_SNAPSHOT_RESP =\
{'status': 202, {'status': http_client.ACCEPTED,
'location': ISE_SNAPSHOT_LOCATION_URL, 'location': ISE_SNAPSHOT_LOCATION_URL,
'content': " ".join(ISE_PREP_SNAPSHOT_XML.split())} 'content': " ".join(ISE_PREP_SNAPSHOT_XML.split())}
ISE_MODIFY_VOLUME_XML = """<volume/>""" ISE_MODIFY_VOLUME_XML = """<volume/>"""
ISE_MODIFY_VOLUME_RESP =\ ISE_MODIFY_VOLUME_RESP =\
{'status': 201, {'status': http_client.CREATED,
'location': ISE_VOLUME1_LOCATION_URL, 'location': ISE_VOLUME1_LOCATION_URL,
'content': " ".join(ISE_MODIFY_VOLUME_XML.split())} 'content': " ".join(ISE_MODIFY_VOLUME_XML.split())}
ISE_MODIFY_HOST_XML = """<host/>""" ISE_MODIFY_HOST_XML = """<host/>"""
ISE_MODIFY_HOST_RESP =\ ISE_MODIFY_HOST_RESP =\
{'status': 201, {'status': http_client.CREATED,
'location': ISE_HOST_LOCATION_URL, 'location': ISE_HOST_LOCATION_URL,
'content': " ".join(ISE_MODIFY_HOST_XML.split())} 'content': " ".join(ISE_MODIFY_HOST_XML.split())}
@@ -697,7 +698,7 @@ ISE_BAD_CONNECTION_RESP =\
'content': " "} 'content': " "}
ISE_400_RESP =\ ISE_400_RESP =\
{'status': 400, {'status': http_client.BAD_REQUEST,
'location': '', 'location': '',
'content': ""} 'content': ""}
@@ -705,7 +706,7 @@ ISE_GET_VOL_STATUS_404_XML = \
"""<response value="404" index="3">VOLUME not found.</response>""" """<response value="404" index="3">VOLUME not found.</response>"""
ISE_GET_VOL_STATUS_404_RESP =\ ISE_GET_VOL_STATUS_404_RESP =\
{'status': 404, {'status': http_client.NOT_FOUND,
'location': '', 'location': '',
'content': " ".join(ISE_GET_VOL_STATUS_404_XML.split())} 'content': " ".join(ISE_GET_VOL_STATUS_404_XML.split())}
@@ -713,7 +714,7 @@ ISE_400_INVALID_STATE_XML = \
"""<response value="400">Not in a valid state.</response>""" """<response value="400">Not in a valid state.</response>"""
ISE_400_INVALID_STATE_RESP =\ ISE_400_INVALID_STATE_RESP =\
{'status': 400, {'status': http_client.BAD_REQUEST,
'location': '', 'location': '',
'content': " ".join(ISE_400_INVALID_STATE_XML.split())} 'content': " ".join(ISE_400_INVALID_STATE_XML.split())}
@@ -721,7 +722,7 @@ ISE_409_CONFLICT_XML = \
"""<response value="409">Conflict</response>""" """<response value="409">Conflict</response>"""
ISE_409_CONFLICT_RESP =\ ISE_409_CONFLICT_RESP =\
{'status': 409, {'status': http_client.CONFLICT,
'location': '', 'location': '',
'content': " ".join(ISE_409_CONFLICT_XML.split())} 'content': " ".join(ISE_409_CONFLICT_XML.split())}