test_models.py 3.75 KB
Newer Older
Őry Máté committed
1
from datetime import datetime
2
from django.test import TestCase
Őry Máté committed
3
from django.utils.translation import ugettext_lazy as _
4
from mock import Mock, MagicMock, patch
5

Őry Máté committed
6 7
from ..models import (
    Lease, Node, Interface, Instance, InstanceTemplate,
8
)
Bach Dániel committed
9
from ..models.instance import find_unused_port, ActivityInProgressError
10 11 12 13 14 15 16 17 18 19 20 21


class PortFinderTestCase(TestCase):

    def test_find_unused_port_without_used_ports(self):
        port = find_unused_port(port_range=(1000, 2000))
        assert port is not None

    def test_find_unused_port_with_fully_saturated_range(self):
        r = (10, 20)
        port = find_unused_port(port_range=r, used_ports=range(*r))
        assert port is None
22 23 24


class TemplateTestCase(TestCase):
25

26
    def test_template_creation(self):
27 28
        template = InstanceTemplate(name='My first template',
                                    access_method='ssh', )
Őry Máté committed
29
        template.clean()
30
        # TODO add images & net
31 32


33 34 35 36 37 38
class InstanceTestCase(TestCase):

    def test_is_running(self):
        inst = Mock(state='RUNNING')
        assert Instance.is_running.getter(inst)

39 40 41 42 43 44 45 46 47 48 49
    def test_mon_stopped_while_activity_running(self):
        node = Mock()
        port = Mock()
        inst = MagicMock(spec=Instance, node=node, vnc_port=port)
        inst.save.side_effect = AssertionError
        with patch('vm.models.instance.InstanceActivity') as ia:
            ia.create.side_effect = ActivityInProgressError(MagicMock())
            Instance.vm_state_changed(inst, 'STOPPED')
        self.assertEquals(inst.node, node)
        self.assertEquals(inst.vnc_port, port)

Őry Máté committed
50 51 52
    def test_deploy_destroyed(self):
        inst = Mock(destroyed_at=datetime.now(), spec=Instance,
                    InstanceDestroyedError=Instance.InstanceDestroyedError)
Őry Máté committed
53 54 55
        with self.assertRaises(Instance.InstanceDestroyedError):
            Instance.deploy(inst)

Őry Máté committed
56 57
    def test_destroy_destroyed(self):
        inst = Mock(destroyed_at=datetime.now(), spec=Instance)
Őry Máté committed
58 59 60
        Instance.destroy(inst)
        self.assertFalse(inst.save.called)

Őry Máté committed
61
    def test_destroy_sets_destroyed(self):
Őry Máté committed
62 63 64 65 66 67 68 69 70
        inst = MagicMock(destroyed_at=None, spec=Instance)
        inst.node = MagicMock(spec=Node)
        inst.disks.all.return_value = []
        with patch('vm.models.instance.instance_activity') as ia:
            ia.return_value = MagicMock()
            Instance.destroy(inst)
        self.assertTrue(inst.destroyed_at)
        inst.save.assert_called()

71

72 73 74 75 76 77 78
class InterfaceTestCase(TestCase):

    def test_interface_create(self):
        from firewall.models import Vlan, Domain
        from django.contrib.auth.models import User
        owner = User()
        owner.save()
Bach Dániel committed
79
        i = Instance(id=10, owner=owner, access_method='rdp')
80 81 82 83 84 85
        d = Domain(owner=owner)
        d.save()
        v = Vlan(vid=55, network4='127.0.0.1/8',
                 network6='2001::1/32', domain=d)
        v.save()
        Interface.create(i, v, managed=True, owner=owner)
Őry Máté committed
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109


class LeaseTestCase(TestCase):

    fixtures = ['lease.json']

    def test_methods(self):
        from datetime import timedelta
        td = timedelta(seconds=1)
        l = Lease.objects.get(pk=1)

        assert "never" not in unicode(l)
        assert l.delete_interval > td
        assert l.suspend_interval > td

        l.delete_interval = None
        assert "never" in unicode(l)
        assert l.delete_interval is None

        l.delete_interval = td * 2
        assert "never" not in unicode(l)

        l.suspend_interval = None
        assert "never" in unicode(l)
Őry Máté committed
110 111 112 113 114 115 116 117 118 119 120


class NodeTestCase(TestCase):

    def test_state(self):
        node = Mock(spec=Node)
        node.online = True
        node.enabled = True
        node.STATES = Node.STATES
        self.assertEqual(Node.get_state(node), "ONLINE")
        assert isinstance(Node.get_status_display(node), _("").__class__)