Revision ccc5048f
b/snf-astakos-app/astakos/im/register.py | ||
---|---|---|
45 | 45 |
pass |
46 | 46 |
|
47 | 47 |
|
48 |
def different_component(service, resource): |
|
49 |
try: |
|
50 |
registered_for = Service.objects.get(name=resource.service_origin) |
|
51 |
return registered_for.component != service.component |
|
52 |
except Service.DoesNotExist: |
|
53 |
return False |
|
54 |
|
|
55 |
|
|
48 | 56 |
def add_resource(resource_dict): |
49 | 57 |
name = resource_dict.get('name') |
50 | 58 |
service_type = resource_dict.get('service_type') |
... | ... | |
53 | 61 |
raise RegisterException("Malformed resource dict.") |
54 | 62 |
|
55 | 63 |
try: |
56 |
Service.objects.get(name=service_origin) |
|
64 |
service = Service.objects.get(name=service_origin)
|
|
57 | 65 |
except Service.DoesNotExist: |
58 | 66 |
m = "There is no service %s." % service_origin |
59 | 67 |
raise RegisterException(m) |
... | ... | |
61 | 69 |
try: |
62 | 70 |
r = Resource.objects.get_for_update(name=name) |
63 | 71 |
exists = True |
64 |
if r.service_type != service_type: |
|
72 |
if r.service_type != service_type and \ |
|
73 |
different_component(service, r): |
|
65 | 74 |
m = ("There already exists a resource named %s with service " |
66 | 75 |
"type %s." % (name, r.service_type)) |
67 | 76 |
raise RegisterException(m) |
68 |
if r.service_origin != service_origin: |
|
77 |
if r.service_origin != service_origin and \ |
|
78 |
different_component(service, r): |
|
69 | 79 |
m = ("There already exists a resource named %s registered for " |
70 | 80 |
"service %s." % (name, r.service_origin)) |
71 | 81 |
raise RegisterException(m) |
72 |
|
|
82 |
r.service_origin = service_origin |
|
83 |
r.service_type = service_type |
|
73 | 84 |
except Resource.DoesNotExist: |
74 | 85 |
r = Resource(name=name, |
75 | 86 |
uplimit=0, |
b/snf-astakos-app/astakos/im/tests/__init__.py | ||
---|---|---|
35 | 35 |
from astakos.im.tests.projects import * |
36 | 36 |
from astakos.im.tests.api import * |
37 | 37 |
from astakos.im.tests.views import * |
38 |
from astakos.im.tests.services import * |
b/snf-astakos-app/astakos/im/tests/services.py | ||
---|---|---|
1 |
# Copyright 2013 GRNET S.A. All rights reserved. |
|
2 |
# |
|
3 |
# Redistribution and use in source and binary forms, with or |
|
4 |
# without modification, are permitted provided that the following |
|
5 |
# conditions are met: |
|
6 |
# |
|
7 |
# 1. Redistributions of source code must retain the above |
|
8 |
# copyright notice, this list of conditions and the following |
|
9 |
# disclaimer. |
|
10 |
# |
|
11 |
# 2. Redistributions in binary form must reproduce the above |
|
12 |
# copyright notice, this list of conditions and the following |
|
13 |
# disclaimer in the documentation and/or other materials |
|
14 |
# provided with the distribution. |
|
15 |
# |
|
16 |
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
|
17 |
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
|
18 |
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
|
19 |
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
|
20 |
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
21 |
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
22 |
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
|
23 |
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
|
24 |
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|
25 |
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
|
26 |
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
27 |
# POSSIBILITY OF SUCH DAMAGE. |
|
28 |
# |
|
29 |
# The views and conclusions contained in the software and |
|
30 |
# documentation are those of the authors and should not be |
|
31 |
# interpreted as representing official policies, either expressed |
|
32 |
# or implied, of GRNET S.A. |
|
33 |
|
|
34 |
from astakos.im.tests.common import * |
|
35 |
from snf_django.utils.testing import assertRaises |
|
36 |
|
|
37 |
|
|
38 |
class RegisterTest(TestCase): |
|
39 |
def test_register(self): |
|
40 |
component1 = Component.objects.create(name="comp1") |
|
41 |
component2 = Component.objects.create(name="comp2") |
|
42 |
register.add_service(component1, "service1", "type1", []) |
|
43 |
register.add_service(component1, "service1a", "type1a", []) |
|
44 |
register.add_service(component2, "service2", "type2", []) |
|
45 |
|
|
46 |
resource = {"name": "service.resource", |
|
47 |
"desc": "resource desc", |
|
48 |
"service_type": "type1", |
|
49 |
"service_origin": "service1" |
|
50 |
} |
|
51 |
r, _ = register.add_resource(resource) |
|
52 |
self.assertEqual(r.service_type, "type1") |
|
53 |
|
|
54 |
resource = {"name": "service.resource", |
|
55 |
"desc": "resource desc", |
|
56 |
"service_type": "type2", |
|
57 |
"service_origin": "service2" |
|
58 |
} |
|
59 |
with assertRaises(register.RegisterException): |
|
60 |
r, _ = register.add_resource(resource) |
|
61 |
|
|
62 |
resource = {"name": "service.resource", |
|
63 |
"desc": "resource desc", |
|
64 |
"service_type": "type1a", |
|
65 |
"service_origin": "service1a" |
|
66 |
} |
|
67 |
r, _ = register.add_resource(resource) |
|
68 |
self.assertEqual(r.service_type, "type1a") |
Also available in: Unified diff