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