Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / volume / tests / volumes.py @ 0a83201b

History | View | Annotate | Download (5.4 kB)

1 0a83201b Christos Stavrakakis
from snf_django.utils.testing import BaseAPITest
2 0a83201b Christos Stavrakakis
#from synnefo.db.models import Volume
3 0a83201b Christos Stavrakakis
from synnefo.db import models_factory as mf
4 0a83201b Christos Stavrakakis
from synnefo.volume import volumes
5 0a83201b Christos Stavrakakis
from snf_django.lib.api import faults
6 0a83201b Christos Stavrakakis
from mock import patch
7 0a83201b Christos Stavrakakis
from copy import deepcopy
8 0a83201b Christos Stavrakakis
9 0a83201b Christos Stavrakakis
10 0a83201b Christos Stavrakakis
@patch("synnefo.logic.rapi_pool.GanetiRapiClient")
11 0a83201b Christos Stavrakakis
class VolumesTest(BaseAPITest):
12 0a83201b Christos Stavrakakis
    def setUp(self):
13 0a83201b Christos Stavrakakis
        self.userid = "test_user"
14 0a83201b Christos Stavrakakis
        self.size = 1
15 0a83201b Christos Stavrakakis
        self.vm = mf.VirtualMachineFactory(userid=self.userid)
16 0a83201b Christos Stavrakakis
        self.kwargs = {"user_id": self.userid,
17 0a83201b Christos Stavrakakis
                       "size": self.size,
18 0a83201b Christos Stavrakakis
                       "server_id": self.vm.id}
19 0a83201b Christos Stavrakakis
20 0a83201b Christos Stavrakakis
    def test_create(self, mrapi):
21 0a83201b Christos Stavrakakis
        # No server id
22 0a83201b Christos Stavrakakis
        kwargs = deepcopy(self.kwargs)
23 0a83201b Christos Stavrakakis
        kwargs["server_id"] = None
24 0a83201b Christos Stavrakakis
        self.assertRaises(faults.BadRequest,
25 0a83201b Christos Stavrakakis
                          volumes.create,
26 0a83201b Christos Stavrakakis
                          **kwargs)
27 0a83201b Christos Stavrakakis
28 0a83201b Christos Stavrakakis
        # Invalid server
29 0a83201b Christos Stavrakakis
        vm = mf.VirtualMachineFactory(userid="other_user")
30 0a83201b Christos Stavrakakis
        kwargs["server_id"] = vm.id
31 0a83201b Christos Stavrakakis
        self.assertRaises(faults.BadRequest,
32 0a83201b Christos Stavrakakis
                          volumes.create,
33 0a83201b Christos Stavrakakis
                          **kwargs)
34 0a83201b Christos Stavrakakis
35 0a83201b Christos Stavrakakis
        # Create server without source!
36 0a83201b Christos Stavrakakis
        mrapi().ModifyInstance.return_value = 42
37 0a83201b Christos Stavrakakis
        vol = volumes.create(**self.kwargs)
38 0a83201b Christos Stavrakakis
39 0a83201b Christos Stavrakakis
        self.assertEqual(vol.size, self.size)
40 0a83201b Christos Stavrakakis
        self.assertEqual(vol.userid, self.userid)
41 0a83201b Christos Stavrakakis
        self.assertEqual(vol.name, None)
42 0a83201b Christos Stavrakakis
        self.assertEqual(vol.description, None)
43 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_snapshot_id, None)
44 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_volume, None)
45 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_image_id, None)
46 0a83201b Christos Stavrakakis
        self.assertEqual(vol.machine, self.vm)
47 0a83201b Christos Stavrakakis
48 0a83201b Christos Stavrakakis
        name, args, kwargs = mrapi().ModifyInstance.mock_calls[0]
49 0a83201b Christos Stavrakakis
        self.assertEqual(kwargs["instance"], self.vm.backend_vm_id)
50 0a83201b Christos Stavrakakis
        disk_info = kwargs["disks"][0][2]
51 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["size"], self.size)
52 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["name"], vol.backend_volume_uuid)
53 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["volume_name"], vol.backend_volume_uuid)
54 0a83201b Christos Stavrakakis
        self.assertFalse("origin" in disk_info)
55 0a83201b Christos Stavrakakis
56 0a83201b Christos Stavrakakis
    def test_create_from_volume(self, mrapi):
57 0a83201b Christos Stavrakakis
        # Wrong source
58 0a83201b Christos Stavrakakis
        svol = mf.VolumeFactory(userid="other_user")
59 0a83201b Christos Stavrakakis
        self.assertRaises(faults.BadRequest,
60 0a83201b Christos Stavrakakis
                          volumes.create,
61 0a83201b Christos Stavrakakis
                          source_volume_id=svol.id,
62 0a83201b Christos Stavrakakis
                          **self.kwargs)
63 0a83201b Christos Stavrakakis
64 0a83201b Christos Stavrakakis
        svol = mf.VolumeFactory(userid=self.userid)
65 0a83201b Christos Stavrakakis
        mrapi().ModifyInstance.return_value = 42
66 0a83201b Christos Stavrakakis
        vol = volumes.create(source_volume_id=svol.id, **self.kwargs)
67 0a83201b Christos Stavrakakis
68 0a83201b Christos Stavrakakis
        self.assertEqual(vol.size, self.size)
69 0a83201b Christos Stavrakakis
        self.assertEqual(vol.userid, self.userid)
70 0a83201b Christos Stavrakakis
        self.assertEqual(vol.name, None)
71 0a83201b Christos Stavrakakis
        self.assertEqual(vol.description, None)
72 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_snapshot_id, None)
73 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_volume, svol)
74 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_image_id, None)
75 0a83201b Christos Stavrakakis
76 0a83201b Christos Stavrakakis
        name, args, kwargs = mrapi().ModifyInstance.mock_calls[0]
77 0a83201b Christos Stavrakakis
        self.assertEqual(kwargs["instance"], self.vm.backend_vm_id)
78 0a83201b Christos Stavrakakis
        disk_info = kwargs["disks"][0][2]
79 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["size"], self.size)
80 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["name"], vol.backend_volume_uuid)
81 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["volume_name"], vol.backend_volume_uuid)
82 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["origin"], svol.backend_volume_uuid)
83 0a83201b Christos Stavrakakis
84 0a83201b Christos Stavrakakis
    @patch("synnefo.api.util.get_image")
85 0a83201b Christos Stavrakakis
    def test_create_from_snapshot(self, mocked_image, mrapi):
86 0a83201b Christos Stavrakakis
        # Wrong source
87 0a83201b Christos Stavrakakis
        mocked_image.side_effect = faults.ItemNotFound
88 0a83201b Christos Stavrakakis
        self.assertRaises(faults.BadRequest,
89 0a83201b Christos Stavrakakis
                          volumes.create,
90 0a83201b Christos Stavrakakis
                          source_snapshot_id=421,
91 0a83201b Christos Stavrakakis
                          **self.kwargs)
92 0a83201b Christos Stavrakakis
93 0a83201b Christos Stavrakakis
        mocked_image.side_effect = None
94 0a83201b Christos Stavrakakis
        mocked_image.return_value = {'location': 'pithos://foo',
95 0a83201b Christos Stavrakakis
                                     'checksum': 'snf-snapshot-43',
96 0a83201b Christos Stavrakakis
                                     'id': 12,
97 0a83201b Christos Stavrakakis
                                     'name': "test_image",
98 0a83201b Christos Stavrakakis
                                     'size': 1242,
99 0a83201b Christos Stavrakakis
                                     'disk_format': 'diskdump',
100 0a83201b Christos Stavrakakis
                                     'properties': {'source_volume': 42}}
101 0a83201b Christos Stavrakakis
102 0a83201b Christos Stavrakakis
        mrapi().ModifyInstance.return_value = 42
103 0a83201b Christos Stavrakakis
        vol = volumes.create(source_snapshot_id=12, **self.kwargs)
104 0a83201b Christos Stavrakakis
105 0a83201b Christos Stavrakakis
        self.assertEqual(vol.size, self.size)
106 0a83201b Christos Stavrakakis
        self.assertEqual(vol.userid, self.userid)
107 0a83201b Christos Stavrakakis
        self.assertEqual(vol.name, None)
108 0a83201b Christos Stavrakakis
        self.assertEqual(vol.description, None)
109 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_snapshot_id, 12)
110 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_volume, None)
111 0a83201b Christos Stavrakakis
        self.assertEqual(vol.source_image_id, None)
112 0a83201b Christos Stavrakakis
113 0a83201b Christos Stavrakakis
        name, args, kwargs = mrapi().ModifyInstance.mock_calls[0]
114 0a83201b Christos Stavrakakis
        self.assertEqual(kwargs["instance"], self.vm.backend_vm_id)
115 0a83201b Christos Stavrakakis
        disk_info = kwargs["disks"][0][2]
116 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["size"], self.size)
117 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["name"], vol.backend_volume_uuid)
118 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["volume_name"], vol.backend_volume_uuid)
119 0a83201b Christos Stavrakakis
        self.assertEqual(disk_info["origin"], "snf-snapshot-43")
120 0a83201b Christos Stavrakakis
121 0a83201b Christos Stavrakakis
    def test_delete(self, mrapi):
122 0a83201b Christos Stavrakakis
        # Test in use
123 0a83201b Christos Stavrakakis
        vol = mf.VolumeFactory()
124 0a83201b Christos Stavrakakis
        vm = mf.VirtualMachineFactory()
125 0a83201b Christos Stavrakakis
        vol.machine = vm
126 0a83201b Christos Stavrakakis
        vol.save()
127 0a83201b Christos Stavrakakis
        self.assertRaises(faults.BadRequest,
128 0a83201b Christos Stavrakakis
                          volumes.delete,
129 0a83201b Christos Stavrakakis
                          vol)
130 0a83201b Christos Stavrakakis
        self.assertFalse(vol.deleted)
131 0a83201b Christos Stavrakakis
132 0a83201b Christos Stavrakakis
        vol.machine = None
133 0a83201b Christos Stavrakakis
        vol.save()
134 0a83201b Christos Stavrakakis
        volumes.delete(vol)
135 0a83201b Christos Stavrakakis
        self.assertTrue(vol.deleted)