81
83
class ExtensionControllerTest(unittest.TestCase):
84
app = openstack.APIRouterV11()
85
ext_midware = extensions.ExtensionMiddleware(app)
86
request = webob.Request.blank("/extensions")
87
response = request.get_response(ext_midware)
88
self.assertEqual(200, response.status_int)
90
def test_get_by_alias(self):
91
app = openstack.APIRouterV11()
92
ext_midware = extensions.ExtensionMiddleware(app)
93
request = webob.Request.blank("/extensions/FOXNSOX")
94
response = request.get_response(ext_midware)
95
self.assertEqual(200, response.status_int)
86
FLAGS.osapi_extensions_path = os.path.join(
87
os.path.dirname(__file__), "extensions")
89
def test_list_extensions_json(self):
90
app = openstack.APIRouterV11()
91
ext_midware = extensions.ExtensionMiddleware(app)
92
request = webob.Request.blank("/extensions")
93
response = request.get_response(ext_midware)
94
self.assertEqual(200, response.status_int)
96
# Make sure we have all the extensions.
97
data = json.loads(response.body)
98
names = [x['name'] for x in data['extensions']]
100
self.assertEqual(names, ["FlavorExtraSpecs", "Floating_ips",
101
"Fox In Socks", "Hosts", "Multinic", "Volumes"])
103
# Make sure that at least Fox in Sox is correct.
105
x for x in data['extensions'] if x['alias'] == 'FOXNSOX']
106
self.assertEqual(fox_ext, {
107
'namespace': 'http://www.fox.in.socks/api/ext/pie/v1.0',
108
'name': 'Fox In Socks',
109
'updated': '2011-01-22T13:25:27-06:00',
110
'description': 'The Fox In Socks Extension',
116
def test_get_extension_json(self):
117
app = openstack.APIRouterV11()
118
ext_midware = extensions.ExtensionMiddleware(app)
119
request = webob.Request.blank("/extensions/FOXNSOX")
120
response = request.get_response(ext_midware)
121
self.assertEqual(200, response.status_int)
123
data = json.loads(response.body)
124
self.assertEqual(data['extension'], {
125
"namespace": "http://www.fox.in.socks/api/ext/pie/v1.0",
126
"name": "Fox In Socks",
127
"updated": "2011-01-22T13:25:27-06:00",
128
"description": "The Fox In Socks Extension",
134
def test_list_extensions_xml(self):
135
app = openstack.APIRouterV11()
136
ext_midware = extensions.ExtensionMiddleware(app)
137
request = webob.Request.blank("/extensions")
138
request.accept = "application/xml"
139
response = request.get_response(ext_midware)
140
self.assertEqual(200, response.status_int)
143
root = ElementTree.XML(response.body)
144
self.assertEqual(root.tag.split('extensions')[0], NS)
146
# Make sure we have all the extensions.
147
exts = root.findall('{0}extension'.format(NS))
148
self.assertEqual(len(exts), 6)
150
# Make sure that at least Fox in Sox is correct.
151
(fox_ext,) = [x for x in exts if x.get('alias') == 'FOXNSOX']
152
self.assertEqual(fox_ext.get('name'), 'Fox In Socks')
153
self.assertEqual(fox_ext.get('namespace'),
154
'http://www.fox.in.socks/api/ext/pie/v1.0')
155
self.assertEqual(fox_ext.get('updated'), '2011-01-22T13:25:27-06:00')
156
self.assertEqual(fox_ext.findtext('{0}description'.format(NS)),
157
'The Fox In Socks Extension')
159
def test_get_extension_xml(self):
160
app = openstack.APIRouterV11()
161
ext_midware = extensions.ExtensionMiddleware(app)
162
request = webob.Request.blank("/extensions/FOXNSOX")
163
request.accept = "application/xml"
164
response = request.get_response(ext_midware)
165
self.assertEqual(200, response.status_int)
168
root = ElementTree.XML(response.body)
169
self.assertEqual(root.tag.split('extension')[0], NS)
170
self.assertEqual(root.get('alias'), 'FOXNSOX')
171
self.assertEqual(root.get('name'), 'Fox In Socks')
172
self.assertEqual(root.get('namespace'),
173
'http://www.fox.in.socks/api/ext/pie/v1.0')
174
self.assertEqual(root.get('updated'), '2011-01-22T13:25:27-06:00')
175
self.assertEqual(root.findtext('{0}description'.format(NS)),
176
'The Fox In Socks Extension')
98
179
class ResourceExtensionTest(unittest.TestCase):
244
325
response_data = json.loads(response.body)
245
326
self.assertEqual('newblue', response_data['flavor']['googoose'])
246
327
self.assertEqual("Pig Bands!", response_data['big_bands'])
330
class ExtensionsXMLSerializerTest(unittest.TestCase):
332
def test_serialize_extenstion(self):
333
serializer = extensions.ExtensionsXMLSerializer()
337
'namespace': 'http://docs.rack.com/servers/api/ext/pie/v1.0',
339
'updated': '2011-01-22T13:25:27-06:00',
340
'description': 'Adds the capability to share an image.',
343
'rel': 'describedby',
344
'type': 'application/pdf',
345
'href': 'http://docs.rack.com/servers/api/ext/cs.pdf'
348
'rel': 'describedby',
349
'type': 'application/vnd.sun.wadl+xml',
350
'href': 'http://docs.rack.com/servers/api/ext/cs.wadl'
356
xml = serializer.serialize(data, 'show')
357
root = ElementTree.XML(xml)
358
ext_dict = data['extension']
359
self.assertEqual(root.findtext('{0}description'.format(NS)),
360
ext_dict['description'])
362
for key in ['name', 'namespace', 'alias', 'updated']:
363
self.assertEqual(root.get(key), ext_dict[key])
365
link_nodes = root.findall('{0}link'.format(ATOMNS))
366
self.assertEqual(len(link_nodes), 2)
367
for i, link in enumerate(ext_dict['links']):
368
for key, value in link.items():
369
self.assertEqual(link_nodes[i].get(key), value)
371
def test_serialize_extensions(self):
372
serializer = extensions.ExtensionsXMLSerializer()
376
"name": "Public Image Extension",
377
"namespace": "http://foo.com/api/ext/pie/v1.0",
379
"updated": "2011-01-22T13:25:27-06:00",
380
"description": "Adds the capability to share an image.",
383
"rel": "describedby",
384
"type": "application/pdf",
385
"href": "http://foo.com/api/ext/cs-pie.pdf"
388
"rel": "describedby",
389
"type": "application/vnd.sun.wadl+xml",
390
"href": "http://foo.com/api/ext/cs-pie.wadl"
395
"name": "Cloud Block Storage",
396
"namespace": "http://foo.com/api/ext/cbs/v1.0",
398
"updated": "2011-01-12T11:22:33-06:00",
399
"description": "Allows mounting cloud block storage.",
402
"rel": "describedby",
403
"type": "application/pdf",
404
"href": "http://foo.com/api/ext/cs-cbs.pdf"
407
"rel": "describedby",
408
"type": "application/vnd.sun.wadl+xml",
409
"href": "http://foo.com/api/ext/cs-cbs.wadl"
416
xml = serializer.serialize(data, 'index')
418
root = ElementTree.XML(xml)
419
ext_elems = root.findall('{0}extension'.format(NS))
420
self.assertEqual(len(ext_elems), 2)
421
for i, ext_elem in enumerate(ext_elems):
422
ext_dict = data['extensions'][i]
423
self.assertEqual(ext_elem.findtext('{0}description'.format(NS)),
424
ext_dict['description'])
426
for key in ['name', 'namespace', 'alias', 'updated']:
427
self.assertEqual(ext_elem.get(key), ext_dict[key])
429
link_nodes = ext_elem.findall('{0}link'.format(ATOMNS))
430
self.assertEqual(len(link_nodes), 2)
431
for i, link in enumerate(ext_dict['links']):
432
for key, value in link.items():
433
self.assertEqual(link_nodes[i].get(key), value)