root / logic / tests.py @ fc30c430
History | View | Annotate | Download (4 kB)
1 | 09c936a7 | Vassilios Karakoidas | #
|
---|---|---|---|
2 | 09c936a7 | Vassilios Karakoidas | # Unit Tests for logic
|
3 | 09c936a7 | Vassilios Karakoidas | #
|
4 | 09c936a7 | Vassilios Karakoidas | # Provides automated tests for logic module
|
5 | 09c936a7 | Vassilios Karakoidas | #
|
6 | 09c936a7 | Vassilios Karakoidas | # Copyright 2010 Greek Research and Technology Network
|
7 | 09c936a7 | Vassilios Karakoidas | #
|
8 | 92c53da1 | Vassilios Karakoidas | |
9 | 92c53da1 | Vassilios Karakoidas | from db.models import * |
10 | 92c53da1 | Vassilios Karakoidas | |
11 | 92c53da1 | Vassilios Karakoidas | from logic import credits |
12 | 92c53da1 | Vassilios Karakoidas | |
13 | 92c53da1 | Vassilios Karakoidas | from django.test import TestCase |
14 | 92c53da1 | Vassilios Karakoidas | |
15 | 8d97deff | Vassilios Karakoidas | class CostsTestCase(TestCase): |
16 | 8d97deff | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
17 | 8d97deff | Vassilios Karakoidas | |
18 | 8d97deff | Vassilios Karakoidas | def test_get_costs(self): |
19 | 8d97deff | Vassilios Karakoidas | """Test the Flavor cost-related methods method"""
|
20 | 8d97deff | Vassilios Karakoidas | # first an easy test, a Flavor with only one FlavorCost entry
|
21 | 8d97deff | Vassilios Karakoidas | flavor = Flavor.objects.get(pk=30001)
|
22 | 8d97deff | Vassilios Karakoidas | |
23 | 8d97deff | Vassilios Karakoidas | start_date = datetime.datetime(year=2010, month=1, day=1) |
24 | 8d97deff | Vassilios Karakoidas | end_date = datetime.datetime(year=2010, month=1, day=2) |
25 | 8d97deff | Vassilios Karakoidas | |
26 | 8d97deff | Vassilios Karakoidas | # we now that the cost should be 5*24 (inactive) and 10*24 (active)
|
27 | 8d97deff | Vassilios Karakoidas | r_active = credits.get_cost_active(flavor, start_date, end_date) |
28 | 8d97deff | Vassilios Karakoidas | r_inactive = credits.get_cost_inactive(flavor, start_date, end_date) |
29 | 8d97deff | Vassilios Karakoidas | |
30 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_active), 1, 'get_cost_active() should have returned 1 entry (%d)' %(len(r_active),)) |
31 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_inactive), 1, 'get_cost_inactive() should have returned 1 entry (%d)'% (len(r_inactive),)) |
32 | 8d97deff | Vassilios Karakoidas | |
33 | 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)) |
34 | 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)) |
35 | 8d97deff | Vassilios Karakoidas | |
36 | 8d97deff | Vassilios Karakoidas | # The second test, will involve a more complex cost example
|
37 | 8d97deff | Vassilios Karakoidas | # The overall cost will be calculated by two FlavorCost entries
|
38 | 8d97deff | Vassilios Karakoidas | |
39 | 8d97deff | Vassilios Karakoidas | flavor = Flavor.objects.get(pk=30000)
|
40 | 8d97deff | Vassilios Karakoidas | |
41 | 8d97deff | Vassilios Karakoidas | start_date = datetime.datetime(year=2010, month=12, day=31) |
42 | 8d97deff | Vassilios Karakoidas | end_date = datetime.datetime(year=2011, month=01, day=2) |
43 | 8d97deff | Vassilios Karakoidas | |
44 | 8d97deff | Vassilios Karakoidas | # this is more complicated, active costs are 5*24 + 10*24 = 360
|
45 | 8d97deff | Vassilios Karakoidas | # and inactive costs are 2*24 + 5*24 = 168
|
46 | 8d97deff | Vassilios Karakoidas | |
47 | 8d97deff | Vassilios Karakoidas | r_active = credits.get_cost_active(flavor, start_date, end_date) |
48 | 8d97deff | Vassilios Karakoidas | r_inactive = credits.get_cost_inactive(flavor, start_date, end_date) |
49 | 8d97deff | Vassilios Karakoidas | |
50 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_active), 2, 'get_cost_active() should have returned 2 entries (%d)' %(len(r_active),)) |
51 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(r_inactive), 2, 'get_cost_inactive() should have returned 2 entries (%d)'% (len(r_inactive),)) |
52 | 8d97deff | Vassilios Karakoidas | |
53 | 8d97deff | Vassilios Karakoidas | ta_cost = sum([x[1] for x in r_active]) |
54 | 8d97deff | Vassilios Karakoidas | tia_cost = sum([x[1] for x in r_inactive]) |
55 | 8d97deff | Vassilios Karakoidas | |
56 | 8d97deff | Vassilios Karakoidas | self.assertEqual(360, ta_cost, 'get_cost_active() is not working properly (%d!=%d)' % (ta_cost, 360)) |
57 | 8d97deff | Vassilios Karakoidas | self.assertEqual(168, tia_cost, 'get_cost_inactive() is not working properly (%d!=%d)' % (tia_cost, 168)) |
58 | 92c53da1 | Vassilios Karakoidas | |
59 | 8d97deff | Vassilios Karakoidas | |
60 | 92c53da1 | Vassilios Karakoidas | class ChargeTestCase(TestCase): |
61 | 92c53da1 | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
62 | 92c53da1 | Vassilios Karakoidas | |
63 | 92c53da1 | Vassilios Karakoidas | def test_charge_method(self): |
64 | 92c53da1 | Vassilios Karakoidas | """Test VirtualMachine.charge() method"""
|
65 | 92c53da1 | Vassilios Karakoidas | |
66 | 92c53da1 | Vassilios Karakoidas | # Since we have tested the costs, with this test
|
67 | 92c53da1 | Vassilios Karakoidas | # we must ensure the following:
|
68 | 92c53da1 | Vassilios Karakoidas | # 1. The vm.charged is updated
|
69 | 92c53da1 | Vassilios Karakoidas | # 2. Users credits are decreased
|
70 | 92c53da1 | Vassilios Karakoidas | |
71 | 92c53da1 | Vassilios Karakoidas | vm_started = VirtualMachine.objects.get(pk=30000)
|
72 | 92c53da1 | Vassilios Karakoidas | |
73 | 92c53da1 | Vassilios Karakoidas | initial_date = vm_started.charged |
74 | 92c53da1 | Vassilios Karakoidas | initial_credits = vm_started.owner.credit |
75 | 92c53da1 | Vassilios Karakoidas | |
76 | 92c53da1 | Vassilios Karakoidas | credits.charge(vm_started) |
77 | 92c53da1 | Vassilios Karakoidas | |
78 | 92c53da1 | Vassilios Karakoidas | self.assertTrue(vm_started.charged > initial_date, 'Initial charged date should not be greater') |
79 | 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)) |
80 | 92c53da1 | Vassilios Karakoidas | |
81 | 92c53da1 | Vassilios Karakoidas | |
82 | 8d97deff | Vassilios Karakoidas | class DebitAccountTestCase(TestCase): |
83 | 92c53da1 | Vassilios Karakoidas | fixtures = [ 'db_test_data' ]
|
84 | 92c53da1 | Vassilios Karakoidas | |
85 | 8d97deff | Vassilios Karakoidas | def test_debit_account(self): |
86 | 92c53da1 | Vassilios Karakoidas | """Test a SynnefoUser object"""
|
87 | 92c53da1 | Vassilios Karakoidas | s_user = SynnefoUser.objects.get(pk=30000)
|
88 | 92c53da1 | Vassilios Karakoidas | v_machine = VirtualMachine.objects.get(pk=30000)
|
89 | 92c53da1 | Vassilios Karakoidas | |
90 | 92c53da1 | Vassilios Karakoidas | # charge the user
|
91 | 92c53da1 | Vassilios Karakoidas | credits.debit_account(s_user, 10, v_machine, "This should be a structured debit message!") |
92 | 92c53da1 | Vassilios Karakoidas | |
93 | 92c53da1 | Vassilios Karakoidas | # should have only one debit object
|
94 | 92c53da1 | Vassilios Karakoidas | d_list = Debit.objects.all() |
95 | 92c53da1 | Vassilios Karakoidas | |
96 | 8d97deff | Vassilios Karakoidas | self.assertEqual(len(d_list), 1, 'debit_account() writes more than one or zero (%d) debit entries!' % ( len(d_list), )) |
97 | 92c53da1 | Vassilios Karakoidas | |
98 | 92c53da1 | Vassilios Karakoidas | # retrieve the user, now he/she should have zero credits
|
99 | 92c53da1 | Vassilios Karakoidas | s_user = SynnefoUser.objects.get(pk=30000)
|
100 | 92c53da1 | Vassilios Karakoidas | |
101 | 92c53da1 | Vassilios Karakoidas | self.assertEqual(0, s_user.credit, 'SynnefoUser (pk=30000) should have zero credits (%d)' % ( s_user.credit, )) |