74
def return_servers_by_reservation(context, reservation_id=""):
75
return [fakes.stub_instance(i + 1,
76
reservation_id=reservation_id) for i in xrange(5)]
79
75
def return_servers_empty(context, *args, **kwargs):
83
def return_servers_by_reservation_empty(context, reservation_id=""):
87
79
def return_security_group(context, instance_id, security_group_id):
539
531
self.assertEqual(0, num_servers)
541
533
def test_get_server_list_with_reservation_id(self):
542
self.stubs.Set(db, 'instance_get_all_by_reservation',
543
return_servers_by_reservation)
545
534
req = fakes.HTTPRequest.blank('/v2/fake/servers?reservation_id=foo')
546
535
res_dict = self.controller.index(req)
553
542
def test_get_server_list_with_reservation_id_empty(self):
554
self.stubs.Set(db, 'instance_get_all_by_reservation',
555
return_servers_by_reservation_empty)
557
543
req = fakes.HTTPRequest.blank('/v2/fake/servers/detail?'
558
544
'reservation_id=foo')
559
545
res_dict = self.controller.detail(req)
566
552
def test_get_server_list_with_reservation_id_details(self):
567
self.stubs.Set(db, 'instance_get_all_by_reservation',
568
return_servers_by_reservation)
570
553
req = fakes.HTTPRequest.blank('/v2/fake/servers/detail?'
571
554
'reservation_id=foo')
572
555
res_dict = self.controller.detail(req)
2006
1989
req.headers["content-type"] = "application/json"
2007
1990
res = self.controller.create(req, body)
2009
reservation_id = res.get('reservation_id')
1992
reservation_id = res.obj.get('reservation_id')
2010
1993
self.assertNotEqual(reservation_id, "")
2011
1994
self.assertNotEqual(reservation_id, None)
2012
1995
self.assertTrue(len(reservation_id) > 1)
2060
2043
self.assertRaises(webob.exc.HTTPBadRequest,
2061
2044
self._test_create_extra, params, no_image=True)
2046
def test_create_multiple_instance_with_non_integer_max_count(self):
2047
self.ext_mgr.extensions = {'os-multiple-create': 'fake'}
2048
image_href = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
2049
flavor_ref = 'http://localhost/123/flavors/3'
2053
'name': 'server_test',
2054
'imageRef': image_href,
2055
'flavorRef': flavor_ref,
2056
'metadata': {'hello': 'world',
2062
req = fakes.HTTPRequest.blank('/v2/fake/servers')
2064
req.body = jsonutils.dumps(body)
2065
req.headers["content-type"] = "application/json"
2066
self.assertRaises(webob.exc.HTTPBadRequest,
2067
self.controller.create, req, body)
2069
def test_create_multiple_instance_with_non_integer_min_count(self):
2070
self.ext_mgr.extensions = {'os-multiple-create': 'fake'}
2071
image_href = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
2072
flavor_ref = 'http://localhost/123/flavors/3'
2076
'name': 'server_test',
2077
'imageRef': image_href,
2078
'flavorRef': flavor_ref,
2079
'metadata': {'hello': 'world',
2085
req = fakes.HTTPRequest.blank('/v2/fake/servers')
2087
req.body = jsonutils.dumps(body)
2088
req.headers["content-type"] = "application/json"
2089
self.assertRaises(webob.exc.HTTPBadRequest,
2090
self.controller.create, req, body)
2063
2092
def test_create_instance_image_ref_is_bookmark(self):
2064
2093
image_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
2065
2094
image_href = 'http://localhost/fake/images/%s' % image_uuid
2120
2149
def test_create_instance_with_security_group_enabled(self):
2121
2150
self.ext_mgr.extensions = {'os-security-groups': 'fake'}
2123
params = {'security_groups': [{'name': group}]}
2124
2152
old_create = compute_api.API.create
2154
def sec_group_get(ctx, proj, name):
2158
raise exception.SecurityGroupNotFoundForProject(
2159
project_id=proj, security_group_id=name)
2126
2161
def create(*args, **kwargs):
2127
2162
self.assertEqual(kwargs['security_group'], [group])
2128
2163
return old_create(*args, **kwargs)
2165
self.stubs.Set(db, 'security_group_get_by_name', sec_group_get)
2167
self.assertRaises(webob.exc.HTTPBadRequest,
2168
self._test_create_extra,
2169
{'security_groups': [{'name': 'bogus'}]})
2170
# positive test - extra assert in create path
2130
2171
self.stubs.Set(compute_api.API, 'create', create)
2131
self._test_create_extra(params)
2172
self._test_create_extra({'security_groups': [{'name': group}]})
2133
2174
def test_create_instance_with_security_group_disabled(self):
2150
2191
# NOTE(vish): the extension converts OS-DCF:disk_config into
2151
2192
# auto_disk_config, so we are testing with
2152
2193
# the_internal_value
2153
params = {'auto_disk_config': True}
2194
params = {'auto_disk_config': 'AUTO'}
2154
2195
old_create = compute_api.API.create
2156
2197
def create(*args, **kwargs):
2157
self.assertEqual(kwargs['auto_disk_config'], True)
2198
self.assertEqual(kwargs['auto_disk_config'], 'AUTO')
2158
2199
return old_create(*args, **kwargs)
2160
2201
self.stubs.Set(compute_api.API, 'create', create)
2482
2523
self.stubs.Set(compute_api.API, 'create', create)
2483
2524
self._test_create_extra(params)
2526
def test_create_instance_with_networks_disabled_quantumv2(self):
2527
self.flags(network_api_class='nova.network.quantumv2.api.API')
2528
net_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
2529
requested_networks = [{'uuid': net_uuid}]
2530
params = {'networks': requested_networks}
2531
old_create = compute_api.API.create
2533
def create(*args, **kwargs):
2534
result = [('76fa36fc-c930-4bf3-8c8a-ea2a2420deb6', None,
2536
self.assertEqual(kwargs['requested_networks'], result)
2537
return old_create(*args, **kwargs)
2539
self.stubs.Set(compute_api.API, 'create', create)
2540
self._test_create_extra(params)
2485
2542
def test_create_instance_with_networks_disabled(self):
2486
2543
self.ext_mgr.extensions = {}
2487
2544
net_uuid = '76fa36fc-c930-4bf3-8c8a-ea2a2420deb6'
3705
3762
<server xmlns="http://docs.openstack.org/compute/api/v2"
3706
3763
xmlns:OS-DCF="http://docs.openstack.org/compute/ext/disk_config/api/v1.1"
3707
3764
name="new-server-test" imageRef="1" flavorRef="1"
3708
OS-DCF:diskConfig="True">
3765
OS-DCF:diskConfig="AUTO">
3710
3767
request = self.deserializer.deserialize(serial_request)
3711
3768
expected = {"server": {
3712
3769
"name": "new-server-test",
3713
3770
"imageRef": "1",
3714
3771
"flavorRef": "1",
3715
"OS-DCF:diskConfig": True,
3772
"OS-DCF:diskConfig": "AUTO",
3717
3774
self.assertEquals(request['body'], expected)
3804
3861
self.assertEquals(request['body'], expected)
3863
def test_corrupt_xml(self):
3864
"""Should throw a 400 error on corrupt xml."""
3866
exception.MalformedRequestBody,
3867
self.deserializer.deserialize,
3868
utils.killer_xml_body())
3871
class TestServerActionRequestXMLDeserializer(test.TestCase):
3874
super(TestServerActionRequestXMLDeserializer, self).setUp()
3875
self.deserializer = servers.ActionDeserializer()
3877
def test_rebuild_request(self):
3878
serial_request = """
3879
<rebuild xmlns="http://docs.openstack.org/compute/api/v1.1"
3880
xmlns:OS-DCF="http://docs.openstack.org/compute/ext/disk_config/api/v1.1"
3881
OS-DCF:diskConfig="MANUAL" imageRef="1"/>"""
3882
request = self.deserializer.deserialize(serial_request)
3886
"OS-DCF:diskConfig": "MANUAL",
3889
self.assertEquals(request['body'], expected)
3891
def test_rebuild_request_auto_disk_config_compat(self):
3892
serial_request = """
3893
<rebuild xmlns="http://docs.openstack.org/compute/api/v1.1"
3894
xmlns:OS-DCF="http://docs.openstack.org/compute/ext/disk_config/api/v1.1"
3895
auto_disk_config="MANUAL" imageRef="1"/>"""
3896
request = self.deserializer.deserialize(serial_request)
3900
"OS-DCF:diskConfig": "MANUAL",
3903
self.assertEquals(request['body'], expected)
3905
def test_resize_request(self):
3906
serial_request = """
3907
<resize xmlns="http://docs.openstack.org/compute/api/v1.1"
3908
xmlns:OS-DCF="http://docs.openstack.org/compute/ext/disk_config/api/v1.1"
3909
OS-DCF:diskConfig="MANUAL" flavorRef="1"/>"""
3910
request = self.deserializer.deserialize(serial_request)
3914
"OS-DCF:diskConfig": "MANUAL",
3917
self.assertEquals(request['body'], expected)
3919
def test_resize_request_auto_disk_config_compat(self):
3920
serial_request = """
3921
<resize xmlns="http://docs.openstack.org/compute/api/v1.1"
3922
xmlns:OS-DCF="http://docs.openstack.org/compute/ext/disk_config/api/v1.1"
3923
auto_disk_config="MANUAL" flavorRef="1"/>"""
3924
request = self.deserializer.deserialize(serial_request)
3928
"OS-DCF:diskConfig": "MANUAL",
3931
self.assertEquals(request['body'], expected)
3807
3934
class TestAddressesXMLSerialization(test.TestCase):
3912
4039
result = self.view_builder._get_flavor(self.request, self.instance)
3913
4040
self.assertEqual(result, expected)
3915
def test_get_flavor_deleted_instance_type(self):
3916
self.instance['instance_type'] = {}
3917
result = self.view_builder._get_flavor(self.request, self.instance)
3918
self.assertEqual(result, {})
3920
4042
def test_build_server(self):
3921
4043
self_link = "http://localhost/v2/fake/servers/%s" % self.uuid
3922
4044
bookmark_link = "http://localhost/fake/servers/%s" % self.uuid