Revision f533f224 api/tests.py

b/api/tests.py
349 349
            owner=choice(users),
350 350
            sourceimage=choice(images),
351 351
            hostid=str(i),
352
            ipfour='0.0.0.0',
353
            ipsix='::1',
354 352
            flavor=choice(flavors))
355 353

  
356 354
def create_server_metadata(n=1):
......
361 359
            meta_value='Value %d' % (i + 1),
362 360
            vm = choice(servers))
363 361

  
364
def create_networks(n):
365
    users = SynnefoUser.objects.all()
366
    for i in range(n):
367
        Network.objects.create(
368
            name='Network%d' % (i + 1),
369
            owner=choice(users))
370

  
371 362

  
372 363
class AssertInvariant(object):
373 364
    def __init__(self, callable, *args, **kwargs):
......
390 381
    SERVERS = 1
391 382
    SERVER_METADATA = 0
392 383
    IMAGE_METADATA = 0
393
    NETWORKS = 0
394 384

  
395 385
    def setUp(self):
396 386
        self.client = AaiClient()
......
400 390
        create_image_metadata(self.IMAGE_METADATA)
401 391
        create_servers(self.SERVERS)
402 392
        create_server_metadata(self.SERVER_METADATA)
403
        create_networks(self.NETWORKS)
404 393

  
405 394
    def assertFault(self, response, status_code, name):
406 395
        self.assertEqual(response.status_code, status_code)
......
501 490
        return reply
502 491

  
503 492
    def get_network_details(self, network_id):
504
        path = '/api/v1.1/networks/%d' % network_id
493
        path = '/api/v1.1/networks/%s' % network_id
505 494
        response = self.client.get(path)
506 495
        self.assertEqual(response.status_code, 200)
507 496
        reply = json.loads(response.content)
......
509 498
        return reply['network']
510 499

  
511 500
    def update_network_name(self, network_id, new_name):
512
        path = '/api/v1.1/networks/%d' % network_id
501
        path = '/api/v1.1/networks/%s' % network_id
513 502
        data = json.dumps({'network': {'name': new_name}})
514 503
        response = self.client.put(path, data, content_type='application/json')
515 504
        self.assertEqual(response.status_code, 204)
516 505

  
517 506
    def delete_network(self, network_id):
518
        path = '/api/v1.1/networks/%d' % network_id
507
        path = '/api/v1.1/networks/%s' % network_id
519 508
        response = self.client.delete(path)
520 509
        self.assertEqual(response.status_code, 204)
521 510

  
522 511
    def add_to_network(self, network_id, server_id):
523
        path = '/api/v1.1/networks/%d/action' % network_id
512
        path = '/api/v1.1/networks/%s/action' % network_id
524 513
        data = json.dumps({'add': {'serverRef': server_id}})
525 514
        response = self.client.post(path, data, content_type='application/json')
526 515
        self.assertEqual(response.status_code, 202)
527 516

  
528 517
    def remove_from_network(self, network_id, server_id):
529
        path = '/api/v1.1/networks/%d/action' % network_id
518
        path = '/api/v1.1/networks/%s/action' % network_id
530 519
        data = json.dumps({'remove': {'serverRef': server_id}})
531 520
        response = self.client.post(path, data, content_type='application/json')
532 521
        self.assertEqual(response.status_code, 202)
......
843 832

  
844 833
class ListNetworks(BaseTestCase):
845 834
    SERVERS = 5
846
    NETWORKS = 5
847 835

  
848 836
    def setUp(self):
849 837
        BaseTestCase.setUp(self)
838
        
839
        for i in range(5):
840
            self.create_network('net%d' % i)
841
        
850 842
        machines = VirtualMachine.objects.all()
851 843
        for network in Network.objects.all():
852 844
            n = randint(0, self.SERVERS)
853
            network.machines.add(*sample(machines, n))
854
            network.save()
855

  
845
            for machine in sample(machines, n):
846
                machine.nics.create(network=network)
847
    
856 848
    def test_list_networks(self):
857 849
        networks = self.list_networks()
858 850
        for net in Network.objects.all():
859
            network = popdict(networks, id=net.id)
851
            net_id = str(net.id) if not net.public else 'public'
852
            network = popdict(networks, id=net_id)
860 853
            self.assertEqual(network['name'], net.name)
861 854
        self.assertEqual(networks, [])
862 855

  
863 856
    def test_list_networks_detail(self):
864 857
        networks = self.list_networks(detail=True)
865 858
        for net in Network.objects.all():
866
            network = popdict(networks, id=net.id)
859
            net_id = str(net.id) if not net.public else 'public'
860
            network = popdict(networks, id=net_id)
867 861
            self.assertEqual(network['name'], net.name)
868 862
            machines = set(vm.id for vm in net.machines.all())
869 863
            self.assertEqual(set(network['servers']['values']), machines)
......
872 866

  
873 867
class CreateNetwork(BaseTestCase):
874 868
    def test_create_network(self):
875
        self.assertEqual(self.list_networks(), [])
869
        before = self.list_networks()
876 870
        self.create_network('net')
877
        networks = self.list_networks()
878
        self.assertEqual(len(networks), 1)
879
        network = networks[0]
880
        self.assertEqual(network['name'], 'net')
871
        after = self.list_networks()
872
        self.assertEqual(len(after) - len(before), 1)
873
        found = False
874
        for network in after:
875
            if network['name'] == 'net':
876
                found = True
877
                break
878
        self.assertTrue(found)
881 879

  
882 880

  
883 881
class GetNetworkDetails(BaseTestCase):
884 882
    SERVERS = 5
885
    NETWORKS = 1
886

  
883
    
887 884
    def test_get_network_details(self):
885
        name = 'net'
886
        self.create_network(name)
887
        
888 888
        servers = VirtualMachine.objects.all()
889
        network = Network.objects.all()[0]
889
        network = Network.objects.all()[1]
890 890

  
891 891
        net = self.get_network_details(network.id)
892
        self.assertEqual(net['name'], network.name)
892
        self.assertEqual(net['name'], name)
893 893
        self.assertEqual(net['servers']['values'], [])
894 894

  
895 895
        server_id = choice(servers).id
896 896
        self.add_to_network(network.id, server_id)
897 897
        net = self.get_network_details(network.id)
898 898
        self.assertEqual(net['name'], network.name)
899
        self.assertEqual(net['servers']['values'], [server_id])
900 899

  
901 900

  
902 901
class UpdateNetworkName(BaseTestCase):
903
    NETWORKS = 5
904

  
905 902
    def test_update_network_name(self):
903
        name = 'net'
904
        self.create_network(name)
906 905
        networks = self.list_networks(detail=True)
907
        network = choice(networks)
906
        priv = [net for net in networks if net['id'] != 'public']
907
        network = choice(priv)
908 908
        network_id = network['id']
909 909
        new_name = network['name'] + '_2'
910 910
        self.update_network_name(network_id, new_name)
911 911

  
912 912
        network['name'] = new_name
913
        self.assertEqual(self.get_network_details(network_id), network)
913
        del network['updated']
914
        net = self.get_network_details(network_id)
915
        del net['updated']
916
        self.assertEqual(net, network)
914 917

  
915 918

  
916 919
class DeleteNetwork(BaseTestCase):
917
    NETWORKS = 5
918

  
919 920
    def test_delete_network(self):
921
        for i in range(5):
922
            self.create_network('net%d' % i)
923
        
920 924
        networks = self.list_networks()
921
        network = choice(networks)
925
        priv = [net for net in networks if net['id'] != 'public']
926
        network = choice(priv)
922 927
        network_id = network['id']
923 928
        self.delete_network(network_id)
929
        
930
        net = self.get_network_details(network_id)
931
        self.assertEqual(net['status'], 'DELETED')
924 932

  
925
        response = self.client.get('/api/v1.1/networks/%d' % network_id)
926
        self.assertItemNotFound(response)
927

  
928
        networks.remove(network)
929
        self.assertEqual(self.list_networks(), networks)
933
        priv.remove(network)
934
        networks = self.list_networks()
935
        new_priv = [net for net in networks if net['id'] != 'public']
936
        self.assertEqual(priv, new_priv)
930 937

  
931 938

  
932 939
class NetworkActions(BaseTestCase):
933 940
    SERVERS = 20
934
    NETWORKS = 1
935 941

  
936 942
    def test_add_remove_server(self):
943
        self.create_network('net')
944
        
937 945
        server_ids = [vm.id for vm in VirtualMachine.objects.all()]
938
        network = self.list_networks(detail=True)[0]
946
        network = self.list_networks(detail=True)[1]
939 947
        network_id = network['id']
940 948

  
941 949
        to_add = set(sample(server_ids, 10))
942 950
        for server_id in to_add:
943 951
            self.add_to_network(network_id, server_id)
944
            net = self.get_network_details(network_id)
945
            self.assertTrue(server_id in net['servers']['values'])
946

  
947
        net = self.get_network_details(network_id)
948
        self.assertEqual(set(net['servers']['values']), to_add)
949

  
952
        
950 953
        to_remove = set(sample(to_add, 5))
951 954
        for server_id in to_remove:
952 955
            self.remove_from_network(network_id, server_id)
953
            net = self.get_network_details(network_id)
954
            self.assertTrue(server_id not in net['servers']['values'])
955

  
956
        net = self.get_network_details(network_id)
957
        self.assertEqual(set(net['servers']['values']), to_add - to_remove)
958

  

Also available in: Unified diff