test_operations.py 3.97 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
from mock import MagicMock, patch

from django.test import TestCase

from vm.models import Instance
from vm.operations import (
    Operation, DeployOperation, DestroyOperation, MigrateOperation,
    RebootOperation, RedeployOperation, ResetOperation,
    SaveAsTemplateOperation, ShutdownOperation, ShutOffOperation,
    SleepOperation, WakeUpOperation,
)
12
from vm.tasks.local_tasks import async_instance_operation
13 14 15 16 17 18 19 20 21 22


class OperationTestCase(TestCase):
    def test_activity_created_before_async_job(self):
        class AbortEx(Exception):
            pass

        op = Operation(MagicMock())
        op.activity_code_suffix = 'test'
        op.id = 'test'
23 24
        with patch.object(async_instance_operation, 'apply_async',
                          side_effect=AbortEx):
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
            with patch.object(Operation, 'check_precond'):
                with patch.object(Operation, 'create_activity') as create_act:
                    try:
                        op.async(system=True)
                    except AbortEx:
                        self.assertTrue(create_act.called)

    def test_check_precond_called_before_create_activity(self):
        class AbortEx(Exception):
            pass

        op = Operation(MagicMock())
        op.activity_code_suffix = 'test'
        op.id = 'test'
        with patch.object(Operation, 'create_activity', side_effect=AbortEx):
            with patch.object(Operation, 'check_precond') as chk_pre:
                try:
                    op.call(system=True)
                except AbortEx:
                    self.assertTrue(chk_pre.called)

46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
    def test_auth_check_on_non_system_call(self):
        op = Operation(MagicMock())
        op.activity_code_suffix = 'test'
        op.id = 'test'
        user = MagicMock()
        with patch.object(Operation, 'check_auth') as check_auth:
            with patch.object(Operation, 'check_precond'), \
                    patch.object(Operation, 'create_activity'), \
                    patch.object(Operation, '_exec_op'):
                op.call(user=user)
            check_auth.assert_called_with(user)

    def test_no_auth_check_on_system_call(self):
        op = Operation(MagicMock())
        op.activity_code_suffix = 'test'
        op.id = 'test'
        with patch.object(Operation, 'check_auth', side_effect=AssertionError):
            with patch.object(Operation, 'check_precond'), \
                    patch.object(Operation, 'create_activity'), \
                    patch.object(Operation, '_exec_op'):
                op.call(system=True)

68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121

class DeployOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert DeployOperation.id in Instance._ops


class DestroyOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert DestroyOperation.id in Instance._ops


class MigrateOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert MigrateOperation.id in Instance._ops


class RebootOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert RebootOperation.id in Instance._ops


class RedeployOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert RedeployOperation.id in Instance._ops


class ResetOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert ResetOperation.id in Instance._ops


class SaveAsTemplateOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert SaveAsTemplateOperation.id in Instance._ops


class ShutdownOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert ShutdownOperation.id in Instance._ops


class ShutOffOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert ShutOffOperation.id in Instance._ops


class SleepOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert SleepOperation.id in Instance._ops


class WakeUpOperationTestCase(TestCase):
    def test_operation_registered(self):
        assert WakeUpOperation.id in Instance._ops