root / logic / tests.py @ 95aee02c
History | View | Annotate | Download (12.5 kB)
1 | b8033991 | Georgios Gousios | # vim: set fileencoding=utf-8 :
|
---|---|---|---|
2 | 48130e66 | Georgios Gousios | # Copyright 2011 GRNET S.A. All rights reserved.
|
3 | 09c936a7 | Vassilios Karakoidas | #
|
4 | 48130e66 | Georgios Gousios | # Redistribution and use in source and binary forms, with or without
|
5 | 48130e66 | Georgios Gousios | # modification, are permitted provided that the following conditions
|
6 | 48130e66 | Georgios Gousios | # are met:
|
7 | 09c936a7 | Vassilios Karakoidas | #
|
8 | 48130e66 | Georgios Gousios | # 1. Redistributions of source code must retain the above copyright
|
9 | 48130e66 | Georgios Gousios | # notice, this list of conditions and the following disclaimer.
|
10 | 48130e66 | Georgios Gousios | #
|
11 | 48130e66 | Georgios Gousios | # 2. Redistributions in binary form must reproduce the above copyright
|
12 | 48130e66 | Georgios Gousios | # notice, this list of conditions and the following disclaimer in the
|
13 | 48130e66 | Georgios Gousios | # documentation and/or other materials provided with the distribution.
|
14 | 09c936a7 | Vassilios Karakoidas | #
|
15 | 48130e66 | Georgios Gousios | # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
16 | 48130e66 | Georgios Gousios | # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
17 | 48130e66 | Georgios Gousios | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
18 | 48130e66 | Georgios Gousios | # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
19 | 48130e66 | Georgios Gousios | # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
20 | 48130e66 | Georgios Gousios | # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
21 | 48130e66 | Georgios Gousios | # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
22 | 48130e66 | Georgios Gousios | # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
23 | 48130e66 | Georgios Gousios | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
24 | 48130e66 | Georgios Gousios | # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
25 | 48130e66 | Georgios Gousios | # SUCH DAMAGE.
|
26 | 09c936a7 | Vassilios Karakoidas | #
|
27 | 48130e66 | Georgios Gousios | # The views and conclusions contained in the software and documentation are
|
28 | 48130e66 | Georgios Gousios | # those of the authors and should not be interpreted as representing official
|
29 | 48130e66 | Georgios Gousios | # policies, either expressed or implied, of GRNET S.A.
|
30 | 48130e66 | Georgios Gousios | |
31 | 48130e66 | Georgios Gousios | # Provides automated tests for logic module
|
32 | 92c53da1 | Vassilios Karakoidas | |
33 | 420f2c20 | Georgios Gousios | from synnefo.db.models import * |
34 | 03805fc8 | Vangelis Koukis | from synnefo.logic import backend |
35 | 420f2c20 | Georgios Gousios | from synnefo.logic import credits |
36 | 420f2c20 | Georgios Gousios | from synnefo.logic import users |
37 | 95aee02c | Vangelis Koukis | from synnefo.logic.utils import get_rsapi_state |
38 | 95aee02c | Vangelis Koukis | |
39 | 92c53da1 | Vassilios Karakoidas | from django.test import TestCase |
40 | 95aee02c | Vangelis Koukis | from django.conf import settings |
41 | 44193110 | Georgios Gousios | |
42 | 95aee02c | Vangelis Koukis | import time |
43 | 44193110 | Georgios Gousios | import hashlib |
44 | 92c53da1 | Vassilios Karakoidas | |
45 | 8d97deff | Vassilios Karakoidas | class CostsTestCase(TestCase): |
46 | 8d97deff | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
47 | 8d97deff | Vassilios Karakoidas | |
48 | 8d97deff | Vassilios Karakoidas | def test_get_costs(self): |
49 | 8d97deff | Vassilios Karakoidas | """Test the Flavor cost-related methods method"""
|
50 | 8d97deff | Vassilios Karakoidas | # first an easy test, a Flavor with only one FlavorCost entry
|
51 | 8d97deff | Vassilios Karakoidas | flavor = Flavor.objects.get(pk=30001)
|
52 | 8d97deff | Vassilios Karakoidas | |
53 | 8d97deff | Vassilios Karakoidas | start_date = datetime.datetime(year=2010, month=1, day=1) |
54 | 8d97deff | Vassilios Karakoidas | end_date = datetime.datetime(year=2010, month=1, day=2) |
55 | 8d97deff | Vassilios Karakoidas | |
56 | 8d97deff | Vassilios Karakoidas | # we now that the cost should be 5*24 (inactive) and 10*24 (active)
|
57 | 8d97deff | Vassilios Karakoidas | r_active = credits.get_cost_active(flavor, start_date, end_date) |
58 | 8d97deff | Vassilios Karakoidas | r_inactive = credits.get_cost_inactive(flavor, start_date, end_date) |
59 | 8d97deff | Vassilios Karakoidas | |
60 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_active), 1, 'get_cost_active() should have returned 1 entry (%d)' %(len(r_active),)) |
61 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_inactive), 1, 'get_cost_inactive() should have returned 1 entry (%d)'% (len(r_inactive),)) |
62 | 8d97deff | Vassilios Karakoidas | |
63 | 8d97deff | Vassilios Karakoidas | self.assertEqual(10*24, r_active[0][1], 'get_cost_active() is not working properly (%d!=%d)' % (r_active[0][1], 10*24)) |
64 | 8d97deff | Vassilios Karakoidas | self.assertEqual(5*24, r_inactive[0][1], 'get_cost_inactive() is not working properly (%d!=%d)' % (r_inactive[0][1], 5*24)) |
65 | 8d97deff | Vassilios Karakoidas | |
66 | 8d97deff | Vassilios Karakoidas | # The second test, will involve a more complex cost example
|
67 | 8d97deff | Vassilios Karakoidas | # The overall cost will be calculated by two FlavorCost entries
|
68 | 8d97deff | Vassilios Karakoidas | |
69 | 8d97deff | Vassilios Karakoidas | flavor = Flavor.objects.get(pk=30000)
|
70 | 8d97deff | Vassilios Karakoidas | |
71 | 8d97deff | Vassilios Karakoidas | start_date = datetime.datetime(year=2010, month=12, day=31) |
72 | 8d97deff | Vassilios Karakoidas | end_date = datetime.datetime(year=2011, month=01, day=2) |
73 | 8d97deff | Vassilios Karakoidas | |
74 | 8d97deff | Vassilios Karakoidas | # this is more complicated, active costs are 5*24 + 10*24 = 360
|
75 | 8d97deff | Vassilios Karakoidas | # and inactive costs are 2*24 + 5*24 = 168
|
76 | 8d97deff | Vassilios Karakoidas | |
77 | 8d97deff | Vassilios Karakoidas | r_active = credits.get_cost_active(flavor, start_date, end_date) |
78 | 8d97deff | Vassilios Karakoidas | r_inactive = credits.get_cost_inactive(flavor, start_date, end_date) |
79 | 8d97deff | Vassilios Karakoidas | |
80 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_active), 2, 'get_cost_active() should have returned 2 entries (%d)' %(len(r_active),)) |
81 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_inactive), 2, 'get_cost_inactive() should have returned 2 entries (%d)'% (len(r_inactive),)) |
82 | 8d97deff | Vassilios Karakoidas | |
83 | 8d97deff | Vassilios Karakoidas | ta_cost = sum([x[1] for x in r_active]) |
84 | 8d97deff | Vassilios Karakoidas | tia_cost = sum([x[1] for x in r_inactive]) |
85 | 8d97deff | Vassilios Karakoidas | |
86 | 8d97deff | Vassilios Karakoidas | self.assertEqual(360, ta_cost, 'get_cost_active() is not working properly (%d!=%d)' % (ta_cost, 360)) |
87 | 8d97deff | Vassilios Karakoidas | self.assertEqual(168, tia_cost, 'get_cost_inactive() is not working properly (%d!=%d)' % (tia_cost, 168)) |
88 | 92c53da1 | Vassilios Karakoidas | |
89 | 8d97deff | Vassilios Karakoidas | |
90 | 92c53da1 | Vassilios Karakoidas | class ChargeTestCase(TestCase): |
91 | 92c53da1 | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
92 | 92c53da1 | Vassilios Karakoidas | |
93 | 92c53da1 | Vassilios Karakoidas | def test_charge_method(self): |
94 | 92c53da1 | Vassilios Karakoidas | """Test VirtualMachine.charge() method"""
|
95 | 92c53da1 | Vassilios Karakoidas | |
96 | 92c53da1 | Vassilios Karakoidas | # Since we have tested the costs, with this test
|
97 | 92c53da1 | Vassilios Karakoidas | # we must ensure the following:
|
98 | 92c53da1 | Vassilios Karakoidas | # 1. The vm.charged is updated
|
99 | 92c53da1 | Vassilios Karakoidas | # 2. Users credits are decreased
|
100 | 92c53da1 | Vassilios Karakoidas | |
101 | 92c53da1 | Vassilios Karakoidas | vm_started = VirtualMachine.objects.get(pk=30000)
|
102 | 92c53da1 | Vassilios Karakoidas | |
103 | 92c53da1 | Vassilios Karakoidas | initial_date = vm_started.charged |
104 | 92c53da1 | Vassilios Karakoidas | initial_credits = vm_started.owner.credit |
105 | 92c53da1 | Vassilios Karakoidas | |
106 | 92c53da1 | Vassilios Karakoidas | credits.charge(vm_started) |
107 | 92c53da1 | Vassilios Karakoidas | |
108 | 92c53da1 | Vassilios Karakoidas | self.assertTrue(vm_started.charged > initial_date, 'Initial charged date should not be greater') |
109 | 92c53da1 | Vassilios Karakoidas | self.assertTrue(initial_credits > vm_started.owner.credit, 'The user should have less credits now! (%d>%d)' % (initial_credits, vm_started.owner.credit)) |
110 | 92c53da1 | Vassilios Karakoidas | |
111 | 92c53da1 | Vassilios Karakoidas | |
112 | 8d97deff | Vassilios Karakoidas | class DebitAccountTestCase(TestCase): |
113 | 92c53da1 | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
114 | 92c53da1 | Vassilios Karakoidas | |
115 | 8d97deff | Vassilios Karakoidas | def test_debit_account(self): |
116 | 92c53da1 | Vassilios Karakoidas | """Test a SynnefoUser object"""
|
117 | 92c53da1 | Vassilios Karakoidas | s_user = SynnefoUser.objects.get(pk=30000)
|
118 | 92c53da1 | Vassilios Karakoidas | v_machine = VirtualMachine.objects.get(pk=30000)
|
119 | 92c53da1 | Vassilios Karakoidas | |
120 | 92c53da1 | Vassilios Karakoidas | # charge the user
|
121 | 92c53da1 | Vassilios Karakoidas | credits.debit_account(s_user, 10, v_machine, "This should be a structured debit message!") |
122 | 92c53da1 | Vassilios Karakoidas | |
123 | 92c53da1 | Vassilios Karakoidas | # should have only one debit object
|
124 | 92c53da1 | Vassilios Karakoidas | d_list = Debit.objects.all() |
125 | 92c53da1 | Vassilios Karakoidas | |
126 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(d_list), 1, 'debit_account() writes more than one or zero (%d) debit entries!' % ( len(d_list), )) |
127 | 92c53da1 | Vassilios Karakoidas | |
128 | 92c53da1 | Vassilios Karakoidas | # retrieve the user, now he/she should have zero credits
|
129 | 92c53da1 | Vassilios Karakoidas | s_user = SynnefoUser.objects.get(pk=30000)
|
130 | 92c53da1 | Vassilios Karakoidas | |
131 | 92c53da1 | Vassilios Karakoidas | self.assertEqual(0, s_user.credit, 'SynnefoUser (pk=30000) should have zero credits (%d)' % ( s_user.credit, )) |
132 | 420f2c20 | Georgios Gousios | |
133 | 95aee02c | Vangelis Koukis | |
134 | 420f2c20 | Georgios Gousios | class AuthTestCase(TestCase): |
135 | 420f2c20 | Georgios Gousios | fixtures = [ 'db_test_data' ]
|
136 | 44193110 | Georgios Gousios | |
137 | 44193110 | Georgios Gousios | def _register_user(self): |
138 | 420f2c20 | Georgios Gousios | users.register_student ("Jimmy Page", "jpage", "jpage@zoso.com") |
139 | 938e89ab | Georgios Gousios | self.user = SynnefoUser.objects.get(name = "jpage") |
140 | 44193110 | Georgios Gousios | |
141 | 44193110 | Georgios Gousios | def test_register(self): |
142 | 44193110 | Georgios Gousios | """ test user registration
|
143 | 44193110 | Georgios Gousios | """
|
144 | 938e89ab | Georgios Gousios | self._register_user()
|
145 | 938e89ab | Georgios Gousios | self.assertNotEquals(self.user, None) |
146 | dd53338a | Georgios Gousios | |
147 | 44193110 | Georgios Gousios | #Check hash generation
|
148 | 44193110 | Georgios Gousios | md5 = hashlib.md5() |
149 | 938e89ab | Georgios Gousios | md5.update(self.user.uniq)
|
150 | 938e89ab | Georgios Gousios | md5.update(self.user.name)
|
151 | 8af3b61f | Georgios Gousios | md5.update(time.asctime()) |
152 | 44193110 | Georgios Gousios | |
153 | 8af3b61f | Georgios Gousios | self.assertEquals(self.user.auth_token, md5.hexdigest()) |
154 | 44193110 | Georgios Gousios | |
155 | 44193110 | Georgios Gousios | def test_del_user(self): |
156 | 44193110 | Georgios Gousios | """ test user deletion
|
157 | 44193110 | Georgios Gousios | """
|
158 | 8af3b61f | Georgios Gousios | self._register_user()
|
159 | 8af3b61f | Georgios Gousios | self.assertNotEquals(self.user, None) |
160 | 8af3b61f | Georgios Gousios | |
161 | 8af3b61f | Georgios Gousios | users.delete_user(self.user)
|
162 | 44193110 | Georgios Gousios | |
163 | 95aee02c | Vangelis Koukis | self.assertRaises(SynnefoUser.DoesNotExist, SynnefoUser.objects.get,
|
164 | 95aee02c | Vangelis Koukis | name = "jpage")
|
165 | 95aee02c | Vangelis Koukis | |
166 | 95aee02c | Vangelis Koukis | |
167 | 95aee02c | Vangelis Koukis | class ProcessOpStatusTestCase(TestCase): |
168 | 95aee02c | Vangelis Koukis | fixtures = ['db_test_data']
|
169 | 95aee02c | Vangelis Koukis | msg_op = { |
170 | 95aee02c | Vangelis Koukis | 'instance': 'instance-name', |
171 | 95aee02c | Vangelis Koukis | 'type': 'ganeti-op-status', |
172 | 95aee02c | Vangelis Koukis | 'operation': 'OP_INSTANCE_STARTUP', |
173 | 95aee02c | Vangelis Koukis | 'jobId': 0, |
174 | 95aee02c | Vangelis Koukis | 'status': 'success', |
175 | 95aee02c | Vangelis Koukis | 'logmsg': 'unittest - simulated message' |
176 | 95aee02c | Vangelis Koukis | } |
177 | 95aee02c | Vangelis Koukis | |
178 | 95aee02c | Vangelis Koukis | def test_op_startup_success(self): |
179 | 95aee02c | Vangelis Koukis | """Test notification for successful OP_INSTANCE_START"""
|
180 | 95aee02c | Vangelis Koukis | msg = self.msg_op
|
181 | 95aee02c | Vangelis Koukis | msg['operation'] = 'OP_INSTANCE_STARTUP' |
182 | 95aee02c | Vangelis Koukis | msg['status'] = 'success' |
183 | 95aee02c | Vangelis Koukis | |
184 | 95aee02c | Vangelis Koukis | # This machine is initially in BUILD
|
185 | 95aee02c | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30002)
|
186 | 95aee02c | Vangelis Koukis | backend.process_op_status(vm, msg["jobId"], msg["operation"], |
187 | 95aee02c | Vangelis Koukis | msg["status"], msg["logmsg"]) |
188 | 95aee02c | Vangelis Koukis | self.assertEquals(get_rsapi_state(vm), 'ACTIVE') |
189 | 95aee02c | Vangelis Koukis | |
190 | 95aee02c | Vangelis Koukis | def test_op_shutdown_success(self): |
191 | 95aee02c | Vangelis Koukis | """Test notification for successful OP_INSTANCE_SHUTDOWN"""
|
192 | 95aee02c | Vangelis Koukis | msg = self.msg_op
|
193 | 95aee02c | Vangelis Koukis | msg['operation'] = 'OP_INSTANCE_SHUTDOWN' |
194 | 95aee02c | Vangelis Koukis | msg['status'] = 'success' |
195 | 95aee02c | Vangelis Koukis | |
196 | 95aee02c | Vangelis Koukis | # This machine is initially in BUILD
|
197 | 95aee02c | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30002)
|
198 | 95aee02c | Vangelis Koukis | backend.process_op_status(vm, msg["jobId"], msg["operation"], |
199 | 95aee02c | Vangelis Koukis | msg["status"], msg["logmsg"]) |
200 | 95aee02c | Vangelis Koukis | self.assertEquals(get_rsapi_state(vm), 'STOPPED') |
201 | 95aee02c | Vangelis Koukis | |
202 | 95aee02c | Vangelis Koukis | def test_op_reboot_success(self): |
203 | 95aee02c | Vangelis Koukis | """Test notification for successful OP_INSTANCE_REBOOT"""
|
204 | 95aee02c | Vangelis Koukis | msg = self.msg_op
|
205 | 95aee02c | Vangelis Koukis | msg['operation'] = 'OP_INSTANCE_REBOOT' |
206 | 95aee02c | Vangelis Koukis | msg['status'] = 'success' |
207 | 95aee02c | Vangelis Koukis | |
208 | 95aee02c | Vangelis Koukis | # This machine is initially in BUILD
|
209 | 95aee02c | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30002)
|
210 | 95aee02c | Vangelis Koukis | backend.process_op_status(vm, msg["jobId"], msg["operation"], |
211 | 95aee02c | Vangelis Koukis | msg["status"], msg["logmsg"]) |
212 | 95aee02c | Vangelis Koukis | self.assertEquals(get_rsapi_state(vm), 'ACTIVE') |
213 | 95aee02c | Vangelis Koukis | |
214 | 95aee02c | Vangelis Koukis | def test_op_create_success(self): |
215 | 95aee02c | Vangelis Koukis | """Test notification for successful OP_INSTANCE_CREATE"""
|
216 | 95aee02c | Vangelis Koukis | msg = self.msg_op
|
217 | 95aee02c | Vangelis Koukis | msg['operation'] = 'OP_INSTANCE_CREATE' |
218 | 95aee02c | Vangelis Koukis | msg['status'] = 'success' |
219 | 95aee02c | Vangelis Koukis | |
220 | 95aee02c | Vangelis Koukis | # This machine is initially in BUILD
|
221 | 95aee02c | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30002)
|
222 | 95aee02c | Vangelis Koukis | backend.process_op_status(vm, msg["jobId"], msg["operation"], |
223 | 95aee02c | Vangelis Koukis | msg["status"], msg["logmsg"]) |
224 | 95aee02c | Vangelis Koukis | self.assertEquals(get_rsapi_state(vm), 'ACTIVE') |
225 | 95aee02c | Vangelis Koukis | |
226 | 95aee02c | Vangelis Koukis | def test_op_remove_success(self): |
227 | 95aee02c | Vangelis Koukis | """Test notification for successful OP_INSTANCE_REMOVE"""
|
228 | 95aee02c | Vangelis Koukis | msg = self.msg_op
|
229 | 95aee02c | Vangelis Koukis | msg['operation'] = 'OP_INSTANCE_REMOVE' |
230 | 95aee02c | Vangelis Koukis | msg['status'] = 'success' |
231 | 95aee02c | Vangelis Koukis | |
232 | 95aee02c | Vangelis Koukis | # This machine is initially in BUILD
|
233 | 95aee02c | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30002)
|
234 | 95aee02c | Vangelis Koukis | backend.process_op_status(vm, msg["jobId"], msg["operation"], |
235 | 95aee02c | Vangelis Koukis | msg["status"], msg["logmsg"]) |
236 | 95aee02c | Vangelis Koukis | self.assertEquals(get_rsapi_state(vm), 'DELETED') |
237 | 95aee02c | Vangelis Koukis | self.assertTrue(vm.deleted)
|
238 | 95aee02c | Vangelis Koukis | |
239 | 95aee02c | Vangelis Koukis | def test_unknown_op(self): |
240 | 95aee02c | Vangelis Koukis | """Test notification for unknown Ganeti op raises exception"""
|
241 | 95aee02c | Vangelis Koukis | msg = self.msg_op
|
242 | 95aee02c | Vangelis Koukis | msg['operation'] = 'OP_INSTANCE_SOMETHING_ELSE' |
243 | 95aee02c | Vangelis Koukis | msg['status'] = 'success' |
244 | 95aee02c | Vangelis Koukis | |
245 | 95aee02c | Vangelis Koukis | # This machine is initially in BUILD
|
246 | 95aee02c | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30002)
|
247 | 95aee02c | Vangelis Koukis | self.assertRaises(VirtualMachine.InvalidBackendMsgError,
|
248 | 95aee02c | Vangelis Koukis | backend.process_op_status, |
249 | 95aee02c | Vangelis Koukis | vm, msg["jobId"], msg["operation"], |
250 | 95aee02c | Vangelis Koukis | msg["status"], msg["logmsg"]) |
251 | 95aee02c | Vangelis Koukis | |
252 | 95aee02c | Vangelis Koukis | def test_op_create_error(self): |
253 | 95aee02c | Vangelis Koukis | """Test notification for failed OP_INSTANCE_CREATE"""
|
254 | 95aee02c | Vangelis Koukis | msg = self.msg_op
|
255 | 95aee02c | Vangelis Koukis | msg['operation'] = 'OP_INSTANCE_CREATE' |
256 | 95aee02c | Vangelis Koukis | msg['status'] = 'error' |
257 | 95aee02c | Vangelis Koukis | |
258 | 95aee02c | Vangelis Koukis | # This machine is initially in BUILD
|
259 | 95aee02c | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30002)
|
260 | 95aee02c | Vangelis Koukis | backend.process_op_status(vm, msg["jobId"], msg["operation"], |
261 | 95aee02c | Vangelis Koukis | msg["status"], msg["logmsg"]) |
262 | 95aee02c | Vangelis Koukis | self.assertEquals(get_rsapi_state(vm), 'ERROR') |
263 | 95aee02c | Vangelis Koukis | self.assertFalse(vm.deleted)
|
264 | 95aee02c | Vangelis Koukis | |
265 | 95aee02c | Vangelis Koukis | def test_remove_machine_in_error(self): |
266 | 95aee02c | Vangelis Koukis | """Test notification for failed OP_INSTANCE_REMOVE, server in ERROR"""
|
267 | 95aee02c | Vangelis Koukis | msg = self.msg_op
|
268 | 95aee02c | Vangelis Koukis | msg['operation'] = 'OP_INSTANCE_REMOVE' |
269 | 95aee02c | Vangelis Koukis | msg['status'] = 'error' |
270 | 95aee02c | Vangelis Koukis | |
271 | 95aee02c | Vangelis Koukis | # This machine is initially in BUILD
|
272 | 95aee02c | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30002)
|
273 | 95aee02c | Vangelis Koukis | backend.process_op_status(vm, 0, "OP_INSTANCE_CREATE", "error", "test") |
274 | 95aee02c | Vangelis Koukis | self.assertEquals(get_rsapi_state(vm), 'ERROR') |
275 | 95aee02c | Vangelis Koukis | |
276 | 95aee02c | Vangelis Koukis | backend.process_op_status(vm, msg["jobId"], msg["operation"], |
277 | 95aee02c | Vangelis Koukis | msg["status"], msg["logmsg"]) |
278 | 95aee02c | Vangelis Koukis | self.assertEquals(get_rsapi_state(vm), 'DELETED') |
279 | 95aee02c | Vangelis Koukis | self.assertTrue(vm.deleted)
|
280 | 03805fc8 | Vangelis Koukis | |
281 | 03805fc8 | Vangelis Koukis | |
282 | 03805fc8 | Vangelis Koukis | class ProcessNetStatusTestCase(TestCase): |
283 | 03805fc8 | Vangelis Koukis | fixtures = ['db_test_data']
|
284 | 03805fc8 | Vangelis Koukis | def test_set_ipv4(self): |
285 | 03805fc8 | Vangelis Koukis | """Test reception of a net status notification"""
|
286 | 03805fc8 | Vangelis Koukis | msg = {'instance': 'instance-name', |
287 | 03805fc8 | Vangelis Koukis | 'type': 'ganeti-net-status', |
288 | 03805fc8 | Vangelis Koukis | 'nics': [
|
289 | 03805fc8 | Vangelis Koukis | {'ip': '192.168.33.1', 'mac': 'aa:00:00:58:1e:b9'} |
290 | 03805fc8 | Vangelis Koukis | ] |
291 | 03805fc8 | Vangelis Koukis | } |
292 | 03805fc8 | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30000)
|
293 | 03805fc8 | Vangelis Koukis | backend.process_net_status(vm, msg['nics'])
|
294 | f533f224 | Vangelis Koukis | self.assertEquals(vm.nics.all()[0].ipv4, '192.168.33.1') |
295 | 03805fc8 | Vangelis Koukis | |
296 | 03805fc8 | Vangelis Koukis | def test_set_empty_ipv4(self): |
297 | 03805fc8 | Vangelis Koukis | """Test reception of a net status notification with no IPv4 assigned"""
|
298 | 03805fc8 | Vangelis Koukis | msg = {'instance': 'instance-name', |
299 | 03805fc8 | Vangelis Koukis | 'type': 'ganeti-net-status', |
300 | 03805fc8 | Vangelis Koukis | 'nics': [
|
301 | 03805fc8 | Vangelis Koukis | {'ip': '', 'mac': 'aa:00:00:58:1e:b9'} |
302 | 03805fc8 | Vangelis Koukis | ] |
303 | 03805fc8 | Vangelis Koukis | } |
304 | 03805fc8 | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30000)
|
305 | 03805fc8 | Vangelis Koukis | backend.process_net_status(vm, msg['nics'])
|
306 | f533f224 | Vangelis Koukis | self.assertEquals(vm.nics.all()[0].ipv4, '') |
307 | ec63ae8a | Georgios Gousios | |
308 | ec63ae8a | Georgios Gousios | |
309 | b8033991 | Georgios Gousios | class UsersTestCase(TestCase): |
310 | b8033991 | Georgios Gousios | |
311 | b8033991 | Georgios Gousios | def test_create_uname(self): |
312 | b8033991 | Georgios Gousios | username = users.create_uname("Donald Knuth")
|
313 | b8033991 | Georgios Gousios | self.assertEquals(username, "knuthd") |
314 | b8033991 | Georgios Gousios | |
315 | b8033991 | Georgios Gousios | username = users.create_uname("Nemichandra Siddhanta Chakravati")
|
316 | b8033991 | Georgios Gousios | self.assertEquals(username, "chakravn") |
317 | b8033991 | Georgios Gousios | |
318 | b8033991 | Georgios Gousios | username = users.create_uname(u'Γεώργιος Παπαγεωργίου')
|
319 | b8033991 | Georgios Gousios | self.assertEquals(username, u'παπαγεωγ') |