root / logic / tests.py @ 35079ab2
History | View | Annotate | Download (6.5 kB)
1 | b8033991 | Georgios Gousios | # vim: set fileencoding=utf-8 :
|
---|---|---|---|
2 | 09c936a7 | Vassilios Karakoidas | #
|
3 | 09c936a7 | Vassilios Karakoidas | # Unit Tests for logic
|
4 | 09c936a7 | Vassilios Karakoidas | #
|
5 | 09c936a7 | Vassilios Karakoidas | # Provides automated tests for logic module
|
6 | 09c936a7 | Vassilios Karakoidas | #
|
7 | 09c936a7 | Vassilios Karakoidas | # Copyright 2010 Greek Research and Technology Network
|
8 | 09c936a7 | Vassilios Karakoidas | #
|
9 | 92c53da1 | Vassilios Karakoidas | |
10 | 420f2c20 | Georgios Gousios | from synnefo.db.models import * |
11 | 03805fc8 | Vangelis Koukis | from synnefo.logic import backend |
12 | 420f2c20 | Georgios Gousios | from synnefo.logic import credits |
13 | 420f2c20 | Georgios Gousios | from synnefo.logic import users |
14 | 92c53da1 | Vassilios Karakoidas | from django.test import TestCase |
15 | 8af3b61f | Georgios Gousios | import time |
16 | 44193110 | Georgios Gousios | |
17 | 44193110 | Georgios Gousios | import hashlib |
18 | 92c53da1 | Vassilios Karakoidas | |
19 | 8d97deff | Vassilios Karakoidas | class CostsTestCase(TestCase): |
20 | 8d97deff | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
21 | 8d97deff | Vassilios Karakoidas | |
22 | 8d97deff | Vassilios Karakoidas | def test_get_costs(self): |
23 | 8d97deff | Vassilios Karakoidas | """Test the Flavor cost-related methods method"""
|
24 | 8d97deff | Vassilios Karakoidas | # first an easy test, a Flavor with only one FlavorCost entry
|
25 | 8d97deff | Vassilios Karakoidas | flavor = Flavor.objects.get(pk=30001)
|
26 | 8d97deff | Vassilios Karakoidas | |
27 | 8d97deff | Vassilios Karakoidas | start_date = datetime.datetime(year=2010, month=1, day=1) |
28 | 8d97deff | Vassilios Karakoidas | end_date = datetime.datetime(year=2010, month=1, day=2) |
29 | 8d97deff | Vassilios Karakoidas | |
30 | 8d97deff | Vassilios Karakoidas | # we now that the cost should be 5*24 (inactive) and 10*24 (active)
|
31 | 8d97deff | Vassilios Karakoidas | r_active = credits.get_cost_active(flavor, start_date, end_date) |
32 | 8d97deff | Vassilios Karakoidas | r_inactive = credits.get_cost_inactive(flavor, start_date, end_date) |
33 | 8d97deff | Vassilios Karakoidas | |
34 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_active), 1, 'get_cost_active() should have returned 1 entry (%d)' %(len(r_active),)) |
35 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_inactive), 1, 'get_cost_inactive() should have returned 1 entry (%d)'% (len(r_inactive),)) |
36 | 8d97deff | Vassilios Karakoidas | |
37 | 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)) |
38 | 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)) |
39 | 8d97deff | Vassilios Karakoidas | |
40 | 8d97deff | Vassilios Karakoidas | # The second test, will involve a more complex cost example
|
41 | 8d97deff | Vassilios Karakoidas | # The overall cost will be calculated by two FlavorCost entries
|
42 | 8d97deff | Vassilios Karakoidas | |
43 | 8d97deff | Vassilios Karakoidas | flavor = Flavor.objects.get(pk=30000)
|
44 | 8d97deff | Vassilios Karakoidas | |
45 | 8d97deff | Vassilios Karakoidas | start_date = datetime.datetime(year=2010, month=12, day=31) |
46 | 8d97deff | Vassilios Karakoidas | end_date = datetime.datetime(year=2011, month=01, day=2) |
47 | 8d97deff | Vassilios Karakoidas | |
48 | 8d97deff | Vassilios Karakoidas | # this is more complicated, active costs are 5*24 + 10*24 = 360
|
49 | 8d97deff | Vassilios Karakoidas | # and inactive costs are 2*24 + 5*24 = 168
|
50 | 8d97deff | Vassilios Karakoidas | |
51 | 8d97deff | Vassilios Karakoidas | r_active = credits.get_cost_active(flavor, start_date, end_date) |
52 | 8d97deff | Vassilios Karakoidas | r_inactive = credits.get_cost_inactive(flavor, start_date, end_date) |
53 | 8d97deff | Vassilios Karakoidas | |
54 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_active), 2, 'get_cost_active() should have returned 2 entries (%d)' %(len(r_active),)) |
55 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_inactive), 2, 'get_cost_inactive() should have returned 2 entries (%d)'% (len(r_inactive),)) |
56 | 8d97deff | Vassilios Karakoidas | |
57 | 8d97deff | Vassilios Karakoidas | ta_cost = sum([x[1] for x in r_active]) |
58 | 8d97deff | Vassilios Karakoidas | tia_cost = sum([x[1] for x in r_inactive]) |
59 | 8d97deff | Vassilios Karakoidas | |
60 | 8d97deff | Vassilios Karakoidas | self.assertEqual(360, ta_cost, 'get_cost_active() is not working properly (%d!=%d)' % (ta_cost, 360)) |
61 | 8d97deff | Vassilios Karakoidas | self.assertEqual(168, tia_cost, 'get_cost_inactive() is not working properly (%d!=%d)' % (tia_cost, 168)) |
62 | 92c53da1 | Vassilios Karakoidas | |
63 | 8d97deff | Vassilios Karakoidas | |
64 | 92c53da1 | Vassilios Karakoidas | class ChargeTestCase(TestCase): |
65 | 92c53da1 | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
66 | 92c53da1 | Vassilios Karakoidas | |
67 | 92c53da1 | Vassilios Karakoidas | def test_charge_method(self): |
68 | 92c53da1 | Vassilios Karakoidas | """Test VirtualMachine.charge() method"""
|
69 | 92c53da1 | Vassilios Karakoidas | |
70 | 92c53da1 | Vassilios Karakoidas | # Since we have tested the costs, with this test
|
71 | 92c53da1 | Vassilios Karakoidas | # we must ensure the following:
|
72 | 92c53da1 | Vassilios Karakoidas | # 1. The vm.charged is updated
|
73 | 92c53da1 | Vassilios Karakoidas | # 2. Users credits are decreased
|
74 | 92c53da1 | Vassilios Karakoidas | |
75 | 92c53da1 | Vassilios Karakoidas | vm_started = VirtualMachine.objects.get(pk=30000)
|
76 | 92c53da1 | Vassilios Karakoidas | |
77 | 92c53da1 | Vassilios Karakoidas | initial_date = vm_started.charged |
78 | 92c53da1 | Vassilios Karakoidas | initial_credits = vm_started.owner.credit |
79 | 92c53da1 | Vassilios Karakoidas | |
80 | 92c53da1 | Vassilios Karakoidas | credits.charge(vm_started) |
81 | 92c53da1 | Vassilios Karakoidas | |
82 | 92c53da1 | Vassilios Karakoidas | self.assertTrue(vm_started.charged > initial_date, 'Initial charged date should not be greater') |
83 | 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)) |
84 | 92c53da1 | Vassilios Karakoidas | |
85 | 92c53da1 | Vassilios Karakoidas | |
86 | 8d97deff | Vassilios Karakoidas | class DebitAccountTestCase(TestCase): |
87 | 92c53da1 | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
88 | 92c53da1 | Vassilios Karakoidas | |
89 | 8d97deff | Vassilios Karakoidas | def test_debit_account(self): |
90 | 92c53da1 | Vassilios Karakoidas | """Test a SynnefoUser object"""
|
91 | 92c53da1 | Vassilios Karakoidas | s_user = SynnefoUser.objects.get(pk=30000)
|
92 | 92c53da1 | Vassilios Karakoidas | v_machine = VirtualMachine.objects.get(pk=30000)
|
93 | 92c53da1 | Vassilios Karakoidas | |
94 | 92c53da1 | Vassilios Karakoidas | # charge the user
|
95 | 92c53da1 | Vassilios Karakoidas | credits.debit_account(s_user, 10, v_machine, "This should be a structured debit message!") |
96 | 92c53da1 | Vassilios Karakoidas | |
97 | 92c53da1 | Vassilios Karakoidas | # should have only one debit object
|
98 | 92c53da1 | Vassilios Karakoidas | d_list = Debit.objects.all() |
99 | 92c53da1 | Vassilios Karakoidas | |
100 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(d_list), 1, 'debit_account() writes more than one or zero (%d) debit entries!' % ( len(d_list), )) |
101 | 92c53da1 | Vassilios Karakoidas | |
102 | 92c53da1 | Vassilios Karakoidas | # retrieve the user, now he/she should have zero credits
|
103 | 92c53da1 | Vassilios Karakoidas | s_user = SynnefoUser.objects.get(pk=30000)
|
104 | 92c53da1 | Vassilios Karakoidas | |
105 | 92c53da1 | Vassilios Karakoidas | self.assertEqual(0, s_user.credit, 'SynnefoUser (pk=30000) should have zero credits (%d)' % ( s_user.credit, )) |
106 | 420f2c20 | Georgios Gousios | |
107 | 420f2c20 | Georgios Gousios | class AuthTestCase(TestCase): |
108 | 420f2c20 | Georgios Gousios | fixtures = [ 'db_test_data' ]
|
109 | 44193110 | Georgios Gousios | |
110 | 44193110 | Georgios Gousios | def _register_user(self): |
111 | 420f2c20 | Georgios Gousios | users.register_student ("Jimmy Page", "jpage", "jpage@zoso.com") |
112 | 938e89ab | Georgios Gousios | self.user = SynnefoUser.objects.get(name = "jpage") |
113 | 44193110 | Georgios Gousios | |
114 | 44193110 | Georgios Gousios | def test_register(self): |
115 | 44193110 | Georgios Gousios | """ test user registration
|
116 | 44193110 | Georgios Gousios | """
|
117 | 938e89ab | Georgios Gousios | self._register_user()
|
118 | 938e89ab | Georgios Gousios | self.assertNotEquals(self.user, None) |
119 | dd53338a | Georgios Gousios | |
120 | 44193110 | Georgios Gousios | #Check hash generation
|
121 | 44193110 | Georgios Gousios | md5 = hashlib.md5() |
122 | 938e89ab | Georgios Gousios | md5.update(self.user.uniq)
|
123 | 938e89ab | Georgios Gousios | md5.update(self.user.name)
|
124 | 8af3b61f | Georgios Gousios | md5.update(time.asctime()) |
125 | 44193110 | Georgios Gousios | |
126 | 8af3b61f | Georgios Gousios | self.assertEquals(self.user.auth_token, md5.hexdigest()) |
127 | 44193110 | Georgios Gousios | |
128 | 44193110 | Georgios Gousios | def test_del_user(self): |
129 | 44193110 | Georgios Gousios | """ test user deletion
|
130 | 44193110 | Georgios Gousios | """
|
131 | 8af3b61f | Georgios Gousios | self._register_user()
|
132 | 8af3b61f | Georgios Gousios | self.assertNotEquals(self.user, None) |
133 | 8af3b61f | Georgios Gousios | |
134 | 8af3b61f | Georgios Gousios | users.delete_user(self.user)
|
135 | 44193110 | Georgios Gousios | |
136 | dd53338a | Georgios Gousios | self.assertRaises(SynnefoUser.DoesNotExist, SynnefoUser.objects.get, name = "jpage") |
137 | 03805fc8 | Vangelis Koukis | |
138 | 03805fc8 | Vangelis Koukis | |
139 | 03805fc8 | Vangelis Koukis | class ProcessNetStatusTestCase(TestCase): |
140 | 03805fc8 | Vangelis Koukis | fixtures = ['db_test_data']
|
141 | 03805fc8 | Vangelis Koukis | def test_set_ipv4(self): |
142 | 03805fc8 | Vangelis Koukis | """Test reception of a net status notification"""
|
143 | 03805fc8 | Vangelis Koukis | msg = {'instance': 'instance-name', |
144 | 03805fc8 | Vangelis Koukis | 'type': 'ganeti-net-status', |
145 | 03805fc8 | Vangelis Koukis | 'nics': [
|
146 | 03805fc8 | Vangelis Koukis | {'ip': '192.168.33.1', 'mac': 'aa:00:00:58:1e:b9'} |
147 | 03805fc8 | Vangelis Koukis | ] |
148 | 03805fc8 | Vangelis Koukis | } |
149 | 03805fc8 | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30000)
|
150 | 03805fc8 | Vangelis Koukis | backend.process_net_status(vm, msg['nics'])
|
151 | 03805fc8 | Vangelis Koukis | self.assertEquals(vm.ipfour, '192.168.33.1') |
152 | 03805fc8 | Vangelis Koukis | |
153 | 03805fc8 | Vangelis Koukis | def test_set_empty_ipv4(self): |
154 | 03805fc8 | Vangelis Koukis | """Test reception of a net status notification with no IPv4 assigned"""
|
155 | 03805fc8 | Vangelis Koukis | msg = {'instance': 'instance-name', |
156 | 03805fc8 | Vangelis Koukis | 'type': 'ganeti-net-status', |
157 | 03805fc8 | Vangelis Koukis | 'nics': [
|
158 | 03805fc8 | Vangelis Koukis | {'ip': '', 'mac': 'aa:00:00:58:1e:b9'} |
159 | 03805fc8 | Vangelis Koukis | ] |
160 | 03805fc8 | Vangelis Koukis | } |
161 | 03805fc8 | Vangelis Koukis | vm = VirtualMachine.objects.get(pk=30000)
|
162 | 03805fc8 | Vangelis Koukis | backend.process_net_status(vm, msg['nics'])
|
163 | 03805fc8 | Vangelis Koukis | self.assertEquals(vm.ipfour, '0.0.0.0') |
164 | ec63ae8a | Georgios Gousios | |
165 | ec63ae8a | Georgios Gousios | |
166 | b8033991 | Georgios Gousios | class UsersTestCase(TestCase): |
167 | b8033991 | Georgios Gousios | |
168 | b8033991 | Georgios Gousios | def test_create_uname(self): |
169 | b8033991 | Georgios Gousios | username = users.create_uname("Donald Knuth")
|
170 | b8033991 | Georgios Gousios | self.assertEquals(username, "knuthd") |
171 | b8033991 | Georgios Gousios | |
172 | b8033991 | Georgios Gousios | username = users.create_uname("Nemichandra Siddhanta Chakravati")
|
173 | b8033991 | Georgios Gousios | self.assertEquals(username, "chakravn") |
174 | b8033991 | Georgios Gousios | |
175 | b8033991 | Georgios Gousios | username = users.create_uname(u'Γεώργιος Παπαγεωργίου')
|
176 | b8033991 | Georgios Gousios | self.assertEquals(username, u'παπαγεωγ') |