Statistics
| Branch: | Tag: | Revision:

root / snf-quotaholder-app / quotaholder_django / test / simpletests.py @ 8a904c14

History | View | Annotate | Download (12 kB)

1 ddf4eaad Giorgos Korfiatis
# Copyright 2012 GRNET S.A. All rights reserved.
2 ddf4eaad Giorgos Korfiatis
#
3 ddf4eaad Giorgos Korfiatis
# Redistribution and use in source and binary forms, with or
4 ddf4eaad Giorgos Korfiatis
# without modification, are permitted provided that the following
5 ddf4eaad Giorgos Korfiatis
# conditions are met:
6 ddf4eaad Giorgos Korfiatis
#
7 ddf4eaad Giorgos Korfiatis
#   1. Redistributions of source code must retain the above
8 ddf4eaad Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
9 ddf4eaad Giorgos Korfiatis
#      disclaimer.
10 ddf4eaad Giorgos Korfiatis
#
11 ddf4eaad Giorgos Korfiatis
#   2. Redistributions in binary form must reproduce the above
12 ddf4eaad Giorgos Korfiatis
#      copyright notice, this list of conditions and the following
13 ddf4eaad Giorgos Korfiatis
#      disclaimer in the documentation and/or other materials
14 ddf4eaad Giorgos Korfiatis
#      provided with the distribution.
15 ddf4eaad Giorgos Korfiatis
#
16 ddf4eaad Giorgos Korfiatis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 ddf4eaad Giorgos Korfiatis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 ddf4eaad Giorgos Korfiatis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 ddf4eaad Giorgos Korfiatis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 ddf4eaad Giorgos Korfiatis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 ddf4eaad Giorgos Korfiatis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 ddf4eaad Giorgos Korfiatis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 ddf4eaad Giorgos Korfiatis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 ddf4eaad Giorgos Korfiatis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 ddf4eaad Giorgos Korfiatis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 ddf4eaad Giorgos Korfiatis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 ddf4eaad Giorgos Korfiatis
# POSSIBILITY OF SUCH DAMAGE.
28 ddf4eaad Giorgos Korfiatis
#
29 ddf4eaad Giorgos Korfiatis
# The views and conclusions contained in the software and
30 ddf4eaad Giorgos Korfiatis
# documentation are those of the authors and should not be
31 ddf4eaad Giorgos Korfiatis
# interpreted as representing official policies, either expressed
32 ddf4eaad Giorgos Korfiatis
# or implied, of GRNET S.A.
33 ddf4eaad Giorgos Korfiatis
34 d1b04788 Giorgos Korfiatis
from config import QHTestCase
35 d1b04788 Giorgos Korfiatis
from config import run_test_case
36 d1b04788 Giorgos Korfiatis
from config import rand_string
37 d1b04788 Giorgos Korfiatis
from config import printf
38 d1b04788 Giorgos Korfiatis
39 187bd5d9 Giorgos Korfiatis
from synnefo.lib.commissioning import CallError
40 fb2aacf2 Giorgos Korfiatis
from synnefo.lib.quotaholder.api import InvalidDataError, NoEntityError
41 fb2aacf2 Giorgos Korfiatis
from synnefo.lib.quotaholder.api.quotaholder import (
42 763b4da1 Giorgos Korfiatis
    Name, Key, Quantity, Capacity, ImportLimit, ExportLimit, Resource, Flags,
43 763b4da1 Giorgos Korfiatis
    Imported, Exported, Returned, Released)
44 fb2aacf2 Giorgos Korfiatis
45 b0a1d46e Giorgos Korfiatis
DEFAULT_HOLDING = (0, 0, 0, 0)
46 d1b04788 Giorgos Korfiatis
47 d1b04788 Giorgos Korfiatis
class QHAPITest(QHTestCase):
48 d1b04788 Giorgos Korfiatis
49 fb2aacf2 Giorgos Korfiatis
    @classmethod
50 fb2aacf2 Giorgos Korfiatis
    def setUpClass(self):
51 fb2aacf2 Giorgos Korfiatis
        QHTestCase.setUpClass()
52 fb2aacf2 Giorgos Korfiatis
        e = self.rand_entity()
53 fb2aacf2 Giorgos Korfiatis
        k = Key.random()
54 fb2aacf2 Giorgos Korfiatis
        r = self.qh.create_entity(create_entity=[(e, 'system', k, '')])
55 fb2aacf2 Giorgos Korfiatis
        self.e_name = e
56 fb2aacf2 Giorgos Korfiatis
        self.e_key = k
57 187bd5d9 Giorgos Korfiatis
        self.client = self.rand_entity()
58 fb2aacf2 Giorgos Korfiatis
59 fb2aacf2 Giorgos Korfiatis
    @classmethod
60 fb2aacf2 Giorgos Korfiatis
    def rand_name(self, exclude=[]):
61 fb2aacf2 Giorgos Korfiatis
        for i in range(1,100):
62 fb2aacf2 Giorgos Korfiatis
            r = Name().random()
63 fb2aacf2 Giorgos Korfiatis
            if r not in exclude:
64 fb2aacf2 Giorgos Korfiatis
                exclude.append(r)
65 fb2aacf2 Giorgos Korfiatis
                return r
66 fb2aacf2 Giorgos Korfiatis
        else:
67 fb2aacf2 Giorgos Korfiatis
            m = 'Could not make a unique random name'
68 fb2aacf2 Giorgos Korfiatis
            raise Exception(m)
69 fb2aacf2 Giorgos Korfiatis
70 fb2aacf2 Giorgos Korfiatis
    used_entities = ['system']
71 fb2aacf2 Giorgos Korfiatis
72 fb2aacf2 Giorgos Korfiatis
    @classmethod
73 fb2aacf2 Giorgos Korfiatis
    def rand_entity(self):
74 fb2aacf2 Giorgos Korfiatis
        return self.rand_name(self.used_entities)
75 fb2aacf2 Giorgos Korfiatis
76 fb2aacf2 Giorgos Korfiatis
    used_policies = []
77 fb2aacf2 Giorgos Korfiatis
78 fb2aacf2 Giorgos Korfiatis
    @classmethod
79 fb2aacf2 Giorgos Korfiatis
    def rand_policy(self):
80 fb2aacf2 Giorgos Korfiatis
        return self.rand_name(self.used_policies)
81 fb2aacf2 Giorgos Korfiatis
82 fb2aacf2 Giorgos Korfiatis
    used_resources = []
83 fb2aacf2 Giorgos Korfiatis
84 fb2aacf2 Giorgos Korfiatis
    @classmethod
85 fb2aacf2 Giorgos Korfiatis
    def rand_resource(self):
86 fb2aacf2 Giorgos Korfiatis
        return self.rand_name(self.used_resources)
87 fb2aacf2 Giorgos Korfiatis
88 fb2aacf2 Giorgos Korfiatis
    def rand_limits(self):
89 187bd5d9 Giorgos Korfiatis
        q = Capacity.random() # Nonnegative
90 fb2aacf2 Giorgos Korfiatis
        c = Capacity.random()
91 fb2aacf2 Giorgos Korfiatis
        il = ImportLimit.random()
92 fb2aacf2 Giorgos Korfiatis
        el = ExportLimit.random()
93 fb2aacf2 Giorgos Korfiatis
        return q, c, il, el
94 fb2aacf2 Giorgos Korfiatis
95 fb2aacf2 Giorgos Korfiatis
    def rand_policy_limits(self):
96 fb2aacf2 Giorgos Korfiatis
        p = self.rand_policy()
97 fb2aacf2 Giorgos Korfiatis
        limits = self.rand_limits()
98 fb2aacf2 Giorgos Korfiatis
        return p, limits
99 fb2aacf2 Giorgos Korfiatis
100 fb2aacf2 Giorgos Korfiatis
    def rand_flags(self):
101 fb2aacf2 Giorgos Korfiatis
        return Flags.random()
102 fb2aacf2 Giorgos Korfiatis
103 763b4da1 Giorgos Korfiatis
    def rand_counters(self):
104 763b4da1 Giorgos Korfiatis
        return (Imported.random(), Exported.random(),
105 763b4da1 Giorgos Korfiatis
                Returned.random(), Released.random())
106 763b4da1 Giorgos Korfiatis
107 fb2aacf2 Giorgos Korfiatis
    def new_entity(self, parent='system', parent_key=''):
108 fb2aacf2 Giorgos Korfiatis
        e = self.rand_entity()
109 fb2aacf2 Giorgos Korfiatis
        k = Key.random()
110 fb2aacf2 Giorgos Korfiatis
        r = self.qh.create_entity(create_entity=[(e, parent, k, parent_key)])
111 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [])
112 fb2aacf2 Giorgos Korfiatis
        return e, k
113 fb2aacf2 Giorgos Korfiatis
114 fb2aacf2 Giorgos Korfiatis
    def new_policy(self):
115 fb2aacf2 Giorgos Korfiatis
        p, limits = self.rand_policy_limits()
116 fb2aacf2 Giorgos Korfiatis
        r = self.qh.set_limits(set_limits=[(p,) + limits])
117 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [])
118 fb2aacf2 Giorgos Korfiatis
        return p, limits
119 fb2aacf2 Giorgos Korfiatis
120 fb2aacf2 Giorgos Korfiatis
    def test_001_list_entities(self):
121 d1b04788 Giorgos Korfiatis
        r = self.qh.list_entities(entity='system', key='')
122 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, ['system', self.e_name])
123 fb2aacf2 Giorgos Korfiatis
124 fb2aacf2 Giorgos Korfiatis
        with self.assertRaises(NoEntityError):
125 fb2aacf2 Giorgos Korfiatis
            self.qh.list_entities(entity='doesnotexist', key='')
126 fb2aacf2 Giorgos Korfiatis
127 fb2aacf2 Giorgos Korfiatis
        with self.assertRaises(InvalidDataError):
128 fb2aacf2 Giorgos Korfiatis
            self.qh.list_entities(entity='system; SELECT ALL', key='')
129 fb2aacf2 Giorgos Korfiatis
130 fb2aacf2 Giorgos Korfiatis
    def test_002_create_entity(self):
131 fb2aacf2 Giorgos Korfiatis
        e = self.rand_entity()
132 fb2aacf2 Giorgos Korfiatis
        k = Key.random()
133 fb2aacf2 Giorgos Korfiatis
        r = self.qh.create_entity(
134 fb2aacf2 Giorgos Korfiatis
            create_entity=[(self.e_name, 'system', self.e_key, ''),
135 fb2aacf2 Giorgos Korfiatis
                           (e, self.e_name, k, self.e_key),
136 fb2aacf2 Giorgos Korfiatis
                           (e, self.e_name, k, self.e_key)])
137 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [0,2])
138 fb2aacf2 Giorgos Korfiatis
139 fb2aacf2 Giorgos Korfiatis
    def test_003_release_entity(self):
140 fb2aacf2 Giorgos Korfiatis
        e, k = self.new_entity()
141 fb2aacf2 Giorgos Korfiatis
        r = self.qh.release_entity(release_entity=[(e, k)])
142 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [])
143 fb2aacf2 Giorgos Korfiatis
144 fb2aacf2 Giorgos Korfiatis
    def test_004_set_entity_key(self):
145 fb2aacf2 Giorgos Korfiatis
        e, k = self.new_entity()
146 fb2aacf2 Giorgos Korfiatis
        k1 = Key.random()
147 fb2aacf2 Giorgos Korfiatis
        k2 = Key.random()
148 fb2aacf2 Giorgos Korfiatis
        r = self.qh.set_entity_key(set_entity_key=[(e, k1, k2)])
149 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [e])
150 fb2aacf2 Giorgos Korfiatis
        r = self.qh.set_entity_key(set_entity_key=[(e, k, k2)])
151 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [])
152 fb2aacf2 Giorgos Korfiatis
        r = self.qh.release_entity(release_entity=[(e, k)])
153 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [e])
154 fb2aacf2 Giorgos Korfiatis
155 fb2aacf2 Giorgos Korfiatis
    def test_005_get_entity(self):
156 fb2aacf2 Giorgos Korfiatis
        e = self.rand_entity()
157 fb2aacf2 Giorgos Korfiatis
        k = Key.random()
158 fb2aacf2 Giorgos Korfiatis
        r = self.qh.get_entity(get_entity=[(self.e_name, self.e_key), (e, k)])
159 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [(self.e_name, 'system')])
160 fb2aacf2 Giorgos Korfiatis
161 fb2aacf2 Giorgos Korfiatis
    def test_006_get_set_limits(self):
162 fb2aacf2 Giorgos Korfiatis
163 fb2aacf2 Giorgos Korfiatis
        p1, limits1 = self.rand_policy_limits()
164 fb2aacf2 Giorgos Korfiatis
        limits2 = self.rand_limits()
165 fb2aacf2 Giorgos Korfiatis
        r = self.qh.set_limits(set_limits=[(p1,) + limits1,
166 fb2aacf2 Giorgos Korfiatis
                                           (p1,) + limits2])
167 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [])
168 fb2aacf2 Giorgos Korfiatis
169 fb2aacf2 Giorgos Korfiatis
        p2, _ = self.rand_policy_limits()
170 fb2aacf2 Giorgos Korfiatis
        r = self.qh.get_limits(get_limits=[p1, p2])
171 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [(p1,) + limits2])
172 fb2aacf2 Giorgos Korfiatis
173 fb2aacf2 Giorgos Korfiatis
    def test_007_get_set_holding(self):
174 fb2aacf2 Giorgos Korfiatis
        e, k = self.new_entity()
175 fb2aacf2 Giorgos Korfiatis
        resource = self.rand_resource()
176 d1b04788 Giorgos Korfiatis
177 fb2aacf2 Giorgos Korfiatis
        p0 = self.rand_policy()
178 fb2aacf2 Giorgos Korfiatis
        f0 = self.rand_flags()
179 fb2aacf2 Giorgos Korfiatis
        p1, _ = self.new_policy()
180 fb2aacf2 Giorgos Korfiatis
        f1 = self.rand_flags()
181 fb2aacf2 Giorgos Korfiatis
        p2, _ = self.new_policy()
182 fb2aacf2 Giorgos Korfiatis
        f2 = self.rand_flags()
183 fb2aacf2 Giorgos Korfiatis
        r = self.qh.set_holding(set_holding=[(e, resource, k, p0, f0),
184 fb2aacf2 Giorgos Korfiatis
                                             (e, resource, k, p1, f1),
185 fb2aacf2 Giorgos Korfiatis
                                             (e, resource, k, p2, f2)])
186 fb2aacf2 Giorgos Korfiatis
        self.assertEqual(r, [(e, resource, p0)])
187 d1b04788 Giorgos Korfiatis
188 fb2aacf2 Giorgos Korfiatis
        resource1 = self.rand_resource()
189 fb2aacf2 Giorgos Korfiatis
        r = self.qh.get_holding(get_holding=[(e, resource, k),
190 fb2aacf2 Giorgos Korfiatis
                                             (e, resource1, k)])
191 b0a1d46e Giorgos Korfiatis
        self.assertEqual(r, [(e, resource, p2) + DEFAULT_HOLDING + (f2,)])
192 b0a1d46e Giorgos Korfiatis
193 b0a1d46e Giorgos Korfiatis
    def test_008_get_set_quota(self):
194 b0a1d46e Giorgos Korfiatis
        e, k = self.new_entity()
195 b0a1d46e Giorgos Korfiatis
        resource = self.rand_resource()
196 b0a1d46e Giorgos Korfiatis
        limits = self.rand_limits()
197 b0a1d46e Giorgos Korfiatis
        limits1 = self.rand_limits()
198 b0a1d46e Giorgos Korfiatis
        f = self.rand_flags()
199 b0a1d46e Giorgos Korfiatis
        r = self.qh.set_quota(set_quota=[(e, resource, k) + limits + (f,),
200 b0a1d46e Giorgos Korfiatis
                                         (e, resource, k) + limits1 + (f,)])
201 b0a1d46e Giorgos Korfiatis
        self.assertEqual(r, [])
202 b0a1d46e Giorgos Korfiatis
203 b0a1d46e Giorgos Korfiatis
        resource2 = self.rand_resource()
204 b0a1d46e Giorgos Korfiatis
        r = self.qh.get_quota(get_quota=[(e, resource, k),
205 b0a1d46e Giorgos Korfiatis
                                         (e, resource2, k)])
206 b0a1d46e Giorgos Korfiatis
        self.assertEqual(r, [(e, resource) + limits1 +
207 b0a1d46e Giorgos Korfiatis
                             DEFAULT_HOLDING + (f,)])
208 d1b04788 Giorgos Korfiatis
209 187bd5d9 Giorgos Korfiatis
    def new_quota(self, entity, key, resource):
210 187bd5d9 Giorgos Korfiatis
        limits = self.rand_limits()
211 187bd5d9 Giorgos Korfiatis
        f = self.rand_flags()
212 187bd5d9 Giorgos Korfiatis
        r = self.qh.set_quota(
213 187bd5d9 Giorgos Korfiatis
            set_quota=[(entity, resource, key) + limits + (f,)])
214 187bd5d9 Giorgos Korfiatis
        self.assertEqual(r, [])
215 187bd5d9 Giorgos Korfiatis
        return limits
216 187bd5d9 Giorgos Korfiatis
217 8a904c14 Giorgos Korfiatis
    def test_009_commissions(self):
218 187bd5d9 Giorgos Korfiatis
        e0, k0 = self.new_entity()
219 187bd5d9 Giorgos Korfiatis
        e1, k1 = self.new_entity()
220 187bd5d9 Giorgos Korfiatis
        resource = self.rand_resource()
221 187bd5d9 Giorgos Korfiatis
        q0, c0, il0, el0 = self.new_quota(e0, k0, resource)
222 187bd5d9 Giorgos Korfiatis
        q1, c1, il1, el1 = self.new_quota(e1, k1, resource)
223 187bd5d9 Giorgos Korfiatis
224 187bd5d9 Giorgos Korfiatis
        most = max(0, min(c0, il0, q1, el1))
225 187bd5d9 Giorgos Korfiatis
        r = self.qh.issue_commission(clientkey=self.client, target=e0, key=k0,
226 187bd5d9 Giorgos Korfiatis
                                     name='something',
227 187bd5d9 Giorgos Korfiatis
                                     provisions=[(e1, resource, most)])
228 187bd5d9 Giorgos Korfiatis
        self.assertEqual(r, 1)
229 187bd5d9 Giorgos Korfiatis
230 187bd5d9 Giorgos Korfiatis
        with self.assertRaises(CallError):
231 187bd5d9 Giorgos Korfiatis
            self.qh.issue_commission(clientkey=self.client, target=e0, key=k0,
232 187bd5d9 Giorgos Korfiatis
                                     name='something',
233 187bd5d9 Giorgos Korfiatis
                                     provisions=[(e1, resource, 1)])
234 187bd5d9 Giorgos Korfiatis
235 8a904c14 Giorgos Korfiatis
        r = self.qh.get_pending_commissions(clientkey=self.client)
236 8a904c14 Giorgos Korfiatis
        self.assertEqual(r, [1])
237 8a904c14 Giorgos Korfiatis
        r = self.qh.resolve_pending_commissions(clientkey=self.client,
238 8a904c14 Giorgos Korfiatis
                                                max_serial=1, accept_set=[1])
239 8a904c14 Giorgos Korfiatis
        r = self.qh.get_pending_commissions(clientkey=self.client)
240 8a904c14 Giorgos Korfiatis
        self.assertEqual(r, [])
241 8a904c14 Giorgos Korfiatis
242 65f214a2 Georgios D. Tsoukalas
    def test_010_list_holdings(self):
243 65f214a2 Georgios D. Tsoukalas
        e0, k0 = ('list_holdings_one', '1')
244 65f214a2 Georgios D. Tsoukalas
        e1, k1 = ('list_holdings_two', '1')
245 65f214a2 Georgios D. Tsoukalas
        resource = 'list_holdings_resource'
246 65f214a2 Georgios D. Tsoukalas
        sys = 'system'
247 65f214a2 Georgios D. Tsoukalas
248 65f214a2 Georgios D. Tsoukalas
        r = self.qh.create_entity(create_entity=[(e0, sys, k0, ''),
249 65f214a2 Georgios D. Tsoukalas
                                                 (e1, sys, k1, '')])
250 65f214a2 Georgios D. Tsoukalas
        if r:
251 65f214a2 Georgios D. Tsoukalas
            raise AssertionError("cannot create entities")
252 65f214a2 Georgios D. Tsoukalas
253 65f214a2 Georgios D. Tsoukalas
        self.qh.set_quota(set_quota=[(sys, resource, '', 10, 0, None, None, 0),
254 65f214a2 Georgios D. Tsoukalas
                                     (e0, resource, k0, 0, 10, None, None, 0),
255 65f214a2 Georgios D. Tsoukalas
                                     (e1, resource, k1, 0, 10, None, None, 0)])
256 65f214a2 Georgios D. Tsoukalas
257 65f214a2 Georgios D. Tsoukalas
        s0 = self.qh.issue_commission(clientkey=self.client, target=e0, key=k0,
258 65f214a2 Georgios D. Tsoukalas
                                      name='a commission',
259 65f214a2 Georgios D. Tsoukalas
                                      provisions=[('system', resource, 3)])
260 65f214a2 Georgios D. Tsoukalas
261 65f214a2 Georgios D. Tsoukalas
        s1 = self.qh.issue_commission(clientkey=self.client, target=e1, key=k1,
262 65f214a2 Georgios D. Tsoukalas
                                      name='a commission',
263 65f214a2 Georgios D. Tsoukalas
                                      provisions=[('system', resource, 4)])
264 65f214a2 Georgios D. Tsoukalas
265 65f214a2 Georgios D. Tsoukalas
        self.qh.accept_commission(clientkey=self.client, serials=[s0, s1])
266 65f214a2 Georgios D. Tsoukalas
267 65f214a2 Georgios D. Tsoukalas
        holdings_list, rejected = self.qh.list_holdings(list_holdings=[
268 65f214a2 Georgios D. Tsoukalas
                                                        (e0, k0),
269 65f214a2 Georgios D. Tsoukalas
                                                        (e1, k1),
270 65f214a2 Georgios D. Tsoukalas
                                                        (e0+e1, k0+k1)])
271 65f214a2 Georgios D. Tsoukalas
272 65f214a2 Georgios D. Tsoukalas
        self.assertEqual(rejected, [e0+e1])
273 65f214a2 Georgios D. Tsoukalas
        self.assertEqual(holdings_list, [[(e0, resource, 3, 0, 0, 0)],
274 65f214a2 Georgios D. Tsoukalas
                                         [(e1, resource, 4, 0, 0, 0)]])
275 65f214a2 Georgios D. Tsoukalas
276 187bd5d9 Giorgos Korfiatis
277 763b4da1 Giorgos Korfiatis
    def test_011_release_empty(self):
278 763b4da1 Giorgos Korfiatis
        e, k = self.new_entity()
279 763b4da1 Giorgos Korfiatis
        e0, k0 = self.rand_entity(), Key.random()
280 763b4da1 Giorgos Korfiatis
        r = self.qh.release_entity(release_entity=[(e, k), (e0, k0)])
281 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [e0])
282 763b4da1 Giorgos Korfiatis
        r = self.qh.get_entity(get_entity=[(e, k)])
283 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [])
284 763b4da1 Giorgos Korfiatis
285 763b4da1 Giorgos Korfiatis
    def test_012_release_nonempty(self):
286 763b4da1 Giorgos Korfiatis
        e, k = self.new_entity()
287 763b4da1 Giorgos Korfiatis
        e1, k1 = self.new_entity(e, k)
288 763b4da1 Giorgos Korfiatis
        r = self.qh.release_entity(release_entity=[(e, k), (e1, k1)])
289 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [e])
290 763b4da1 Giorgos Korfiatis
        r = self.qh.get_entity(get_entity=[(e1, k1)])
291 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [])
292 763b4da1 Giorgos Korfiatis
        r = self.qh.release_entity(release_entity=[(e, k)])
293 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [])
294 763b4da1 Giorgos Korfiatis
295 763b4da1 Giorgos Korfiatis
    def test_013_release_nonempty(self):
296 763b4da1 Giorgos Korfiatis
        e, k = self.new_entity()
297 763b4da1 Giorgos Korfiatis
        resource = self.rand_resource()
298 763b4da1 Giorgos Korfiatis
        limits = self.new_quota(e, k, resource)
299 763b4da1 Giorgos Korfiatis
        r = self.qh.release_entity(release_entity=[(e, k)])
300 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [e])
301 763b4da1 Giorgos Korfiatis
        r = self.qh.release_holding(release_holding=[(e, resource, k)])
302 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [])
303 763b4da1 Giorgos Korfiatis
        r = self.qh.release_entity(release_entity=[(e, k)])
304 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [])
305 763b4da1 Giorgos Korfiatis
306 763b4da1 Giorgos Korfiatis
    def test_014_reset_holding(self):
307 763b4da1 Giorgos Korfiatis
        e0, k0 = self.new_entity()
308 763b4da1 Giorgos Korfiatis
        e1, k1 = self.new_entity()
309 763b4da1 Giorgos Korfiatis
        resource = self.rand_resource()
310 763b4da1 Giorgos Korfiatis
        p, _ = self.new_policy()
311 763b4da1 Giorgos Korfiatis
        f = self.rand_flags()
312 763b4da1 Giorgos Korfiatis
        r = self.qh.set_holding(set_holding=[(e1, resource, k1, p, f)])
313 763b4da1 Giorgos Korfiatis
314 763b4da1 Giorgos Korfiatis
        counters = self.rand_counters()
315 763b4da1 Giorgos Korfiatis
        r = self.qh.reset_holding(
316 763b4da1 Giorgos Korfiatis
            reset_holding=[(e0, resource, k0) + counters,
317 763b4da1 Giorgos Korfiatis
                           (e1, resource, k1) + counters])
318 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [0])
319 763b4da1 Giorgos Korfiatis
        r = self.qh.get_holding(get_holding=[(e1, resource, k1)])
320 763b4da1 Giorgos Korfiatis
        self.assertEqual(r, [(e1, resource, p) + counters + (f,)])
321 763b4da1 Giorgos Korfiatis
322 763b4da1 Giorgos Korfiatis
323 d1b04788 Giorgos Korfiatis
if __name__ == "__main__":
324 d1b04788 Giorgos Korfiatis
    import sys
325 d1b04788 Giorgos Korfiatis
    printf("Using {0}", sys.executable)
326 d1b04788 Giorgos Korfiatis
    run_test_case(QHAPITest)