Revision 0a83201b

b/snf-cyclades-app/synnefo/volume/tests/__init__.py
1
#from .api_tests import *
2
from .volumes import *
b/snf-cyclades-app/synnefo/volume/tests/volumes.py
1
from snf_django.utils.testing import BaseAPITest
2
#from synnefo.db.models import Volume
3
from synnefo.db import models_factory as mf
4
from synnefo.volume import volumes
5
from snf_django.lib.api import faults
6
from mock import patch
7
from copy import deepcopy
8

  
9

  
10
@patch("synnefo.logic.rapi_pool.GanetiRapiClient")
11
class VolumesTest(BaseAPITest):
12
    def setUp(self):
13
        self.userid = "test_user"
14
        self.size = 1
15
        self.vm = mf.VirtualMachineFactory(userid=self.userid)
16
        self.kwargs = {"user_id": self.userid,
17
                       "size": self.size,
18
                       "server_id": self.vm.id}
19

  
20
    def test_create(self, mrapi):
21
        # No server id
22
        kwargs = deepcopy(self.kwargs)
23
        kwargs["server_id"] = None
24
        self.assertRaises(faults.BadRequest,
25
                          volumes.create,
26
                          **kwargs)
27

  
28
        # Invalid server
29
        vm = mf.VirtualMachineFactory(userid="other_user")
30
        kwargs["server_id"] = vm.id
31
        self.assertRaises(faults.BadRequest,
32
                          volumes.create,
33
                          **kwargs)
34

  
35
        # Create server without source!
36
        mrapi().ModifyInstance.return_value = 42
37
        vol = volumes.create(**self.kwargs)
38

  
39
        self.assertEqual(vol.size, self.size)
40
        self.assertEqual(vol.userid, self.userid)
41
        self.assertEqual(vol.name, None)
42
        self.assertEqual(vol.description, None)
43
        self.assertEqual(vol.source_snapshot_id, None)
44
        self.assertEqual(vol.source_volume, None)
45
        self.assertEqual(vol.source_image_id, None)
46
        self.assertEqual(vol.machine, self.vm)
47

  
48
        name, args, kwargs = mrapi().ModifyInstance.mock_calls[0]
49
        self.assertEqual(kwargs["instance"], self.vm.backend_vm_id)
50
        disk_info = kwargs["disks"][0][2]
51
        self.assertEqual(disk_info["size"], self.size)
52
        self.assertEqual(disk_info["name"], vol.backend_volume_uuid)
53
        self.assertEqual(disk_info["volume_name"], vol.backend_volume_uuid)
54
        self.assertFalse("origin" in disk_info)
55

  
56
    def test_create_from_volume(self, mrapi):
57
        # Wrong source
58
        svol = mf.VolumeFactory(userid="other_user")
59
        self.assertRaises(faults.BadRequest,
60
                          volumes.create,
61
                          source_volume_id=svol.id,
62
                          **self.kwargs)
63

  
64
        svol = mf.VolumeFactory(userid=self.userid)
65
        mrapi().ModifyInstance.return_value = 42
66
        vol = volumes.create(source_volume_id=svol.id, **self.kwargs)
67

  
68
        self.assertEqual(vol.size, self.size)
69
        self.assertEqual(vol.userid, self.userid)
70
        self.assertEqual(vol.name, None)
71
        self.assertEqual(vol.description, None)
72
        self.assertEqual(vol.source_snapshot_id, None)
73
        self.assertEqual(vol.source_volume, svol)
74
        self.assertEqual(vol.source_image_id, None)
75

  
76
        name, args, kwargs = mrapi().ModifyInstance.mock_calls[0]
77
        self.assertEqual(kwargs["instance"], self.vm.backend_vm_id)
78
        disk_info = kwargs["disks"][0][2]
79
        self.assertEqual(disk_info["size"], self.size)
80
        self.assertEqual(disk_info["name"], vol.backend_volume_uuid)
81
        self.assertEqual(disk_info["volume_name"], vol.backend_volume_uuid)
82
        self.assertEqual(disk_info["origin"], svol.backend_volume_uuid)
83

  
84
    @patch("synnefo.api.util.get_image")
85
    def test_create_from_snapshot(self, mocked_image, mrapi):
86
        # Wrong source
87
        mocked_image.side_effect = faults.ItemNotFound
88
        self.assertRaises(faults.BadRequest,
89
                          volumes.create,
90
                          source_snapshot_id=421,
91
                          **self.kwargs)
92

  
93
        mocked_image.side_effect = None
94
        mocked_image.return_value = {'location': 'pithos://foo',
95
                                     'checksum': 'snf-snapshot-43',
96
                                     'id': 12,
97
                                     'name': "test_image",
98
                                     'size': 1242,
99
                                     'disk_format': 'diskdump',
100
                                     'properties': {'source_volume': 42}}
101

  
102
        mrapi().ModifyInstance.return_value = 42
103
        vol = volumes.create(source_snapshot_id=12, **self.kwargs)
104

  
105
        self.assertEqual(vol.size, self.size)
106
        self.assertEqual(vol.userid, self.userid)
107
        self.assertEqual(vol.name, None)
108
        self.assertEqual(vol.description, None)
109
        self.assertEqual(vol.source_snapshot_id, 12)
110
        self.assertEqual(vol.source_volume, None)
111
        self.assertEqual(vol.source_image_id, None)
112

  
113
        name, args, kwargs = mrapi().ModifyInstance.mock_calls[0]
114
        self.assertEqual(kwargs["instance"], self.vm.backend_vm_id)
115
        disk_info = kwargs["disks"][0][2]
116
        self.assertEqual(disk_info["size"], self.size)
117
        self.assertEqual(disk_info["name"], vol.backend_volume_uuid)
118
        self.assertEqual(disk_info["volume_name"], vol.backend_volume_uuid)
119
        self.assertEqual(disk_info["origin"], "snf-snapshot-43")
120

  
121
    def test_delete(self, mrapi):
122
        # Test in use
123
        vol = mf.VolumeFactory()
124
        vm = mf.VirtualMachineFactory()
125
        vol.machine = vm
126
        vol.save()
127
        self.assertRaises(faults.BadRequest,
128
                          volumes.delete,
129
                          vol)
130
        self.assertFalse(vol.deleted)
131

  
132
        vol.machine = None
133
        vol.save()
134
        volumes.delete(vol)
135
        self.assertTrue(vol.deleted)

Also available in: Unified diff