Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / quotas / tests.py @ a8333def

History | View | Annotate | Download (4.1 kB)

1 d552dddd Christos Stavrakakis
#!/usr/bin/env python
2 d552dddd Christos Stavrakakis
#
3 d552dddd Christos Stavrakakis
# -*- coding: utf-8 -*-
4 d552dddd Christos Stavrakakis
#
5 d552dddd Christos Stavrakakis
# Copyright 2013 GRNET S.A. All rights reserved.
6 d552dddd Christos Stavrakakis
#
7 d552dddd Christos Stavrakakis
# Redistribution and use in source and binary forms, with or
8 d552dddd Christos Stavrakakis
# without modification, are permitted provided that the following
9 d552dddd Christos Stavrakakis
# conditions are met:
10 d552dddd Christos Stavrakakis
#
11 d552dddd Christos Stavrakakis
#   1. Redistributions of source code must retain the above
12 d552dddd Christos Stavrakakis
#      copyright notice, this list of conditions and the following
13 d552dddd Christos Stavrakakis
#      disclaimer.
14 d552dddd Christos Stavrakakis
#
15 d552dddd Christos Stavrakakis
#   2. Redistributions in binary form must reproduce the above
16 d552dddd Christos Stavrakakis
#      copyright notice, this list of conditions and the following
17 d552dddd Christos Stavrakakis
#      disclaimer in the documentation and/or other materials
18 d552dddd Christos Stavrakakis
#      provided with the distribution.
19 d552dddd Christos Stavrakakis
#
20 d552dddd Christos Stavrakakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21 d552dddd Christos Stavrakakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 d552dddd Christos Stavrakakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 d552dddd Christos Stavrakakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24 d552dddd Christos Stavrakakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 d552dddd Christos Stavrakakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 d552dddd Christos Stavrakakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27 d552dddd Christos Stavrakakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 d552dddd Christos Stavrakakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 d552dddd Christos Stavrakakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 d552dddd Christos Stavrakakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 d552dddd Christos Stavrakakis
# POSSIBILITY OF SUCH DAMAGE.
32 d552dddd Christos Stavrakakis
#
33 d552dddd Christos Stavrakakis
# The views and conclusions contained in the software and
34 d552dddd Christos Stavrakakis
# documentation are those of the authors and should not be
35 d552dddd Christos Stavrakakis
# interpreted as representing official policies, either expressed
36 d552dddd Christos Stavrakakis
# or implied, of GRNET S.A.
37 d552dddd Christos Stavrakakis
#
38 d552dddd Christos Stavrakakis
#
39 d552dddd Christos Stavrakakis
from mock import patch
40 d552dddd Christos Stavrakakis
from django.test import TestCase
41 d552dddd Christos Stavrakakis
from synnefo.db import models_factory as mfactory
42 d552dddd Christos Stavrakakis
43 d552dddd Christos Stavrakakis
from synnefo import quotas
44 d552dddd Christos Stavrakakis
from synnefo.quotas import util
45 d552dddd Christos Stavrakakis
46 d552dddd Christos Stavrakakis
47 d552dddd Christos Stavrakakis
class GetDBHoldingsTestCase(TestCase):
48 d552dddd Christos Stavrakakis
    def test_no_holdings(self):
49 656cf771 Christos Stavrakakis
        holdings = util.get_db_holdings(user=None)
50 d552dddd Christos Stavrakakis
        self.assertEqual(holdings, {})
51 d552dddd Christos Stavrakakis
52 d552dddd Christos Stavrakakis
    def test_vm_holdings(self):
53 d552dddd Christos Stavrakakis
        flavor = mfactory.FlavorFactory(cpu=24, ram=8192, disk=20,
54 d552dddd Christos Stavrakakis
                                  disk_template='drbd')
55 d552dddd Christos Stavrakakis
        mfactory.VirtualMachineFactory()
56 d552dddd Christos Stavrakakis
        mfactory.VirtualMachineFactory(flavor=flavor, userid="user1")
57 656cf771 Christos Stavrakakis
        user_holdings = {"user1": {"cyclades.vm": 1,
58 656cf771 Christos Stavrakakis
                                   "cyclades.cpu": 24,
59 656cf771 Christos Stavrakakis
                                   "cyclades.disk": 21474836480,
60 656cf771 Christos Stavrakakis
                                   "cyclades.ram": 8589934592}}
61 656cf771 Christos Stavrakakis
        holdings = util.get_db_holdings(user="user1")
62 d552dddd Christos Stavrakakis
        self.assertEqual(holdings, user_holdings)
63 d552dddd Christos Stavrakakis
        holdings = util.get_db_holdings()
64 d552dddd Christos Stavrakakis
        self.assertEqual(holdings["user1"], user_holdings["user1"])
65 d552dddd Christos Stavrakakis
66 d552dddd Christos Stavrakakis
    def test_network_holdings(self):
67 d552dddd Christos Stavrakakis
        mfactory.NetworkFactory(userid="user1")
68 d552dddd Christos Stavrakakis
        mfactory.NetworkFactory(userid="user2")
69 656cf771 Christos Stavrakakis
        user_holdings = {"user2": {"cyclades.network.private": 1}}
70 656cf771 Christos Stavrakakis
        holdings = util.get_db_holdings(user="user2")
71 d552dddd Christos Stavrakakis
        self.assertEqual(holdings, user_holdings)
72 d552dddd Christos Stavrakakis
        holdings = util.get_db_holdings()
73 d552dddd Christos Stavrakakis
        self.assertEqual(holdings["user2"], user_holdings["user2"])
74 d552dddd Christos Stavrakakis
75 d552dddd Christos Stavrakakis
76 d552dddd Christos Stavrakakis
@patch("synnefo.quotas.get_quotaholder_pending")
77 d552dddd Christos Stavrakakis
class ResolvePendingTestCase(TestCase):
78 d552dddd Christos Stavrakakis
    def setUp(self):
79 d552dddd Christos Stavrakakis
        self.p1 = mfactory.QuotaHolderSerialFactory(serial=20, pending=True)
80 d552dddd Christos Stavrakakis
        self.p1 = mfactory.QuotaHolderSerialFactory(serial=30, pending=True)
81 184a2a8c Christos Stavrakakis
        self.a1 = mfactory.QuotaHolderSerialFactory(serial=15, pending=False,
82 184a2a8c Christos Stavrakakis
                                                    accept=True)
83 184a2a8c Christos Stavrakakis
        self.a2 = mfactory.QuotaHolderSerialFactory(serial=25, pending=False,
84 184a2a8c Christos Stavrakakis
                                                    accept=True)
85 184a2a8c Christos Stavrakakis
        self.r1 = mfactory.QuotaHolderSerialFactory(serial=18, pending=False,
86 184a2a8c Christos Stavrakakis
                                                    accept=False)
87 184a2a8c Christos Stavrakakis
        self.r2 = mfactory.QuotaHolderSerialFactory(serial=23, pending=False,
88 184a2a8c Christos Stavrakakis
                                                    accept=False)
89 d552dddd Christos Stavrakakis
90 d552dddd Christos Stavrakakis
    def test_no_pending(self, qh):
91 d552dddd Christos Stavrakakis
        qh.return_value = []
92 d552dddd Christos Stavrakakis
        pending = quotas.resolve_pending_commissions()
93 d552dddd Christos Stavrakakis
        self.assertEqual(pending, ([], []))
94 d552dddd Christos Stavrakakis
95 d552dddd Christos Stavrakakis
    def test_1(self, qh):
96 d552dddd Christos Stavrakakis
        qh.return_value = [21, 25, 28]
97 d552dddd Christos Stavrakakis
        pending = quotas.resolve_pending_commissions()
98 d552dddd Christos Stavrakakis
        self.assertEqual(pending, ([25], [28, 21]))