1721
1829
name='server_test', imageRef=image_href, flavorRef=flavor_ref,
1722
1830
metadata={'hello': 'world', 'open': 'stack'},
1723
1831
personality={}))
1724
req = webob.Request.blank('/v1.1/servers')
1726
req.body = json.dumps(body)
1727
req.headers["content-type"] = "application/json"
1728
res = req.get_response(fakes.wsgi_app())
1729
self.assertEqual(res.status_int, 400)
1832
req = webob.Request.blank('/v1.1/fake/servers')
1834
req.body = json.dumps(body)
1835
req.headers["content-type"] = "application/json"
1836
res = req.get_response(fakes.wsgi_app())
1837
self.assertEqual(res.status_int, 400)
1839
def test_create_instance_with_config_drive_v1_1(self):
1840
self.config_drive = True
1841
self._setup_for_create_instance()
1843
image_href = 'http://localhost/v1.1/123/images/2'
1844
flavor_ref = 'http://localhost/v1.1/123/flavors/3'
1847
'name': 'config_drive_test',
1848
'imageRef': image_href,
1849
'flavorRef': flavor_ref,
1855
'config_drive': True,
1859
req = webob.Request.blank('/v1.1/123/servers')
1861
req.body = json.dumps(body)
1862
req.headers["content-type"] = "application/json"
1864
res = req.get_response(fakes.wsgi_app())
1866
self.assertEqual(res.status_int, 202)
1867
server = json.loads(res.body)['server']
1868
self.assertEqual(1, server['id'])
1869
self.assertTrue(server['config_drive'])
1871
def test_create_instance_with_config_drive_as_id_v1_1(self):
1872
self.config_drive = 2
1873
self._setup_for_create_instance()
1875
image_href = 'http://localhost/v1.1/123/images/2'
1876
flavor_ref = 'http://localhost/v1.1/123/flavors/3'
1879
'name': 'config_drive_test',
1880
'imageRef': image_href,
1881
'flavorRef': flavor_ref,
1891
req = webob.Request.blank('/v1.1/123/servers')
1893
req.body = json.dumps(body)
1894
req.headers["content-type"] = "application/json"
1896
res = req.get_response(fakes.wsgi_app())
1898
self.assertEqual(res.status_int, 202)
1899
server = json.loads(res.body)['server']
1900
self.assertEqual(1, server['id'])
1901
self.assertTrue(server['config_drive'])
1902
self.assertEqual(2, server['config_drive'])
1904
def test_create_instance_with_bad_config_drive_v1_1(self):
1905
self.config_drive = "asdf"
1906
self._setup_for_create_instance()
1908
image_href = 'http://localhost/v1.1/123/images/2'
1909
flavor_ref = 'http://localhost/v1.1/123/flavors/3'
1912
'name': 'config_drive_test',
1913
'imageRef': image_href,
1914
'flavorRef': flavor_ref,
1920
'config_drive': 'asdf',
1924
req = webob.Request.blank('/v1.1/123/servers')
1926
req.body = json.dumps(body)
1927
req.headers["content-type"] = "application/json"
1929
res = req.get_response(fakes.wsgi_app())
1930
self.assertEqual(res.status_int, 400)
1932
def test_create_instance_without_config_drive_v1_1(self):
1933
self._setup_for_create_instance()
1935
image_href = 'http://localhost/v1.1/123/images/2'
1936
flavor_ref = 'http://localhost/v1.1/123/flavors/3'
1939
'name': 'config_drive_test',
1940
'imageRef': image_href,
1941
'flavorRef': flavor_ref,
1947
'config_drive': True,
1951
req = webob.Request.blank('/v1.1/123/servers')
1953
req.body = json.dumps(body)
1954
req.headers["content-type"] = "application/json"
1956
res = req.get_response(fakes.wsgi_app())
1957
self.assertEqual(res.status_int, 202)
1958
server = json.loads(res.body)['server']
1959
self.assertEqual(1, server['id'])
1960
self.assertFalse(server['config_drive'])
1731
1962
def test_create_instance_v1_1_bad_href(self):
1732
1963
self._setup_for_create_instance()
2686
3044
self.assertEquals(request['body'], expected)
3046
def test_request_with_empty_networks(self):
3047
serial_request = """
3048
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3049
name="new-server-test" imageRef="1" flavorRef="1">
3052
request = self.deserializer.deserialize(serial_request, 'create')
3053
expected = {"server": {
3054
"name": "new-server-test",
3059
self.assertEquals(request['body'], expected)
3061
def test_request_with_one_network(self):
3062
serial_request = """
3063
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3064
name="new-server-test" imageRef="1" flavorRef="1">
3066
<network uuid="1" fixed_ip="10.0.1.12"/>
3069
request = self.deserializer.deserialize(serial_request, 'create')
3070
expected = {"server": {
3071
"name": "new-server-test",
3074
"networks": [{"uuid": "1", "fixed_ip": "10.0.1.12"}],
3076
self.assertEquals(request['body'], expected)
3078
def test_request_with_two_networks(self):
3079
serial_request = """
3080
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3081
name="new-server-test" imageRef="1" flavorRef="1">
3083
<network uuid="1" fixed_ip="10.0.1.12"/>
3084
<network uuid="2" fixed_ip="10.0.2.12"/>
3087
request = self.deserializer.deserialize(serial_request, 'create')
3088
expected = {"server": {
3089
"name": "new-server-test",
3092
"networks": [{"uuid": "1", "fixed_ip": "10.0.1.12"},
3093
{"uuid": "2", "fixed_ip": "10.0.2.12"}],
3095
self.assertEquals(request['body'], expected)
3097
def test_request_with_second_network_node_ignored(self):
3098
serial_request = """
3099
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3100
name="new-server-test" imageRef="1" flavorRef="1">
3102
<network uuid="1" fixed_ip="10.0.1.12"/>
3105
<network uuid="2" fixed_ip="10.0.2.12"/>
3108
request = self.deserializer.deserialize(serial_request, 'create')
3109
expected = {"server": {
3110
"name": "new-server-test",
3113
"networks": [{"uuid": "1", "fixed_ip": "10.0.1.12"}],
3115
self.assertEquals(request['body'], expected)
3117
def test_request_with_one_network_missing_id(self):
3118
serial_request = """
3119
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3120
name="new-server-test" imageRef="1" flavorRef="1">
3122
<network fixed_ip="10.0.1.12"/>
3125
request = self.deserializer.deserialize(serial_request, 'create')
3126
expected = {"server": {
3127
"name": "new-server-test",
3130
"networks": [{"fixed_ip": "10.0.1.12"}],
3132
self.assertEquals(request['body'], expected)
3134
def test_request_with_one_network_missing_fixed_ip(self):
3135
serial_request = """
3136
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3137
name="new-server-test" imageRef="1" flavorRef="1">
3142
request = self.deserializer.deserialize(serial_request, 'create')
3143
expected = {"server": {
3144
"name": "new-server-test",
3147
"networks": [{"uuid": "1"}],
3149
self.assertEquals(request['body'], expected)
3151
def test_request_with_one_network_empty_id(self):
3152
serial_request = """
3153
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3154
name="new-server-test" imageRef="1" flavorRef="1">
3156
<network uuid="" fixed_ip="10.0.1.12"/>
3159
request = self.deserializer.deserialize(serial_request, 'create')
3160
expected = {"server": {
3161
"name": "new-server-test",
3164
"networks": [{"uuid": "", "fixed_ip": "10.0.1.12"}],
3166
self.assertEquals(request['body'], expected)
3168
def test_request_with_one_network_empty_fixed_ip(self):
3169
serial_request = """
3170
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3171
name="new-server-test" imageRef="1" flavorRef="1">
3173
<network uuid="1" fixed_ip=""/>
3176
request = self.deserializer.deserialize(serial_request, 'create')
3177
expected = {"server": {
3178
"name": "new-server-test",
3181
"networks": [{"uuid": "1", "fixed_ip": ""}],
3183
self.assertEquals(request['body'], expected)
3185
def test_request_with_networks_duplicate_ids(self):
3186
serial_request = """
3187
<server xmlns="http://docs.openstack.org/compute/api/v1.1"
3188
name="new-server-test" imageRef="1" flavorRef="1">
3190
<network uuid="1" fixed_ip="10.0.1.12"/>
3191
<network uuid="1" fixed_ip="10.0.2.12"/>
3194
request = self.deserializer.deserialize(serial_request, 'create')
3195
expected = {"server": {
3196
"name": "new-server-test",
3199
"networks": [{"uuid": "1", "fixed_ip": "10.0.1.12"},
3200
{"uuid": "1", "fixed_ip": "10.0.2.12"}],
3202
self.assertEquals(request['body'], expected)
2689
3205
class TestAddressesXMLSerialization(test.TestCase):
3378
4048
expected_flavor_bookmark = self.FLAVOR_BOOKMARK
3379
4049
expected_now = self.TIMESTAMP
3380
4050
expected_uuid = FAKE_UUID
3381
expected = minidom.parseString("""
3383
uuid="%(expected_uuid)s"
3384
xmlns="http://docs.openstack.org/compute/api/v1.1"
3385
xmlns:atom="http://www.w3.org/2005/Atom"
3387
updated="%(expected_now)s"
3388
created="%(expected_now)s"
3389
hostId="e4d909c290d0fb1ca068ffaddf22cbd0"
3392
<atom:link href="%(expected_server_href)s" rel="self"/>
3393
<atom:link href="%(expected_server_bookmark)s" rel="bookmark"/>
3395
<atom:link rel="bookmark" href="%(expected_image_bookmark)s"/>
3398
<atom:link rel="bookmark" href="%(expected_flavor_bookmark)s"/>
3409
<network id="network_one">
3410
<ip version="4" addr="67.23.10.138"/>
3411
<ip version="6" addr="::babe:67.23.10.138"/>
3413
<network id="network_two">
3414
<ip version="4" addr="67.23.10.139"/>
3415
<ip version="6" addr="::babe:67.23.10.139"/>
3419
""".replace(" ", "") % (locals()))
3421
self.assertEqual(expected.toxml(), actual.toxml())
4051
server_dict = fixture['server']
4053
for key in ['name', 'id', 'uuid', 'created', 'accessIPv4',
4054
'updated', 'progress', 'status', 'hostId',
4056
self.assertEqual(root.get(key), str(server_dict[key]))
4058
link_nodes = root.findall('{0}link'.format(ATOMNS))
4059
self.assertEqual(len(link_nodes), 2)
4060
for i, link in enumerate(server_dict['links']):
4061
for key, value in link.items():
4062
self.assertEqual(link_nodes[i].get(key), value)
4064
metadata_root = root.find('{0}metadata'.format(NS))
4065
metadata_elems = metadata_root.findall('{0}meta'.format(NS))
4066
self.assertEqual(len(metadata_elems), 2)
4067
for i, metadata_elem in enumerate(metadata_elems):
4068
(meta_key, meta_value) = server_dict['metadata'].items()[i]
4069
self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
4070
self.assertEqual(str(metadata_elem.text).strip(), str(meta_value))
4072
image_root = root.find('{0}image'.format(NS))
4073
self.assertEqual(image_root.get('id'), server_dict['image']['id'])
4074
link_nodes = image_root.findall('{0}link'.format(ATOMNS))
4075
self.assertEqual(len(link_nodes), 1)
4076
for i, link in enumerate(server_dict['image']['links']):
4077
for key, value in link.items():
4078
self.assertEqual(link_nodes[i].get(key), value)
4080
flavor_root = root.find('{0}flavor'.format(NS))
4081
self.assertEqual(flavor_root.get('id'), server_dict['flavor']['id'])
4082
link_nodes = flavor_root.findall('{0}link'.format(ATOMNS))
4083
self.assertEqual(len(link_nodes), 1)
4084
for i, link in enumerate(server_dict['flavor']['links']):
4085
for key, value in link.items():
4086
self.assertEqual(link_nodes[i].get(key), value)
4088
addresses_root = root.find('{0}addresses'.format(NS))
4089
addresses_dict = server_dict['addresses']
4090
network_elems = addresses_root.findall('{0}network'.format(NS))
4091
self.assertEqual(len(network_elems), 2)
4092
for i, network_elem in enumerate(network_elems):
4093
network = addresses_dict.items()[i]
4094
self.assertEqual(str(network_elem.get('id')), str(network[0]))
4095
ip_elems = network_elem.findall('{0}ip'.format(NS))
4096
for z, ip_elem in enumerate(ip_elems):
4098
self.assertEqual(str(ip_elem.get('version')),
4100
self.assertEqual(str(ip_elem.get('addr')),
3423
4103
def test_create(self):
3424
4104
serializer = servers.ServerXMLSerializer()
3500
4184
expected_flavor_bookmark = self.FLAVOR_BOOKMARK
3501
4185
expected_now = self.TIMESTAMP
3502
4186
expected_uuid = FAKE_UUID
3503
expected = minidom.parseString("""
3505
uuid="%(expected_uuid)s"
3506
xmlns="http://docs.openstack.org/compute/api/v1.1"
3507
xmlns:atom="http://www.w3.org/2005/Atom"
3509
updated="%(expected_now)s"
3510
created="%(expected_now)s"
3511
hostId="e4d909c290d0fb1ca068ffaddf22cbd0"
3513
adminPass="test_password"
3515
<atom:link href="%(expected_server_href)s" rel="self"/>
3516
<atom:link href="%(expected_server_bookmark)s" rel="bookmark"/>
3518
<atom:link rel="bookmark" href="%(expected_image_bookmark)s"/>
3521
<atom:link rel="bookmark" href="%(expected_flavor_bookmark)s"/>
3532
<network id="network_one">
3533
<ip version="4" addr="67.23.10.138"/>
3534
<ip version="6" addr="::babe:67.23.10.138"/>
3536
<network id="network_two">
3537
<ip version="4" addr="67.23.10.139"/>
3538
<ip version="6" addr="::babe:67.23.10.139"/>
3542
""".replace(" ", "") % (locals()))
3544
self.assertEqual(expected.toxml(), actual.toxml())
4187
server_dict = fixture['server']
4189
for key in ['name', 'id', 'uuid', 'created', 'accessIPv4',
4190
'updated', 'progress', 'status', 'hostId',
4191
'accessIPv6', 'adminPass']:
4192
self.assertEqual(root.get(key), str(server_dict[key]))
4194
link_nodes = root.findall('{0}link'.format(ATOMNS))
4195
self.assertEqual(len(link_nodes), 2)
4196
for i, link in enumerate(server_dict['links']):
4197
for key, value in link.items():
4198
self.assertEqual(link_nodes[i].get(key), value)
4200
metadata_root = root.find('{0}metadata'.format(NS))
4201
metadata_elems = metadata_root.findall('{0}meta'.format(NS))
4202
self.assertEqual(len(metadata_elems), 2)
4203
for i, metadata_elem in enumerate(metadata_elems):
4204
(meta_key, meta_value) = server_dict['metadata'].items()[i]
4205
self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
4206
self.assertEqual(str(metadata_elem.text).strip(), str(meta_value))
4208
image_root = root.find('{0}image'.format(NS))
4209
self.assertEqual(image_root.get('id'), server_dict['image']['id'])
4210
link_nodes = image_root.findall('{0}link'.format(ATOMNS))
4211
self.assertEqual(len(link_nodes), 1)
4212
for i, link in enumerate(server_dict['image']['links']):
4213
for key, value in link.items():
4214
self.assertEqual(link_nodes[i].get(key), value)
4216
flavor_root = root.find('{0}flavor'.format(NS))
4217
self.assertEqual(flavor_root.get('id'), server_dict['flavor']['id'])
4218
link_nodes = flavor_root.findall('{0}link'.format(ATOMNS))
4219
self.assertEqual(len(link_nodes), 1)
4220
for i, link in enumerate(server_dict['flavor']['links']):
4221
for key, value in link.items():
4222
self.assertEqual(link_nodes[i].get(key), value)
4224
addresses_root = root.find('{0}addresses'.format(NS))
4225
addresses_dict = server_dict['addresses']
4226
network_elems = addresses_root.findall('{0}network'.format(NS))
4227
self.assertEqual(len(network_elems), 2)
4228
for i, network_elem in enumerate(network_elems):
4229
network = addresses_dict.items()[i]
4230
self.assertEqual(str(network_elem.get('id')), str(network[0]))
4231
ip_elems = network_elem.findall('{0}ip'.format(NS))
4232
for z, ip_elem in enumerate(ip_elems):
4234
self.assertEqual(str(ip_elem.get('version')),
4236
self.assertEqual(str(ip_elem.get('addr')),
3546
4239
def test_index(self):
3547
4240
serializer = servers.ServerXMLSerializer()
3724
4419
output = serializer.serialize(fixture, 'detail')
3725
actual = minidom.parseString(output.replace(" ", ""))
3727
expected = minidom.parseString("""
3728
<servers xmlns="http://docs.openstack.org/compute/api/v1.1"
3729
xmlns:atom="http://www.w3.org/2005/Atom">
3731
uuid="%(expected_uuid)s"
3733
updated="%(expected_now)s"
3734
created="%(expected_now)s"
3735
hostId="e4d909c290d0fb1ca068ffaddf22cbd0"
3738
<atom:link href="%(expected_server_href)s" rel="self"/>
3739
<atom:link href="%(expected_server_bookmark)s" rel="bookmark"/>
3741
<atom:link rel="bookmark" href="%(expected_image_bookmark)s"/>
3744
<atom:link rel="bookmark" href="%(expected_flavor_bookmark)s"/>
3752
<network id="network_one">
3753
<ip version="4" addr="67.23.10.138"/>
3754
<ip version="6" addr="::babe:67.23.10.138"/>
3759
uuid="%(expected_uuid)s"
3760
name="test_server_2"
3761
updated="%(expected_now)s"
3762
created="%(expected_now)s"
3763
hostId="e4d909c290d0fb1ca068ffaddf22cbd0"
3766
<atom:link href="%(expected_server_href_2)s" rel="self"/>
3767
<atom:link href="%(expected_server_bookmark_2)s" rel="bookmark"/>
3769
<atom:link rel="bookmark" href="%(expected_image_bookmark)s"/>
3772
<atom:link rel="bookmark" href="%(expected_flavor_bookmark)s"/>
3780
<network id="network_one">
3781
<ip version="4" addr="67.23.10.138"/>
3782
<ip version="6" addr="::babe:67.23.10.138"/>
3787
""".replace(" ", "") % (locals()))
3789
self.assertEqual(expected.toxml(), actual.toxml())
4421
root = etree.XML(output)
4422
xmlutil.validate_schema(root, 'servers')
4423
server_elems = root.findall('{0}server'.format(NS))
4424
self.assertEqual(len(server_elems), 2)
4425
for i, server_elem in enumerate(server_elems):
4426
server_dict = fixture['servers'][i]
4428
for key in ['name', 'id', 'uuid', 'created', 'accessIPv4',
4429
'updated', 'progress', 'status', 'hostId',
4431
self.assertEqual(server_elem.get(key), str(server_dict[key]))
4433
link_nodes = server_elem.findall('{0}link'.format(ATOMNS))
4434
self.assertEqual(len(link_nodes), 2)
4435
for i, link in enumerate(server_dict['links']):
4436
for key, value in link.items():
4437
self.assertEqual(link_nodes[i].get(key), value)
4439
metadata_root = server_elem.find('{0}metadata'.format(NS))
4440
metadata_elems = metadata_root.findall('{0}meta'.format(NS))
4441
for i, metadata_elem in enumerate(metadata_elems):
4442
(meta_key, meta_value) = server_dict['metadata'].items()[i]
4443
self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
4444
self.assertEqual(str(metadata_elem.text).strip(),
4447
image_root = server_elem.find('{0}image'.format(NS))
4448
self.assertEqual(image_root.get('id'), server_dict['image']['id'])
4449
link_nodes = image_root.findall('{0}link'.format(ATOMNS))
4450
self.assertEqual(len(link_nodes), 1)
4451
for i, link in enumerate(server_dict['image']['links']):
4452
for key, value in link.items():
4453
self.assertEqual(link_nodes[i].get(key), value)
4455
flavor_root = server_elem.find('{0}flavor'.format(NS))
4456
self.assertEqual(flavor_root.get('id'),
4457
server_dict['flavor']['id'])
4458
link_nodes = flavor_root.findall('{0}link'.format(ATOMNS))
4459
self.assertEqual(len(link_nodes), 1)
4460
for i, link in enumerate(server_dict['flavor']['links']):
4461
for key, value in link.items():
4462
self.assertEqual(link_nodes[i].get(key), value)
4464
addresses_root = server_elem.find('{0}addresses'.format(NS))
4465
addresses_dict = server_dict['addresses']
4466
network_elems = addresses_root.findall('{0}network'.format(NS))
4467
for i, network_elem in enumerate(network_elems):
4468
network = addresses_dict.items()[i]
4469
self.assertEqual(str(network_elem.get('id')), str(network[0]))
4470
ip_elems = network_elem.findall('{0}ip'.format(NS))
4471
for z, ip_elem in enumerate(ip_elems):
4473
self.assertEqual(str(ip_elem.get('version')),
4475
self.assertEqual(str(ip_elem.get('addr')),
4478
def test_update(self):
4479
serializer = servers.ServerXMLSerializer()
4485
'created': self.TIMESTAMP,
4486
'updated': self.TIMESTAMP,
4488
"name": "test_server",
4490
"hostId": 'e4d909c290d0fb1ca068ffaddf22cbd0',
4491
"accessIPv4": "1.2.3.4",
4492
"accessIPv6": "fead::1234",
4498
"href": self.IMAGE_BOOKMARK,
4507
"href": self.FLAVOR_BOOKMARK,
4515
"addr": "67.23.10.138",
4519
"addr": "::babe:67.23.10.138",
4525
"addr": "67.23.10.139",
4529
"addr": "::babe:67.23.10.139",
4539
'href': self.SERVER_HREF,
4543
'href': self.SERVER_BOOKMARK,
4550
output = serializer.serialize(fixture, 'update')
4552
root = etree.XML(output)
4553
xmlutil.validate_schema(root, 'server')
4555
expected_server_href = self.SERVER_HREF
4556
expected_server_bookmark = self.SERVER_BOOKMARK
4557
expected_image_bookmark = self.IMAGE_BOOKMARK
4558
expected_flavor_bookmark = self.FLAVOR_BOOKMARK
4559
expected_now = self.TIMESTAMP
4560
expected_uuid = FAKE_UUID
4561
server_dict = fixture['server']
4563
for key in ['name', 'id', 'uuid', 'created', 'accessIPv4',
4564
'updated', 'progress', 'status', 'hostId',
4566
self.assertEqual(root.get(key), str(server_dict[key]))
4568
link_nodes = root.findall('{0}link'.format(ATOMNS))
4569
self.assertEqual(len(link_nodes), 2)
4570
for i, link in enumerate(server_dict['links']):
4571
for key, value in link.items():
4572
self.assertEqual(link_nodes[i].get(key), value)
4574
metadata_root = root.find('{0}metadata'.format(NS))
4575
metadata_elems = metadata_root.findall('{0}meta'.format(NS))
4576
self.assertEqual(len(metadata_elems), 2)
4577
for i, metadata_elem in enumerate(metadata_elems):
4578
(meta_key, meta_value) = server_dict['metadata'].items()[i]
4579
self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
4580
self.assertEqual(str(metadata_elem.text).strip(), str(meta_value))
4582
image_root = root.find('{0}image'.format(NS))
4583
self.assertEqual(image_root.get('id'), server_dict['image']['id'])
4584
link_nodes = image_root.findall('{0}link'.format(ATOMNS))
4585
self.assertEqual(len(link_nodes), 1)
4586
for i, link in enumerate(server_dict['image']['links']):
4587
for key, value in link.items():
4588
self.assertEqual(link_nodes[i].get(key), value)
4590
flavor_root = root.find('{0}flavor'.format(NS))
4591
self.assertEqual(flavor_root.get('id'), server_dict['flavor']['id'])
4592
link_nodes = flavor_root.findall('{0}link'.format(ATOMNS))
4593
self.assertEqual(len(link_nodes), 1)
4594
for i, link in enumerate(server_dict['flavor']['links']):
4595
for key, value in link.items():
4596
self.assertEqual(link_nodes[i].get(key), value)
4598
addresses_root = root.find('{0}addresses'.format(NS))
4599
addresses_dict = server_dict['addresses']
4600
network_elems = addresses_root.findall('{0}network'.format(NS))
4601
self.assertEqual(len(network_elems), 2)
4602
for i, network_elem in enumerate(network_elems):
4603
network = addresses_dict.items()[i]
4604
self.assertEqual(str(network_elem.get('id')), str(network[0]))
4605
ip_elems = network_elem.findall('{0}ip'.format(NS))
4606
for z, ip_elem in enumerate(ip_elems):
4608
self.assertEqual(str(ip_elem.get('version')),
4610
self.assertEqual(str(ip_elem.get('addr')),
4613
def test_action(self):
4614
serializer = servers.ServerXMLSerializer()
4620
'created': self.TIMESTAMP,
4621
'updated': self.TIMESTAMP,
4623
"name": "test_server",
4625
"accessIPv4": "1.2.3.4",
4626
"accessIPv6": "fead::1234",
4627
"hostId": "e4d909c290d0fb1ca068ffaddf22cbd0",
4628
"adminPass": "test_password",
4634
"href": self.IMAGE_BOOKMARK,
4643
"href": self.FLAVOR_BOOKMARK,
4651
"addr": "67.23.10.138",
4655
"addr": "::babe:67.23.10.138",
4661
"addr": "67.23.10.139",
4665
"addr": "::babe:67.23.10.139",
4675
'href': self.SERVER_HREF,
4679
'href': self.SERVER_BOOKMARK,
4686
output = serializer.serialize(fixture, 'action')
4687
root = etree.XML(output)
4688
xmlutil.validate_schema(root, 'server')
4690
expected_server_href = self.SERVER_HREF
4691
expected_server_bookmark = self.SERVER_BOOKMARK
4692
expected_image_bookmark = self.IMAGE_BOOKMARK
4693
expected_flavor_bookmark = self.FLAVOR_BOOKMARK
4694
expected_now = self.TIMESTAMP
4695
expected_uuid = FAKE_UUID
4696
server_dict = fixture['server']
4698
for key in ['name', 'id', 'uuid', 'created', 'accessIPv4',
4699
'updated', 'progress', 'status', 'hostId',
4700
'accessIPv6', 'adminPass']:
4701
self.assertEqual(root.get(key), str(server_dict[key]))
4703
link_nodes = root.findall('{0}link'.format(ATOMNS))
4704
self.assertEqual(len(link_nodes), 2)
4705
for i, link in enumerate(server_dict['links']):
4706
for key, value in link.items():
4707
self.assertEqual(link_nodes[i].get(key), value)
4709
metadata_root = root.find('{0}metadata'.format(NS))
4710
metadata_elems = metadata_root.findall('{0}meta'.format(NS))
4711
self.assertEqual(len(metadata_elems), 2)
4712
for i, metadata_elem in enumerate(metadata_elems):
4713
(meta_key, meta_value) = server_dict['metadata'].items()[i]
4714
self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
4715
self.assertEqual(str(metadata_elem.text).strip(), str(meta_value))
4717
image_root = root.find('{0}image'.format(NS))
4718
self.assertEqual(image_root.get('id'), server_dict['image']['id'])
4719
link_nodes = image_root.findall('{0}link'.format(ATOMNS))
4720
self.assertEqual(len(link_nodes), 1)
4721
for i, link in enumerate(server_dict['image']['links']):
4722
for key, value in link.items():
4723
self.assertEqual(link_nodes[i].get(key), value)
4725
flavor_root = root.find('{0}flavor'.format(NS))
4726
self.assertEqual(flavor_root.get('id'), server_dict['flavor']['id'])
4727
link_nodes = flavor_root.findall('{0}link'.format(ATOMNS))
4728
self.assertEqual(len(link_nodes), 1)
4729
for i, link in enumerate(server_dict['flavor']['links']):
4730
for key, value in link.items():
4731
self.assertEqual(link_nodes[i].get(key), value)
4733
addresses_root = root.find('{0}addresses'.format(NS))
4734
addresses_dict = server_dict['addresses']
4735
network_elems = addresses_root.findall('{0}network'.format(NS))
4736
self.assertEqual(len(network_elems), 2)
4737
for i, network_elem in enumerate(network_elems):
4738
network = addresses_dict.items()[i]
4739
self.assertEqual(str(network_elem.get('id')), str(network[0]))
4740
ip_elems = network_elem.findall('{0}ip'.format(NS))
4741
for z, ip_elem in enumerate(ip_elems):
4743
self.assertEqual(str(ip_elem.get('version')),
4745
self.assertEqual(str(ip_elem.get('addr')),