root / snf-cyclades-app / synnefo / volume / tests / volumes.py @ 19b2c29d
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) |