test_models.py 2.55 KB
Newer Older
1 2 3 4
from datetime import timedelta

from django.test import TestCase
from django.utils import timezone
Guba Sándor committed
5
from mock import MagicMock, Mock
6 7 8

from ..models import Disk, DataStore

9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
old = timezone.now() - timedelta(days=2)
new = timezone.now() - timedelta(hours=2)


class DiskTestCase(TestCase):

    n = 0

    def setUp(self):
        self.ds = DataStore.objects.create(path="/datastore",
                                           hostname="devenv", name="default")

    def _disk(self, destroyed=None, base=None):
        self.n += 1
        n = "d%d" % self.n
        return Disk.objects.create(name=n, filename=n, base=base, size=1,
                                   destroyed=destroyed, datastore=self.ds)

    def test_deletable_not_destroyed(self):
        d = self._disk()
30
        assert not d.is_deletable
31 32

    def test_deletable_newly_destroyed(self):
33
        d = self._disk(destroyed=new)
Guba Sándor committed
34
        assert d.is_deletable
35 36 37

    def test_deletable_no_child(self):
        d = self._disk(destroyed=old)
38
        assert d.is_deletable
39 40 41 42 43

    def test_deletable_child_not_destroyed(self):
        d = self._disk()
        self._disk(base=d, destroyed=old)
        self._disk(base=d)
44
        assert not d.is_deletable
45 46 47 48 49

    def test_deletable_child_newly_destroyed(self):
        d = self._disk(destroyed=old)
        self._disk(base=d, destroyed=new)
        self._disk(base=d)
50
        assert not d.is_deletable
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

    def test_save_as_disk_in_use_error(self):
        class MockException(Exception):
            pass

        d = MagicMock(spec=Disk)
        d.DiskInUseError = MockException
        d.type = "qcow2-norm"
        d.is_in_use = True
        with self.assertRaises(MockException):
            Disk.save_as(d)

    def test_save_as_wrong_type(self):
        class MockException(Exception):
            pass

        d = MagicMock(spec=Disk)
        d.WrongDiskTypeError = MockException
        d.type = "wrong"
        with self.assertRaises(MockException):
            Disk.save_as(d)

    def test_save_as_disk_not_ready(self):
        class MockException(Exception):
            pass

        d = MagicMock(spec=Disk)
        d.DiskIsNotReady = MockException
        d.type = "qcow2-norm"
        d.is_in_use = False
        d.ready = False
        with self.assertRaises(MockException):
            Disk.save_as(d)
Guba Sándor committed
84 85 86 87 88

    def test_download_percentage_no_download(self):
        d = MagicMock(spec=Disk)
        d.is_downloading = Mock(return_value=False)
        assert Disk.get_download_percentage(d) is None
89

Guba Sándor committed
90 91 92
    def test_undeployed_disk_ready(self):
        d = self._disk()
        assert not d.ready