Make test re-use HTTPRequest part 4

We are using the controller to do test instead of
wsgi URI now, the HTTPRequest is only a fake value
and mostly is not used. Make test class reuse
the Request to remove code complication.
Also, some method set such as 'POST', 'DELETE' etc
are not needed anymore since controller are
directly used.

This patch focus on evacuate, instance_usage_audit_log,
multiple_create, networks, services.

Partially implements blueprint v2-on-v3-api

Change-Id: Idcdc6ebecc38fda1b36356a34cabdba8fb9cbefb
This commit is contained in:
jichenjc 2015-01-17 06:38:33 +08:00
parent dc0436194d
commit 7e709f8ca0
5 changed files with 93 additions and 218 deletions

View File

@ -15,7 +15,6 @@
import uuid
from oslo.config import cfg
from oslo.serialization import jsonutils
import webob
from nova.api.openstack.compute.contrib import evacuate as evacuate_v2
@ -72,6 +71,8 @@ class EvacuateTestV21(test.NoDBTestCase):
for _method in self._methods:
self.stubs.Set(compute_api.API, _method, fake_compute_api)
self._set_up_controller()
self.admin_req = fakes.HTTPRequest.blank('', use_admin_context=True)
self.req = fakes.HTTPRequest.blank('')
def _set_up_controller(self):
self.controller = evacuate_v21.EvacuateController()
@ -79,9 +80,7 @@ class EvacuateTestV21(test.NoDBTestCase):
def _get_evacuate_response(self, json_load, uuid=None):
base_json_load = {'evacuate': json_load}
req = fakes.HTTPRequest.blank('', use_admin_context=True)
req.body = jsonutils.dumps(base_json_load)
response = self.controller._evacuate(req, uuid or self.UUID,
response = self.controller._evacuate(self.admin_req, uuid or self.UUID,
body=base_json_load)
return response
@ -90,10 +89,9 @@ class EvacuateTestV21(test.NoDBTestCase):
controller=None):
controller = controller or self.controller
body = {'evacuate': body}
req = fakes.HTTPRequest.blank('', use_admin_context=True)
self.assertRaises(exception,
controller._evacuate,
req, uuid or self.UUID, body=body)
self.admin_req, uuid or self.UUID, body=body)
def _fake_update(self, inst, context, instance, task_state,
expected_task_state):
@ -193,10 +191,9 @@ class EvacuateTestV21(test.NoDBTestCase):
def test_not_admin(self):
body = {'evacuate': {'host': 'my-host',
'onSharedStorage': 'False'}}
req = fakes.HTTPRequest.blank('', use_admin_context=False)
self.assertRaises(exception.PolicyNotAuthorized,
self.controller._evacuate,
req, self.UUID, body=body)
self.req, self.UUID, body=body)
def test_evacuate_to_same_host(self):
self._check_evacuate_failure(webob.exc.HTTPBadRequest,

View File

@ -130,6 +130,9 @@ class InstanceUsageAuditLogTestV21(test.NoDBTestCase):
self.stubs.Set(db, 'task_log_get_all',
fake_task_log_get_all)
self.req = fakes.HTTPRequest.blank('')
self.admin_req = fakes.HTTPRequest.blank('', use_admin_context=True)
def _set_up_controller(self):
self.controller = v21_ial.InstanceUsageAuditLogController()
@ -138,9 +141,7 @@ class InstanceUsageAuditLogTestV21(test.NoDBTestCase):
timeutils.clear_time_override()
def test_index(self):
req = fakes.HTTPRequest.blank('/v2/fake/os-instance_usage_audit_log',
use_admin_context=True)
result = self.controller.index(req)
result = self.controller.index(self.admin_req)
self.assertIn('instance_usage_audit_logs', result)
logs = result['instance_usage_audit_logs']
self.assertEqual(57, logs['total_instances'])
@ -153,16 +154,11 @@ class InstanceUsageAuditLogTestV21(test.NoDBTestCase):
self.assertEqual("ALL hosts done. 0 errors.", logs['overall_status'])
def test_index_non_admin(self):
req = fakes.HTTPRequest.blank('/v2/fake/os-instance_usage_audit_log',
use_admin_context=False)
self.assertRaises(exception.PolicyNotAuthorized,
self.controller.index, req)
self.controller.index, self.req)
def test_show(self):
req = fakes.HTTPRequest.blank(
'/v2/fake/os-instance_usage_audit_log/show',
use_admin_context=True)
result = self.controller.show(req, '2012-07-05 10:00:00')
result = self.controller.show(self.admin_req, '2012-07-05 10:00:00')
self.assertIn('instance_usage_audit_log', result)
logs = result['instance_usage_audit_log']
self.assertEqual(57, logs['total_instances'])
@ -175,16 +171,12 @@ class InstanceUsageAuditLogTestV21(test.NoDBTestCase):
self.assertEqual("ALL hosts done. 0 errors.", logs['overall_status'])
def test_show_non_admin(self):
req = fakes.HTTPRequest.blank('/v2/fake/os-instance_usage_audit_log',
use_admin_context=False)
self.assertRaises(exception.PolicyNotAuthorized,
self.controller.show, req, '2012-07-05 10:00:00')
self.controller.show, self.req,
'2012-07-05 10:00:00')
def test_show_with_running(self):
req = fakes.HTTPRequest.blank(
'/v2/fake/os-instance_usage_audit_log/show',
use_admin_context=True)
result = self.controller.show(req, '2012-07-06 10:00:00')
result = self.controller.show(self.admin_req, '2012-07-06 10:00:00')
self.assertIn('instance_usage_audit_log', result)
logs = result['instance_usage_audit_log']
self.assertEqual(57, logs['total_instances'])
@ -198,10 +190,7 @@ class InstanceUsageAuditLogTestV21(test.NoDBTestCase):
logs['overall_status'])
def test_show_with_errors(self):
req = fakes.HTTPRequest.blank(
'/v2/fake/os-instance_usage_audit_log/show',
use_admin_context=True)
result = self.controller.show(req, '2012-07-07 10:00:00')
result = self.controller.show(self.admin_req, '2012-07-07 10:00:00')
self.assertIn('instance_usage_audit_log', result)
logs = result['instance_usage_audit_log']
self.assertEqual(57, logs['total_instances'])

View File

@ -17,7 +17,6 @@ import datetime
import uuid
from oslo.config import cfg
from oslo.serialization import jsonutils
import webob
from nova.api.openstack.compute import plugins
@ -144,6 +143,7 @@ class MultiCreateExtensionTestV21(test.TestCase):
server_update)
self.stubs.Set(manager.VlanManager, 'allocate_fixed_ip',
fake_method)
self.req = fakes.HTTPRequest.blank('')
def _test_create_extra(self, params, no_image=False,
override_controller=None):
@ -153,14 +153,12 @@ class MultiCreateExtensionTestV21(test.TestCase):
server.pop('imageRef', None)
server.update(params)
body = dict(server=server)
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
if override_controller:
server = override_controller.create(req, body=body).obj['server']
server = override_controller.create(self.req,
body=body).obj['server']
else:
server = self.controller.create(req, body=body).obj['server']
server = self.controller.create(self.req,
body=body).obj['server']
def _check_multiple_create_extension_disabled(self, **kwargs):
# NOTE: on v2.1 API, "create a server" API doesn't add the following
@ -236,13 +234,9 @@ class MultiCreateExtensionTestV21(test.TestCase):
'flavorRef': flavor_ref,
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(self.validation_error,
self.controller.create,
req,
self.req,
body=body)
def test_create_instance_invalid_negative_max(self):
@ -257,13 +251,9 @@ class MultiCreateExtensionTestV21(test.TestCase):
'flavorRef': flavor_ref,
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(self.validation_error,
self.controller.create,
req,
self.req,
body=body)
def test_create_instance_with_blank_min(self):
@ -278,13 +268,9 @@ class MultiCreateExtensionTestV21(test.TestCase):
'flavor_ref': flavor_ref,
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(self.validation_error,
self.controller.create,
req,
self.req,
body=body)
def test_create_instance_with_blank_max(self):
@ -299,13 +285,9 @@ class MultiCreateExtensionTestV21(test.TestCase):
'flavor_ref': flavor_ref,
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(self.validation_error,
self.controller.create,
req,
self.req,
body=body)
def test_create_instance_invalid_min_greater_than_max(self):
@ -321,13 +303,9 @@ class MultiCreateExtensionTestV21(test.TestCase):
'flavorRef': flavor_ref,
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create,
req,
self.req,
body=body)
def test_create_instance_invalid_alpha_min(self):
@ -342,13 +320,9 @@ class MultiCreateExtensionTestV21(test.TestCase):
'flavorRef': flavor_ref,
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(self.validation_error,
self.controller.create,
req,
self.req,
body=body)
def test_create_instance_invalid_alpha_max(self):
@ -363,13 +337,9 @@ class MultiCreateExtensionTestV21(test.TestCase):
'flavorRef': flavor_ref,
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(self.validation_error,
self.controller.create,
req,
self.req,
body=body)
def test_create_multiple_instances(self):
@ -389,11 +359,7 @@ class MultiCreateExtensionTestV21(test.TestCase):
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = self.controller.create(req, body=body).obj
res = self.controller.create(self.req, body=body).obj
self.assertEqual(FAKE_UUID, res["server"]["id"])
self._check_admin_password_len(res["server"])
@ -416,11 +382,7 @@ class MultiCreateExtensionTestV21(test.TestCase):
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = self.controller.create(req, body=body).obj
res = self.controller.create(self.req, body=body).obj
self.assertEqual(FAKE_UUID, res["server"]["id"])
self._check_admin_password_missing(res["server"])
@ -452,11 +414,7 @@ class MultiCreateExtensionTestV21(test.TestCase):
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = self.controller.create(req, body=body)
res = self.controller.create(self.req, body=body)
reservation_id = res.obj['reservation_id']
self.assertNotEqual(reservation_id, "")
self.assertIsNotNone(reservation_id)
@ -531,12 +489,8 @@ class MultiCreateExtensionTestV21(test.TestCase):
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(self.validation_error,
self.controller.create, req, body=body)
self.controller.create, self.req, body=body)
def test_create_multiple_instance_with_non_integer_min_count(self):
image_href = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
@ -552,12 +506,8 @@ class MultiCreateExtensionTestV21(test.TestCase):
}
}
req = fakes.HTTPRequest.blank('/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
self.assertRaises(self.validation_error,
self.controller.create, req, body=body)
self.controller.create, self.req, body=body)
class MultiCreateExtensionTestV2(MultiCreateExtensionTestV21):

View File

@ -229,7 +229,6 @@ class FakeNetworkAPI(object):
# NOTE(vish): tests that network create Exceptions actually return
# the proper error responses
class NetworkCreateExceptionsTestV21(test.TestCase):
url_prefix = '/v2/1234'
class PassthroughAPI(object):
def __init__(self):
@ -246,39 +245,35 @@ class NetworkCreateExceptionsTestV21(test.TestCase):
fakes.stub_out_networking(self.stubs)
fakes.stub_out_rate_limiting(self.stubs)
self.new_network = copy.deepcopy(NEW_NETWORK)
self.req = fakes.HTTPRequest.blank('')
def _setup(self):
self.controller = networks_v21.NetworkController(self.PassthroughAPI())
def test_network_create_bad_vlan(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['vlan_start'] = 'foo'
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create, req, self.new_network)
self.controller.create, self.req, self.new_network)
def test_network_create_no_cidr(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['cidr'] = ''
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create, req, self.new_network)
self.controller.create, self.req, self.new_network)
def test_network_create_invalid_fixed_cidr(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['fixed_cidr'] = 'foo'
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create, req, self.new_network)
self.controller.create, self.req, self.new_network)
def test_network_create_invalid_start(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['allowed_start'] = 'foo'
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create, req, self.new_network)
self.controller.create, self.req, self.new_network)
def test_network_create_handle_network_not_created(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['label'] = 'fail_NetworkNotCreated'
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create, req, self.new_network)
self.controller.create, self.req, self.new_network)
def test_network_create_cidr_conflict(self):
@ -291,10 +286,9 @@ class NetworkCreateExceptionsTestV21(test.TestCase):
self.stubs.Set(objects.NetworkList, 'get_all', get_all)
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['cidr'] = '10.0.0.0/24'
self.assertRaises(webob.exc.HTTPConflict,
self.controller.create, req, self.new_network)
self.controller.create, self.req, self.new_network)
class NetworkCreateExceptionsTestV2(NetworkCreateExceptionsTestV21):
@ -308,7 +302,6 @@ class NetworkCreateExceptionsTestV2(NetworkCreateExceptionsTestV21):
class NetworksTestV21(test.NoDBTestCase):
url_prefix = '/v2/1234'
def setUp(self):
super(NetworksTestV21, self).setUp()
@ -317,6 +310,8 @@ class NetworksTestV21(test.NoDBTestCase):
fakes.stub_out_networking(self.stubs)
fakes.stub_out_rate_limiting(self.stubs)
self.new_network = copy.deepcopy(NEW_NETWORK)
self.req = fakes.HTTPRequest.blank('')
self.admin_req = fakes.HTTPRequest.blank('', use_admin_context=True)
def _setup(self):
self.controller = networks_v21.NetworkController(
@ -332,26 +327,23 @@ class NetworksTestV21(test.NoDBTestCase):
def test_network_list_all_as_user(self):
self.maxDiff = None
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
res_dict = self.controller.index(req)
res_dict = self.controller.index(self.req)
self.assertEqual(res_dict, {'networks': []})
project_id = req.environ["nova.context"].project_id
cxt = req.environ["nova.context"]
project_id = self.req.environ["nova.context"].project_id
cxt = self.req.environ["nova.context"]
uuid = FAKE_NETWORKS[0]['uuid']
self.fake_network_api.associate(context=cxt,
network_uuid=uuid,
project=project_id)
res_dict = self.controller.index(req)
res_dict = self.controller.index(self.req)
expected = [copy.deepcopy(FAKE_USER_NETWORKS[0])]
for network in expected:
self.network_uuid_to_id(network)
self.assertEqual({'networks': expected}, res_dict)
def test_network_list_all_as_admin(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
req.environ["nova.context"].is_admin = True
res_dict = self.controller.index(req)
res_dict = self.controller.index(self.admin_req)
expected = copy.deepcopy(FAKE_NETWORKS)
for network in expected:
self.network_uuid_to_id(network)
@ -359,74 +351,55 @@ class NetworksTestV21(test.NoDBTestCase):
def test_network_disassociate(self):
uuid = FAKE_NETWORKS[0]['uuid']
req = fakes.HTTPRequest.blank(self.url_prefix +
'/os-networks/%s/action' % uuid)
res = self.controller._disassociate_host_and_project(
req, uuid, {'disassociate': None})
self.req, uuid, {'disassociate': None})
self._check_status(res, self.controller._disassociate_host_and_project,
202)
self.assertIsNone(self.fake_network_api.networks[0]['project_id'])
self.assertIsNone(self.fake_network_api.networks[0]['host'])
def test_network_disassociate_not_found(self):
req = fakes.HTTPRequest.blank(self.url_prefix +
'/os-networks/100/action')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller._disassociate_host_and_project,
req, 100, {'disassociate': None})
self.req, 100, {'disassociate': None})
def test_network_get_as_user(self):
uuid = FAKE_USER_NETWORKS[0]['uuid']
req = fakes.HTTPRequest.blank(self.url_prefix +
'/os-networks/%s' % uuid)
res_dict = self.controller.show(req, uuid)
res_dict = self.controller.show(self.req, uuid)
expected = {'network': copy.deepcopy(FAKE_USER_NETWORKS[0])}
self.network_uuid_to_id(expected['network'])
self.assertEqual(expected, res_dict)
def test_network_get_as_admin(self):
uuid = FAKE_NETWORKS[0]['uuid']
req = fakes.HTTPRequest.blank(self.url_prefix +
'/os-networks/%s' % uuid)
req.environ["nova.context"].is_admin = True
res_dict = self.controller.show(req, uuid)
res_dict = self.controller.show(self.admin_req, uuid)
expected = {'network': copy.deepcopy(FAKE_NETWORKS[0])}
self.network_uuid_to_id(expected['network'])
self.assertEqual(expected, res_dict)
def test_network_get_not_found(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks/100')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.show, req, 100)
self.controller.show, self.req, 100)
def test_network_delete(self):
uuid = FAKE_NETWORKS[0]['uuid']
req = fakes.HTTPRequest.blank(self.url_prefix +
'/os-networks/%s' % uuid)
res = self.controller.delete(req, 1)
res = self.controller.delete(self.req, 1)
self._check_status(res, self.controller._disassociate_host_and_project,
202)
def test_network_delete_not_found(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks/100')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.delete, req, 100)
self.controller.delete, self.req, 100)
def test_network_delete_in_use(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks/-1')
self.assertRaises(webob.exc.HTTPConflict,
self.controller.delete, req, -1)
self.controller.delete, self.req, -1)
def test_network_add(self):
uuid = FAKE_NETWORKS[1]['uuid']
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks/add')
res = self.controller.add(req, {'id': uuid})
res = self.controller.add(self.req, {'id': uuid})
self._check_status(res, self.controller._disassociate_host_and_project,
202)
req = fakes.HTTPRequest.blank(self.url_prefix +
'/os-networks/%s' % uuid)
req.environ["nova.context"].is_admin = True
res_dict = self.controller.show(req, uuid)
res_dict = self.controller.show(self.admin_req, uuid)
self.assertEqual(res_dict['network']['project_id'], 'fake')
@mock.patch('nova.tests.unit.api.openstack.compute.contrib.test_networks.'
@ -434,52 +407,43 @@ class NetworksTestV21(test.NoDBTestCase):
side_effect=exception.NoMoreNetworks)
def test_network_add_no_more_networks_fail(self, mock_add):
uuid = FAKE_NETWORKS[1]['uuid']
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks/add')
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.add, req,
{'id': uuid})
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.add,
self.req, {'id': uuid})
@mock.patch('nova.tests.unit.api.openstack.compute.contrib.test_networks.'
'FakeNetworkAPI.add_network_to_project',
side_effect=exception.NetworkNotFoundForUUID(uuid='fake_uuid'))
def test_network_add_network_not_found_networks_fail(self, mock_add):
uuid = FAKE_NETWORKS[1]['uuid']
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks/add')
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.add, req,
{'id': uuid})
self.assertRaises(webob.exc.HTTPBadRequest, self.controller.add,
self.req, {'id': uuid})
def test_network_create(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
res_dict = self.controller.create(req, body=self.new_network)
res_dict = self.controller.create(self.req, body=self.new_network)
self.assertIn('network', res_dict)
uuid = res_dict['network']['id']
req = fakes.HTTPRequest.blank(self.url_prefix +
'/os-networks/%s' % uuid)
res_dict = self.controller.show(req, uuid)
res_dict = self.controller.show(self.req, uuid)
self.assertTrue(res_dict['network']['label'].
startswith(NEW_NETWORK['network']['label']))
def test_network_create_large(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['cidr'] = '128.0.0.0/4'
res_dict = self.controller.create(req, self.new_network)
res_dict = self.controller.create(self.req, self.new_network)
self.assertEqual(res_dict['network']['cidr'],
self.new_network['network']['cidr'])
def test_network_create_bad_cidr(self):
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['cidr'] = '128.0.0.0/900'
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create, req, self.new_network)
self.controller.create, self.req, self.new_network)
def test_network_neutron_disassociate_not_implemented(self):
uuid = FAKE_NETWORKS[1]['uuid']
self.flags(network_api_class='nova.network.neutronv2.api.API')
controller = networks.NetworkController()
req = fakes.HTTPRequest.blank(self.url_prefix +
'/os-networks/%s/action' % uuid)
self.assertRaises(webob.exc.HTTPNotImplemented,
controller._disassociate_host_and_project,
req, uuid, {'disassociate': None})
self.req, uuid, {'disassociate': None})
class NetworksTestV2(NetworksTestV21):
@ -504,9 +468,8 @@ class NetworksTestV2(NetworksTestV21):
return [{}]
self.stubs.Set(self.controller.network_api, 'create', no_mtu)
req = fakes.HTTPRequest.blank(self.url_prefix + '/os-networks')
self.new_network['network']['mtu'] = 9000
self.controller.create(req, self.new_network)
self.controller.create(self.req, self.new_network)
class NetworksAssociateTestV21(test.NoDBTestCase):
@ -517,6 +480,8 @@ class NetworksAssociateTestV21(test.NoDBTestCase):
self._setup()
fakes.stub_out_networking(self.stubs)
fakes.stub_out_rate_limiting(self.stubs)
self.req = fakes.HTTPRequest.blank('')
self.admin_req = fakes.HTTPRequest.blank('', use_admin_context=True)
def _setup(self):
self.controller = networks.NetworkController(self.fake_network_api)
@ -528,9 +493,8 @@ class NetworksAssociateTestV21(test.NoDBTestCase):
def test_network_disassociate_host_only(self):
uuid = FAKE_NETWORKS[0]['uuid']
req = fakes.HTTPRequest.blank('/v2/1234/os-networks/%s/action' % uuid)
res = self.associate_controller._disassociate_host_only(
req, uuid, {'disassociate_host': None})
self.req, uuid, {'disassociate_host': None})
self._check_status(res,
self.associate_controller._disassociate_host_only,
202)
@ -539,9 +503,8 @@ class NetworksAssociateTestV21(test.NoDBTestCase):
def test_network_disassociate_project_only(self):
uuid = FAKE_NETWORKS[0]['uuid']
req = fakes.HTTPRequest.blank('/v2/1234/os-networks/%s/action' % uuid)
res = self.associate_controller._disassociate_project_only(
req, uuid, {'disassociate_project': None})
self.req, uuid, {'disassociate_project': None})
self._check_status(
res, self.associate_controller._disassociate_project_only, 202)
self.assertIsNone(self.fake_network_api.networks[0]['project_id'])
@ -566,13 +529,10 @@ class NetworksAssociateTestV21(test.NoDBTestCase):
def test_network_associate_with_host(self):
uuid = FAKE_NETWORKS[1]['uuid']
req = fakes.HTTPRequest.blank('/v2/1234//os-networks/%s/action' % uuid)
res = self.associate_controller._associate_host(
req, uuid, body={'associate_host': "TestHost"})
self.req, uuid, body={'associate_host': "TestHost"})
self._check_status(res, self.associate_controller._associate_host, 202)
req = fakes.HTTPRequest.blank('/v2/1234/os-networks/%s' % uuid)
req.environ["nova.context"].is_admin = True
res_dict = self.controller.show(req, uuid)
res_dict = self.controller.show(self.admin_req, uuid)
self.assertEqual(res_dict['network']['host'], 'TestHost')
def test_network_neutron_associate_not_implemented(self):
@ -580,10 +540,9 @@ class NetworksAssociateTestV21(test.NoDBTestCase):
self.flags(network_api_class='nova.network.neutronv2.api.API')
assoc_ctrl = networks_associate.NetworkAssociateActionController()
req = fakes.HTTPRequest.blank('/v2/1234/os-networks/%s/action' % uuid)
self.assertRaises(webob.exc.HTTPNotImplemented,
assoc_ctrl._associate_host,
req, uuid, {'associate_host': "TestHost"})
self.req, uuid, {'associate_host': "TestHost"})
def _test_network_neutron_associate_host_validation_failed(self, body):
uuid = FAKE_NETWORKS[1]['uuid']
@ -614,19 +573,17 @@ class NetworksAssociateTestV21(test.NoDBTestCase):
self.flags(network_api_class='nova.network.neutronv2.api.API')
assoc_ctrl = networks_associate.NetworkAssociateActionController()
req = fakes.HTTPRequest.blank('/v2/1234/os-networks/%s/action' % uuid)
self.assertRaises(webob.exc.HTTPNotImplemented,
assoc_ctrl._disassociate_project_only,
req, uuid, {'disassociate_project': None})
self.req, uuid, {'disassociate_project': None})
def test_network_neutron_disassociate_host_not_implemented(self):
uuid = FAKE_NETWORKS[1]['uuid']
self.flags(network_api_class='nova.network.neutronv2.api.API')
assoc_ctrl = networks_associate.NetworkAssociateActionController()
req = fakes.HTTPRequest.blank('/v2/1234/os-networks/%s/action' % uuid)
self.assertRaises(webob.exc.HTTPNotImplemented,
assoc_ctrl._disassociate_host_only,
req, uuid, {'disassociate_host': None})
self.req, uuid, {'disassociate_host': None})
class NetworksAssociateTestV2(NetworksAssociateTestV21):

View File

@ -180,6 +180,9 @@ class ServicesTestV21(test.TestCase):
self.stubs.Set(db, "service_update",
fake_db_service_update(fake_services_list))
self.req = fakes.HTTPRequest.blank('')
self.admin_req = fakes.HTTPRequest.blank('', use_admin_context=True)
def _process_output(self, services, has_disabled=False, has_id=False):
return services
@ -450,65 +453,56 @@ class ServicesTestV21(test.TestCase):
self.stubs.Set(db, "service_update", _service_update)
body = {'host': 'host1', 'binary': 'nova-compute'}
req = fakes.HTTPRequest.blank('/v2/fake/os-services/enable')
res_dict = self.controller.update(req, "enable", body=body)
res_dict = self.controller.update(self.req, "enable", body=body)
self.assertEqual(res_dict['service']['status'], 'enabled')
self.assertNotIn('disabled_reason', res_dict['service'])
def test_services_enable_with_invalid_host(self):
body = {'host': 'invalid', 'binary': 'nova-compute'}
req = fakes.HTTPRequest.blank('/v2/fake/os-services/enable')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.update,
req,
self.req,
"enable",
body=body)
def test_services_enable_with_invalid_binary(self):
body = {'host': 'host1', 'binary': 'invalid'}
req = fakes.HTTPRequest.blank('/v2/fake/os-services/enable')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.update,
req,
self.req,
"enable",
body=body)
def test_services_disable(self):
req = fakes.HTTPRequest.blank('/v2/fake/os-services/disable')
body = {'host': 'host1', 'binary': 'nova-compute'}
res_dict = self.controller.update(req, "disable", body=body)
res_dict = self.controller.update(self.req, "disable", body=body)
self.assertEqual(res_dict['service']['status'], 'disabled')
self.assertNotIn('disabled_reason', res_dict['service'])
def test_services_disable_with_invalid_host(self):
body = {'host': 'invalid', 'binary': 'nova-compute'}
req = fakes.HTTPRequest.blank('/v2/fake/os-services/disable')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.update,
req,
self.req,
"disable",
body=body)
def test_services_disable_with_invalid_binary(self):
body = {'host': 'host1', 'binary': 'invalid'}
req = fakes.HTTPRequest.blank('/v2/fake/os-services/disable')
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.update,
req,
self.req,
"disable",
body=body)
def test_services_disable_log_reason(self):
self.ext_mgr.extensions['os-extended-services'] = True
req = \
fakes.HTTPRequest.blank('/v2/fake/os-services/disable-log-reason')
body = {'host': 'host1',
'binary': 'nova-compute',
'disabled_reason': 'test-reason',
}
res_dict = self.controller.update(req,
res_dict = self.controller.update(self.req,
"disable-log-reason",
body=body)
@ -517,48 +511,39 @@ class ServicesTestV21(test.TestCase):
def test_mandatory_reason_field(self):
self.ext_mgr.extensions['os-extended-services'] = True
req = \
fakes.HTTPRequest.blank('/v2/fake/os-services/disable-log-reason')
body = {'host': 'host1',
'binary': 'nova-compute',
}
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.update, req, "disable-log-reason", body=body)
self.controller.update, self.req, "disable-log-reason",
body=body)
def test_invalid_reason_field(self):
self.ext_mgr.extensions['os-extended-services'] = True
url = '/v2/fake/os-services/disable-log-reason'
req = fakes.HTTPRequest.blank(url)
reason = 'a' * 256
body = {'host': 'host1',
'binary': 'nova-compute',
'disabled_reason': reason,
}
self.assertRaises(self.bad_request,
self.controller.update, req, "disable-log-reason", body=body)
self.controller.update, self.req, "disable-log-reason",
body=body)
def test_services_delete(self):
self.ext_mgr.extensions['os-extended-services-delete'] = True
request = fakes.HTTPRequest.blank('/v2/fakes/os-services/1',
use_admin_context=True)
request.method = 'DELETE'
with mock.patch.object(self.controller.host_api,
'service_delete') as service_delete:
self.controller.delete(request, '1')
self.controller.delete(self.admin_req, '1')
service_delete.assert_called_once_with(
request.environ['nova.context'], '1')
self.admin_req.environ['nova.context'], '1')
self.assertEqual(self.controller.delete.wsgi_code, 204)
def test_services_delete_not_found(self):
self.ext_mgr.extensions['os-extended-services-delete'] = True
request = fakes.HTTPRequest.blank('/v2/fakes/os-services/abc',
use_admin_context=True)
request.method = 'DELETE'
self.assertRaises(webob.exc.HTTPNotFound,
self.controller.delete, request, 'abc')
self.controller.delete, self.admin_req, 'abc')
# This test is just to verify that the servicegroup API gets used when
# calling the API
@ -579,11 +564,8 @@ class ServicesTestV20(ServicesTestV21):
self.controller = services_v2.ServiceController(self.ext_mgr)
def test_services_delete_not_enabled(self):
request = fakes.HTTPRequest.blank('v2/fakes/os-services/300',
use_admin_context=True)
request.method = 'DELETE'
self.assertRaises(webob.exc.HTTPMethodNotAllowed,
self.controller.delete, request, '300')
self.controller.delete, self.admin_req, '300')
def _process_output(self, services, has_disabled=False, has_id=False):
for service in services['services']: