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

« back to all changes in this revision

Viewing changes to nova/tests/api/openstack/volume/test_extensions.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short, Adam Gandelman, Chuck Short
  • Date: 2012-11-23 09:04:58 UTC
  • mfrom: (1.1.66)
  • Revision ID: package-import@ubuntu.com-20121123090458-91565o7aev1i1h71
Tags: 2013.1~g1-0ubuntu1
[ Adam Gandelman ]
* debian/control: Ensure novaclient is upgraded with nova,
  require python-keystoneclient >= 1:2.9.0. (LP: #1073289)
* debian/patches/{ubuntu/*, rbd-security.patch}: Dropped, applied
  upstream.
* debian/control: Add python-testtools to Build-Depends.

[ Chuck Short ]
* New upstream version.
* Refreshed debian/patches/avoid_setuptools_git_dependency.patch.
* debian/rules: FTBFS if missing binaries.
* debian/nova-scheudler.install: Add missing rabbit-queues and
  nova-rpc-zmq-receiver.
* Remove nova-volume since it doesnt exist anymore, transition to cinder-*.
* debian/rules: install apport hook in the right place.
* debian/patches/ubuntu-show-tests.patch: Display test failures.
* debian/control: Add depends on genisoimage
* debian/control: Suggest guestmount.
* debian/control: Suggest websockify. (LP: #1076442)
* debian/nova.conf: Disable nova-volume service.
* debian/control: Depend on xen-system-* rather than the hypervisor.
* debian/control, debian/mans/nova-conductor.8, debian/nova-conductor.init,
  debian/nova-conductor.install, debian/nova-conductor.logrotate
  debian/nova-conductor.manpages, debian/nova-conductor.postrm
  debian/nova-conductor.upstart.in: Add nova-conductor service.
* debian/control: Add python-fixtures as a build deps.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
 
 
3
 
# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
4
 
# Copyright 2011 OpenStack LLC.
5
 
# All Rights Reserved.
6
 
#
7
 
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
8
 
#    not use this file except in compliance with the License. You may obtain
9
 
#    a copy of the License at
10
 
#
11
 
#         http://www.apache.org/licenses/LICENSE-2.0
12
 
#
13
 
#    Unless required by applicable law or agreed to in writing, software
14
 
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
 
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16
 
#    License for the specific language governing permissions and limitations
17
 
#    under the License.
18
 
 
19
 
import iso8601
20
 
from lxml import etree
21
 
import webob
22
 
 
23
 
from nova.api.openstack import volume
24
 
from nova.api.openstack import xmlutil
25
 
from nova import flags
26
 
from nova.openstack.common import jsonutils
27
 
from nova import test
28
 
 
29
 
FLAGS = flags.FLAGS
30
 
NS = "{http://docs.openstack.org/common/api/v1.0}"
31
 
 
32
 
 
33
 
class ExtensionTestCase(test.TestCase):
34
 
    def setUp(self):
35
 
        super(ExtensionTestCase, self).setUp()
36
 
        ext_list = FLAGS.osapi_volume_extension[:]
37
 
        fox = ('nova.tests.api.openstack.volume.extensions.'
38
 
               'foxinsocks.Foxinsocks')
39
 
        if fox not in ext_list:
40
 
            ext_list.append(fox)
41
 
            self.flags(osapi_volume_extension=ext_list)
42
 
 
43
 
 
44
 
class ExtensionControllerTest(ExtensionTestCase):
45
 
 
46
 
    def setUp(self):
47
 
        super(ExtensionControllerTest, self).setUp()
48
 
        self.ext_list = [
49
 
            "TypesManage",
50
 
            "TypesExtraSpecs",
51
 
            ]
52
 
        self.ext_list.sort()
53
 
 
54
 
    def test_list_extensions_json(self):
55
 
        app = volume.APIRouter()
56
 
        request = webob.Request.blank("/fake/extensions")
57
 
        response = request.get_response(app)
58
 
        self.assertEqual(200, response.status_int)
59
 
 
60
 
        # Make sure we have all the extensions, extra extensions being OK.
61
 
        data = jsonutils.loads(response.body)
62
 
        names = [str(x['name']) for x in data['extensions']
63
 
                 if str(x['name']) in self.ext_list]
64
 
        names.sort()
65
 
        self.assertEqual(names, self.ext_list)
66
 
 
67
 
        # Ensure all the timestamps are valid according to iso8601
68
 
        for ext in data['extensions']:
69
 
            iso8601.parse_date(ext['updated'])
70
 
 
71
 
        # Make sure that at least Fox in Sox is correct.
72
 
        (fox_ext, ) = [
73
 
            x for x in data['extensions'] if x['alias'] == 'FOXNSOX']
74
 
        self.assertEqual(fox_ext, {
75
 
                'namespace': 'http://www.fox.in.socks/api/ext/pie/v1.0',
76
 
                'name': 'Fox In Socks',
77
 
                'updated': '2011-01-22T13:25:27-06:00',
78
 
                'description': 'The Fox In Socks Extension',
79
 
                'alias': 'FOXNSOX',
80
 
                'links': []
81
 
            },
82
 
        )
83
 
 
84
 
        for ext in data['extensions']:
85
 
            url = '/fake/extensions/%s' % ext['alias']
86
 
            request = webob.Request.blank(url)
87
 
            response = request.get_response(app)
88
 
            output = jsonutils.loads(response.body)
89
 
            self.assertEqual(output['extension']['alias'], ext['alias'])
90
 
 
91
 
    def test_get_extension_json(self):
92
 
        app = volume.APIRouter()
93
 
        request = webob.Request.blank("/fake/extensions/FOXNSOX")
94
 
        response = request.get_response(app)
95
 
        self.assertEqual(200, response.status_int)
96
 
 
97
 
        data = jsonutils.loads(response.body)
98
 
        self.assertEqual(data['extension'], {
99
 
                "namespace": "http://www.fox.in.socks/api/ext/pie/v1.0",
100
 
                "name": "Fox In Socks",
101
 
                "updated": "2011-01-22T13:25:27-06:00",
102
 
                "description": "The Fox In Socks Extension",
103
 
                "alias": "FOXNSOX",
104
 
                "links": []})
105
 
 
106
 
    def test_get_non_existing_extension_json(self):
107
 
        app = volume.APIRouter()
108
 
        request = webob.Request.blank("/fake/extensions/4")
109
 
        response = request.get_response(app)
110
 
        self.assertEqual(404, response.status_int)
111
 
 
112
 
    def test_list_extensions_xml(self):
113
 
        app = volume.APIRouter()
114
 
        request = webob.Request.blank("/fake/extensions")
115
 
        request.accept = "application/xml"
116
 
        response = request.get_response(app)
117
 
        self.assertEqual(200, response.status_int)
118
 
 
119
 
        root = etree.XML(response.body)
120
 
        self.assertEqual(root.tag.split('extensions')[0], NS)
121
 
 
122
 
        # Make sure we have all the extensions, extras extensions being OK.
123
 
        exts = root.findall('{0}extension'.format(NS))
124
 
        self.assert_(len(exts) >= len(self.ext_list))
125
 
 
126
 
        # Make sure that at least Fox in Sox is correct.
127
 
        (fox_ext, ) = [x for x in exts if x.get('alias') == 'FOXNSOX']
128
 
        self.assertEqual(fox_ext.get('name'), 'Fox In Socks')
129
 
        self.assertEqual(fox_ext.get('namespace'),
130
 
            'http://www.fox.in.socks/api/ext/pie/v1.0')
131
 
        self.assertEqual(fox_ext.get('updated'), '2011-01-22T13:25:27-06:00')
132
 
        self.assertEqual(fox_ext.findtext('{0}description'.format(NS)),
133
 
            'The Fox In Socks Extension')
134
 
 
135
 
        xmlutil.validate_schema(root, 'extensions')
136
 
 
137
 
    def test_get_extension_xml(self):
138
 
        app = volume.APIRouter()
139
 
        request = webob.Request.blank("/fake/extensions/FOXNSOX")
140
 
        request.accept = "application/xml"
141
 
        response = request.get_response(app)
142
 
        self.assertEqual(200, response.status_int)
143
 
        xml = response.body
144
 
 
145
 
        root = etree.XML(xml)
146
 
        self.assertEqual(root.tag.split('extension')[0], NS)
147
 
        self.assertEqual(root.get('alias'), 'FOXNSOX')
148
 
        self.assertEqual(root.get('name'), 'Fox In Socks')
149
 
        self.assertEqual(root.get('namespace'),
150
 
            'http://www.fox.in.socks/api/ext/pie/v1.0')
151
 
        self.assertEqual(root.get('updated'), '2011-01-22T13:25:27-06:00')
152
 
        self.assertEqual(root.findtext('{0}description'.format(NS)),
153
 
            'The Fox In Socks Extension')
154
 
 
155
 
        xmlutil.validate_schema(root, 'extension')