Revision eb99b367

b/snf-cyclades-app/synnefo/logic/tests.py
594 594
            self.assertEqual(vm.buildpercentage, old)
595 595

  
596 596

  
597
class ReconciliationTest(TestCase):
598
    SERVERS = 1000
599
    fixtures = ['db_test_data']
600

  
601
    def test_get_servers_from_db(self):
602
        """Test getting a dictionary from each server to its operstate"""
603
        self.assertEquals(reconciliation.get_servers_from_db(),
604
                          {30000: 'STARTED', 30001: 'STOPPED', 30002: 'BUILD'})
605

  
606
    def test_stale_servers_in_db(self):
607
        """Test discovery of stale entries in DB"""
608

  
609
        D = {1: 'STARTED', 2: 'STOPPED', 3: 'STARTED', 30000: 'BUILD',
610
             30002: 'STOPPED'}
611
        G = {1: True, 3: True, 30000: True}
612
        self.assertEquals(reconciliation.stale_servers_in_db(D, G),
613
                          set([2, 30002]))
614

  
615
    @patch("synnefo.db.models.get_rapi_client")
616
    def test_stale_building_vm(self, client):
617
        vm = mfactory.VirtualMachineFactory()
618
        vm.state = 'BUILD'
619
        vm.backendjobid = 42
620
        vm.save()
621
        D = {vm.id: 'BUILD'}
622
        G = {}
623
        for status in ['queued', 'waiting', 'running']:
624
            client.return_value.GetJobStatus.return_value = {'status': status}
625
            self.assertEqual(reconciliation.stale_servers_in_db(D, G), set([]))
626
            client.return_value.GetJobStatus\
627
                               .assert_called_once_with(vm.backendjobid)
628
            client.reset_mock()
629
        for status in ['success', 'error', 'canceled']:
630
            client.return_value.GetJobStatus.return_value = {'status': status}
631
            self.assertEqual(reconciliation.stale_servers_in_db(D, G), set([]))
632
            client.return_value.GetInstance\
633
                               .assert_called_once_with(vm.backend_vm_id)
634
            client.return_value.GetJobStatus\
635
                               .assert_called_once_with(vm.backendjobid)
636
            client.reset_mock()
637
        from synnefo.logic.rapi import GanetiApiError
638
        client.return_value.GetJobStatus.side_effect = GanetiApiError('Foo')
639
        self.assertEqual(reconciliation.stale_servers_in_db(D, G),
640
                         set([vm.id]))
641

  
642
    def test_orphan_instances_in_ganeti(self):
643
        """Test discovery of orphan instances in Ganeti, without a DB entry"""
644

  
645
        G = {1: True, 2: False, 3: False, 4: True, 50: True}
646
        D = {1: True, 3: False}
647
        self.assertEquals(reconciliation.orphan_instances_in_ganeti(D, G),
648
                          set([2, 4, 50]))
649

  
650
    def test_unsynced_operstate(self):
651
        """Test discovery of unsynced operstate between the DB and Ganeti"""
652

  
653
        G = {1: True, 2: False, 3: True, 4: False, 50: True}
654
        D = {1: 'STARTED', 2: 'STARTED', 3: 'BUILD', 4: 'STARTED', 50: 'BUILD'}
655
        self.assertEquals(reconciliation.unsynced_operstate(D, G),
656
                          set([(2, 'STARTED', False),
657
                               (3, 'BUILD', True), (4, 'STARTED', False),
658
                               (50, 'BUILD', True)]))
597
#class ReconciliationTest(TestCase):
598
#    SERVERS = 1000
599
#    fixtures = ['db_test_data']
600
#
601
#    def test_get_servers_from_db(self):
602
#        """Test getting a dictionary from each server to its operstate"""
603
#        self.assertEquals(reconciliation.get_servers_from_db(),
604
#                          {30000: 'STARTED', 30001: 'STOPPED', 30002: 'BUILD'})
605
#
606
#    def test_stale_servers_in_db(self):
607
#        """Test discovery of stale entries in DB"""
608
#
609
#        D = {1: 'STARTED', 2: 'STOPPED', 3: 'STARTED', 30000: 'BUILD',
610
#             30002: 'STOPPED'}
611
#        G = {1: True, 3: True, 30000: True}
612
#        self.assertEquals(reconciliation.stale_servers_in_db(D, G),
613
#                          set([2, 30002]))
614
#
615
#    @patch("synnefo.db.models.get_rapi_client")
616
#    def test_stale_building_vm(self, client):
617
#        vm = mfactory.VirtualMachineFactory()
618
#        vm.state = 'BUILD'
619
#        vm.backendjobid = 42
620
#        vm.save()
621
#        D = {vm.id: 'BUILD'}
622
#        G = {}
623
#        for status in ['queued', 'waiting', 'running']:
624
#            client.return_value.GetJobStatus.return_value = {'status': status}
625
#            self.assertEqual(reconciliation.stale_servers_in_db(D, G), set([]))
626
#            client.return_value.GetJobStatus\
627
#                               .assert_called_once_with(vm.backendjobid)
628
#            client.reset_mock()
629
#        for status in ['success', 'error', 'canceled']:
630
#            client.return_value.GetJobStatus.return_value = {'status': status}
631
#            self.assertEqual(reconciliation.stale_servers_in_db(D, G), set([]))
632
#            client.return_value.GetInstance\
633
#                               .assert_called_once_with(vm.backend_vm_id)
634
#            client.return_value.GetJobStatus\
635
#                               .assert_called_once_with(vm.backendjobid)
636
#            client.reset_mock()
637
#        from synnefo.logic.rapi import GanetiApiError
638
#        client.return_value.GetJobStatus.side_effect = GanetiApiError('Foo')
639
#        self.assertEqual(reconciliation.stale_servers_in_db(D, G),
640
#                         set([vm.id]))
641
#
642
#    def test_orphan_instances_in_ganeti(self):
643
#        """Test discovery of orphan instances in Ganeti, without a DB entry"""
644
#
645
#        G = {1: True, 2: False, 3: False, 4: True, 50: True}
646
#        D = {1: True, 3: False}
647
#        self.assertEquals(reconciliation.orphan_instances_in_ganeti(D, G),
648
#                          set([2, 4, 50]))
649
#
650
#    def test_unsynced_operstate(self):
651
#        """Test discovery of unsynced operstate between the DB and Ganeti"""
652
#
653
#        G = {1: True, 2: False, 3: True, 4: False, 50: True}
654
#        D = {1: 'STARTED', 2: 'STARTED', 3: 'BUILD', 4: 'STARTED', 50: 'BUILD'}
655
#        self.assertEquals(reconciliation.unsynced_operstate(D, G),
656
#                          set([(2, 'STARTED', False),
657
#                               (3, 'BUILD', True), (4, 'STARTED', False),
658
#                               (50, 'BUILD', True)]))
659 659

  
660 660
from synnefo.logic.test.rapi_pool_tests import *
661 661
from synnefo.logic.test.utils_tests import *

Also available in: Unified diff