~ubuntu-branches/ubuntu/raring/nova/raring-proposed

« back to all changes in this revision

Viewing changes to nova/tests/api/openstack/compute/test_servers.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short, Chuck Short, James Page
  • Date: 2013-03-20 12:59:22 UTC
  • mfrom: (1.1.69)
  • Revision ID: package-import@ubuntu.com-20130320125922-ohvfav96lemn9wlz
Tags: 1:2013.1~rc1-0ubuntu1
[ Chuck Short ]
* New upstream release.
* debian/patches/avoid_setuptools_git_dependency.patch: Refreshed.
* debian/control: Clean up dependencies:
  - Dropped python-gflags no longer needed.
  - Dropped python-daemon no longer needed.
  - Dropped python-glance no longer needed.
  - Dropped python-lockfile no longer needed.
  - Dropped python-simplejson no longer needed.
  - Dropped python-tempita no longer needed.
  - Dropped python-xattr no longer needed.
  - Add sqlite3 required for the testsuite.

[ James Page ]
* d/watch: Update uversionmangle to deal with upstream versioning
  changes, remove tarballs.openstack.org. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
2
 
3
 
# Copyright 2010-2011 OpenStack LLC.
 
3
# Copyright 2010-2011 OpenStack Foundation
4
4
# Copyright 2011 Piston Cloud Computing, Inc.
5
5
# All Rights Reserved.
6
6
#
51
51
from nova.tests import fake_network
52
52
from nova.tests.image import fake
53
53
from nova.tests import matchers
 
54
from nova.tests import utils
54
55
 
55
56
CONF = cfg.CONF
56
57
CONF.import_opt('password_length', 'nova.utils')
71
72
    return FAKE_UUID
72
73
 
73
74
 
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)]
77
 
 
78
 
 
79
75
def return_servers_empty(context, *args, **kwargs):
80
76
    return []
81
77
 
82
78
 
83
 
def return_servers_by_reservation_empty(context, reservation_id=""):
84
 
    return []
85
 
 
86
 
 
87
79
def return_security_group(context, instance_id, security_group_id):
88
80
    pass
89
81
 
539
531
        self.assertEqual(0, num_servers)
540
532
 
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)
544
 
 
545
534
        req = fakes.HTTPRequest.blank('/v2/fake/servers?reservation_id=foo')
546
535
        res_dict = self.controller.index(req)
547
536
 
551
540
            i += 1
552
541
 
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)
556
 
 
557
543
        req = fakes.HTTPRequest.blank('/v2/fake/servers/detail?'
558
544
                                      'reservation_id=foo')
559
545
        res_dict = self.controller.detail(req)
564
550
            i += 1
565
551
 
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)
569
 
 
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)
2008
1991
 
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)
2062
2045
 
 
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'
 
2050
        body = {
 
2051
            'server': {
 
2052
                'max_count': 2.5,
 
2053
                'name': 'server_test',
 
2054
                'imageRef': image_href,
 
2055
                'flavorRef': flavor_ref,
 
2056
                'metadata': {'hello': 'world',
 
2057
                             'open': 'stack'},
 
2058
                'personality': []
 
2059
            }
 
2060
        }
 
2061
 
 
2062
        req = fakes.HTTPRequest.blank('/v2/fake/servers')
 
2063
        req.method = 'POST'
 
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)
 
2068
 
 
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'
 
2073
        body = {
 
2074
            'server': {
 
2075
                'min_count': 2.5,
 
2076
                'name': 'server_test',
 
2077
                'imageRef': image_href,
 
2078
                'flavorRef': flavor_ref,
 
2079
                'metadata': {'hello': 'world',
 
2080
                             'open': 'stack'},
 
2081
                'personality': []
 
2082
            }
 
2083
        }
 
2084
 
 
2085
        req = fakes.HTTPRequest.blank('/v2/fake/servers')
 
2086
        req.method = 'POST'
 
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)
 
2091
 
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'}
2122
2151
        group = 'foo'
2123
 
        params = {'security_groups': [{'name': group}]}
2124
2152
        old_create = compute_api.API.create
2125
2153
 
 
2154
        def sec_group_get(ctx, proj, name):
 
2155
            if name == group:
 
2156
                return True
 
2157
            else:
 
2158
                raise exception.SecurityGroupNotFoundForProject(
 
2159
                    project_id=proj, security_group_id=name)
 
2160
 
2126
2161
        def create(*args, **kwargs):
2127
2162
            self.assertEqual(kwargs['security_group'], [group])
2128
2163
            return old_create(*args, **kwargs)
2129
2164
 
 
2165
        self.stubs.Set(db, 'security_group_get_by_name', sec_group_get)
 
2166
        # negative test
 
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}]})
2132
2173
 
2133
2174
    def test_create_instance_with_security_group_disabled(self):
2134
2175
        group = 'foo'
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
2155
2196
 
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)
2159
2200
 
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)
2484
2525
 
 
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
 
2532
 
 
2533
        def create(*args, **kwargs):
 
2534
            result = [('76fa36fc-c930-4bf3-8c8a-ea2a2420deb6', None,
 
2535
                       None)]
 
2536
            self.assertEqual(kwargs['requested_networks'], result)
 
2537
            return old_create(*args, **kwargs)
 
2538
 
 
2539
        self.stubs.Set(compute_api.API, 'create', create)
 
2540
        self._test_create_extra(params)
 
2541
 
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">
3709
3766
    </server>"""
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",
3716
3773
                }}
3717
3774
        self.assertEquals(request['body'], expected)
3718
3775
 
3803
3860
        }
3804
3861
        self.assertEquals(request['body'], expected)
3805
3862
 
 
3863
    def test_corrupt_xml(self):
 
3864
        """Should throw a 400 error on corrupt xml."""
 
3865
        self.assertRaises(
 
3866
                exception.MalformedRequestBody,
 
3867
                self.deserializer.deserialize,
 
3868
                utils.killer_xml_body())
 
3869
 
 
3870
 
 
3871
class TestServerActionRequestXMLDeserializer(test.TestCase):
 
3872
 
 
3873
    def setUp(self):
 
3874
        super(TestServerActionRequestXMLDeserializer, self).setUp()
 
3875
        self.deserializer = servers.ActionDeserializer()
 
3876
 
 
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)
 
3883
        expected = {
 
3884
            "rebuild": {
 
3885
                "imageRef": "1",
 
3886
                "OS-DCF:diskConfig": "MANUAL",
 
3887
                },
 
3888
            }
 
3889
        self.assertEquals(request['body'], expected)
 
3890
 
 
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)
 
3897
        expected = {
 
3898
            "rebuild": {
 
3899
                "imageRef": "1",
 
3900
                "OS-DCF:diskConfig": "MANUAL",
 
3901
                },
 
3902
            }
 
3903
        self.assertEquals(request['body'], expected)
 
3904
 
 
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)
 
3911
        expected = {
 
3912
            "resize": {
 
3913
                "flavorRef": "1",
 
3914
                "OS-DCF:diskConfig": "MANUAL",
 
3915
                },
 
3916
            }
 
3917
        self.assertEquals(request['body'], expected)
 
3918
 
 
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)
 
3925
        expected = {
 
3926
            "resize": {
 
3927
                "flavorRef": "1",
 
3928
                "OS-DCF:diskConfig": "MANUAL",
 
3929
                },
 
3930
            }
 
3931
        self.assertEquals(request['body'], expected)
 
3932
 
3806
3933
 
3807
3934
class TestAddressesXMLSerialization(test.TestCase):
3808
3935
 
3912
4039
        result = self.view_builder._get_flavor(self.request, self.instance)
3913
4040
        self.assertEqual(result, expected)
3914
4041
 
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, {})
3919
 
 
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