Statistics
| Branch: | Tag: | Revision:

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, ))