Revision e368ad39 snf-cyclades-app/synnefo/api/tests/servers.py
b/snf-cyclades-app/synnefo/api/tests/servers.py | ||
---|---|---|
123 | 123 |
user = self.vm2.userid |
124 | 124 |
net = mfactory.NetworkFactory() |
125 | 125 |
nic = mfactory.NetworkInterfaceFactory(machine=self.vm2, network=net, |
126 |
ipv6="::babe") |
|
126 |
ipv6="::babe")
|
|
127 | 127 |
|
128 | 128 |
db_vm_meta = mfactory.VirtualMachineMetadataFactory(vm=db_vm) |
129 | 129 |
|
... | ... | |
142 | 142 |
self.assertEqual(api_nic['firewallProfile'], nic.firewall_profile) |
143 | 143 |
self.assertEqual(api_nic['ipv4'], nic.ipv4) |
144 | 144 |
self.assertEqual(api_nic['ipv6'], nic.ipv6) |
145 |
self.assertEqual(api_nic['OS-EXT-IPS:type'],"fixed") |
|
145 |
self.assertEqual(api_nic['OS-EXT-IPS:type'], "fixed")
|
|
146 | 146 |
self.assertEqual(api_nic['id'], 'nic-%s-%s' % (db_vm.id, nic.index)) |
147 | 147 |
api_address = server["addresses"] |
148 |
self.assertEqual(api_address[str(net.id)], |
|
149 |
[{"version": 4, "addr": nic.ipv4, "OS-EXT-IPS:type": "fixed"}, |
|
150 |
{"version": 6, "addr": nic.ipv6, "OS-EXT-IPS:type": "fixed"}]) |
|
148 |
self.assertEqual(api_address[str(net.id)], [ |
|
149 |
{"version": 4, "addr": nic.ipv4, "OS-EXT-IPS:type": "fixed"}, |
|
150 |
{"version": 6, "addr": nic.ipv6, "OS-EXT-IPS:type": "fixed"} |
|
151 |
]) |
|
151 | 152 |
|
152 | 153 |
metadata = server['metadata'] |
153 | 154 |
self.assertEqual(len(metadata), 1) |
... | ... | |
161 | 162 |
response = self.myget("servers/%d" % vm.id, vm.userid) |
162 | 163 |
server = json.loads(response.content)['server'] |
163 | 164 |
self.assertEqual(server["SNF:fqdn"], "vm.example.org") |
164 |
with override_settings(settings, |
|
165 |
CYCLADES_SERVERS_FQDN="snf-%(id)s.vm.example.org"):
|
|
165 |
with override_settings(settings, CYCLADES_SERVERS_FQDN=
|
|
166 |
"snf-%(id)s.vm.example.org"): |
|
166 | 167 |
response = self.myget("servers/%d" % vm.id, vm.userid) |
167 | 168 |
server = json.loads(response.content)['server'] |
168 |
self.assertEqual(server["SNF:fqdn"], "snf-%d.vm.example.org" % vm.id) |
|
169 |
self.assertEqual(server["SNF:fqdn"], |
|
170 |
"snf-%d.vm.example.org" % vm.id) |
|
169 | 171 |
with override_settings(settings, |
170 |
CYCLADES_SERVERS_FQDN="snf-%(id)s.vm-%(id)s.example.org"): |
|
172 |
CYCLADES_SERVERS_FQDN= |
|
173 |
"snf-%(id)s.vm-%(id)s.example.org"): |
|
171 | 174 |
response = self.myget("servers/%d" % vm.id, vm.userid) |
172 | 175 |
server = json.loads(response.content)['server'] |
173 | 176 |
self.assertEqual(server["SNF:fqdn"], "snf-%d.vm-%d.example.org" % |
... | ... | |
190 | 193 |
self.assertEqual(server["SNF:fqdn"], nic.ipv6) |
191 | 194 |
|
192 | 195 |
# IPv4 NIC |
193 |
nic = mfactory.NetworkInterfaceFactory(machine=vm, network__public=True, |
|
194 |
state="ACTIVE") |
|
196 |
nic = mfactory.NetworkInterfaceFactory(machine=vm, |
|
197 |
network__public=True, |
|
198 |
state="ACTIVE") |
|
195 | 199 |
with override_settings(settings, |
196 | 200 |
CYCLADES_SERVERS_FQDN=None): |
197 | 201 |
response = self.myget("servers/%d" % vm.id, vm.userid) |
198 | 202 |
server = json.loads(response.content)['server'] |
199 | 203 |
self.assertEqual(server["SNF:fqdn"], nic.ipv4) |
200 | 204 |
|
201 |
|
|
202 | 205 |
def test_server_building_nics(self): |
203 | 206 |
db_vm = self.vm2 |
204 | 207 |
user = self.vm2.userid |
... | ... | |
249 | 252 |
response = self.myget('nonexistent') |
250 | 253 |
self.assertEqual(response.status_code, 400) |
251 | 254 |
try: |
252 |
error = json.loads(response.content)
|
|
255 |
json.loads(response.content) |
|
253 | 256 |
except ValueError: |
254 | 257 |
self.assertTrue(False) |
255 | 258 |
|
... | ... | |
301 | 304 |
backend=self.backend, |
302 | 305 |
operstate="ACTIVE") |
303 | 306 |
self.request = { |
304 |
"server": {
|
|
305 |
"name": "new-server-test",
|
|
306 |
"userid": "test_user",
|
|
307 |
"imageRef": 1,
|
|
308 |
"flavorRef": self.flavor.id,
|
|
309 |
"metadata": {
|
|
310 |
"My Server Name": "Apache1"
|
|
311 |
},
|
|
312 |
"personality": []
|
|
313 |
}
|
|
307 |
"server": { |
|
308 |
"name": "new-server-test", |
|
309 |
"userid": "test_user", |
|
310 |
"imageRef": 1, |
|
311 |
"flavorRef": self.flavor.id, |
|
312 |
"metadata": { |
|
313 |
"My Server Name": "Apache1" |
|
314 |
}, |
|
315 |
"personality": [] |
|
316 |
} |
|
314 | 317 |
} |
315 | 318 |
|
316 | 319 |
def test_create_server(self, mrapi): |
... | ... | |
329 | 332 |
self.assertEqual(api_server['status'], "BUILD") |
330 | 333 |
self.assertEqual(api_server['progress'], 0) |
331 | 334 |
self.assertEqual(api_server['metadata'], |
332 |
{"My Server Name": "Apache1"}) |
|
335 |
{"My Server Name": "Apache1"})
|
|
333 | 336 |
self.assertTrue('adminPass' in api_server) |
334 | 337 |
|
335 | 338 |
db_vm = VirtualMachine.objects.get(userid='test_user') |
... | ... | |
360 | 363 |
request = deepcopy(self.request) |
361 | 364 |
request["server"]["networks"] = [bnet3.network.id, bnet4.network.id] |
362 | 365 |
with override_settings(settings, |
363 |
DEFAULT_INSTANCE_NETWORKS=["SNF:ANY_PUBLIC", bnet1.network.id, |
|
364 |
bnet2.network.id]): |
|
366 |
DEFAULT_INSTANCE_NETWORKS=[ |
|
367 |
"SNF:ANY_PUBLIC", |
|
368 |
bnet1.network.id, |
|
369 |
bnet2.network.id]): |
|
365 | 370 |
with mocked_quotaholder(): |
366 | 371 |
response = self.mypost('servers', 'test_user', |
367 | 372 |
json.dumps(request), 'json') |
... | ... | |
381 | 386 |
|
382 | 387 |
request["server"]["floating_ips"] = [] |
383 | 388 |
with override_settings(settings, |
384 |
DEFAULT_INSTANCE_NETWORKS=[bnet2.network.id]): |
|
389 |
DEFAULT_INSTANCE_NETWORKS=[bnet2.network.id]):
|
|
385 | 390 |
with mocked_quotaholder(): |
386 | 391 |
response = self.mypost('servers', 'test_user', |
387 | 392 |
json.dumps(request), 'json') |
... | ... | |
407 | 412 |
with override_settings(settings, |
408 | 413 |
DEFAULT_INSTANCE_NETWORKS=["SNF:ANY_PUBLIC"]): |
409 | 414 |
response = self.mypost('servers', 'test_user', |
410 |
json.dumps(request), 'json')
|
|
415 |
json.dumps(request), 'json') |
|
411 | 416 |
self.assertFault(response, 403, "forbidden") |
412 | 417 |
# test wrong user |
413 | 418 |
request = deepcopy(self.request) |
... | ... | |
434 | 439 |
machine=None) |
435 | 440 |
request["server"]["floating_ips"] = [fp1.ipv4, fp2.ipv4] |
436 | 441 |
with override_settings(settings, |
437 |
DEFAULT_INSTANCE_NETWORKS=[bnet3.network.id]): |
|
442 |
DEFAULT_INSTANCE_NETWORKS=[bnet3.network.id]):
|
|
438 | 443 |
with mocked_quotaholder(): |
439 | 444 |
response = self.mypost('servers', 'test_user', |
440 |
json.dumps(request), 'json') |
|
445 |
json.dumps(request), 'json')
|
|
441 | 446 |
self.assertEqual(response.status_code, 202) |
442 | 447 |
api_server = json.loads(response.content)['server'] |
443 | 448 |
vm = VirtualMachine.objects.get(id=api_server["id"]) |
... | ... | |
498 | 503 |
for db_m in metadata: |
499 | 504 |
self.assertEqual(api_metadata[db_m.meta_key], db_m.meta_value) |
500 | 505 |
|
501 |
request = {'metadata': |
|
502 |
{'foo': 'bar'}, |
|
503 |
metadata[0].meta_key: 'bar2' |
|
504 |
} |
|
506 |
request = { |
|
507 |
'metadata': { |
|
508 |
'foo': 'bar' |
|
509 |
}, |
|
510 |
metadata[0].meta_key: 'bar2' |
|
511 |
} |
|
505 | 512 |
response = self.mypost('servers/%d/metadata' % vm.id, |
506 |
vm.userid, json.dumps(request), 'json') |
|
513 |
vm.userid, json.dumps(request), 'json')
|
|
507 | 514 |
metadata2 = VirtualMachineMetadata.objects.filter(vm=vm) |
508 | 515 |
response = self.myget('servers/%d/metadata' % vm.id, vm.userid) |
509 | 516 |
self.assertTrue(response.status_code in [200, 203]) |
... | ... | |
626 | 633 |
vm = self.get_vm(flavor=flavor, operstate="BUILD") |
627 | 634 |
request = {'resize': {'flavorRef': flavor.id}} |
628 | 635 |
response = self.mypost('servers/%d/action' % vm.id, |
629 |
vm.userid, json.dumps(request), 'json') |
|
636 |
vm.userid, json.dumps(request), 'json')
|
|
630 | 637 |
self.assertFault(response, 409, "buildInProgress") |
631 | 638 |
# Check same Flavor |
632 | 639 |
vm = self.get_vm(flavor=flavor, operstate="STOPPED") |
633 | 640 |
request = {'resize': {'flavorRef': flavor.id}} |
634 | 641 |
response = self.mypost('servers/%d/action' % vm.id, |
635 |
vm.userid, json.dumps(request), 'json') |
|
642 |
vm.userid, json.dumps(request), 'json')
|
|
636 | 643 |
self.assertBadRequest(response) |
637 | 644 |
# Check flavor with different disk |
638 | 645 |
flavor2 = mfactory.FlavorFactory(disk=1024) |
... | ... | |
640 | 647 |
vm = self.get_vm(flavor=flavor2, operstate="STOPPED") |
641 | 648 |
request = {'resize': {'flavorRef': flavor3.id}} |
642 | 649 |
response = self.mypost('servers/%d/action' % vm.id, |
643 |
vm.userid, json.dumps(request), 'json') |
|
650 |
vm.userid, json.dumps(request), 'json')
|
|
644 | 651 |
self.assertBadRequest(response) |
645 | 652 |
flavor2 = mfactory.FlavorFactory(disk_template="foo") |
646 | 653 |
flavor3 = mfactory.FlavorFactory(disk_template="baz") |
647 | 654 |
vm = self.get_vm(flavor=flavor2, operstate="STOPPED") |
648 | 655 |
request = {'resize': {'flavorRef': flavor3.id}} |
649 | 656 |
response = self.mypost('servers/%d/action' % vm.id, |
650 |
vm.userid, json.dumps(request), 'json') |
|
657 |
vm.userid, json.dumps(request), 'json')
|
|
651 | 658 |
self.assertBadRequest(response) |
652 | 659 |
# Check success |
653 | 660 |
vm = self.get_vm(flavor=flavor, operstate="STOPPED") |
... | ... | |
657 | 664 |
request = {'resize': {'flavorRef': flavor4.id}} |
658 | 665 |
mrapi().ModifyInstance.return_value = 42 |
659 | 666 |
response = self.mypost('servers/%d/action' % vm.id, |
660 |
vm.userid, json.dumps(request), 'json') |
|
667 |
vm.userid, json.dumps(request), 'json')
|
|
661 | 668 |
self.assertEqual(response.status_code, 202) |
662 | 669 |
vm = VirtualMachine.objects.get(id=vm.id) |
663 | 670 |
self.assertEqual(vm.task_job_id, 42) |
... | ... | |
673 | 680 |
for action in VirtualMachine.ACTIONS: |
674 | 681 |
request = {action[0]: ""} |
675 | 682 |
response = self.mypost('servers/%d/action' % vm.id, |
676 |
vm.userid, json.dumps(request), 'json') |
|
683 |
vm.userid, json.dumps(request), 'json')
|
|
677 | 684 |
self.assertBadRequest(response) |
678 | 685 |
# however you can destroy |
679 | 686 |
mrapi().DeleteInstance.return_value = 42 |
Also available in: Unified diff