Revision 770dba12

b/snf-astakos-app/astakos/test/stress.py
35 35
# or implied, of GRNET S.A.
36 36

  
37 37
import os
38
import sys
39 38
from optparse import OptionParser
40 39
from time import sleep
41 40
import threading
......
47 46
os.environ['SYNNEFO_SETTINGS_DIR'] = path + '/settings'
48 47
os.environ['DJANGO_SETTINGS_MODULE'] = 'synnefo.settings'
49 48

  
49
from astakos.im.models import AstakosUser
50 50
from astakos.im.functions import get_chain_of_application_id
51
from astakos.im import quotas
51 52
from views import submit, approve, join, leave
52 53
from snf_django.lib.db.transaction import commit_on_success_strict
54
from django.core.exceptions import PermissionDenied
53 55

  
54 56
USERS = {}
55 57
PROJECTS = {}
......
72 74
    alphabet = u'abcdef'
73 75
    length = randint(2, 4)
74 76
    last = ''.join(choice(alphabet) for _ in xrange(length))
75
    return first + '@' + last
77
    return first + '@' + last + '.com'
76 78

  
77 79

  
78 80
def new_user():
79 81
    email = random_email()
80
    u = AstakosUser(email=random_email(), first_name=random_name(),
81
                    last_name=random_name(), is_active=True)
82
    u.save()
83
    return u.id, u.email
82
    defaults = {'first_name': random_name(),
83
                'last_name': random_name(),
84
                'is_active': True,
85
                }
86
    u, created = AstakosUser.objects.get_or_create(
87
        email=email, defaults=defaults)
88
    if created:
89
        quotas.qh_sync_user(u)
90
        return u.id, u.email
91
    return None
84 92

  
85 93

  
86 94
@commit_on_success_strict()
87 95
def new_users(count):
88 96
    for i in range(count):
89
        uid, email = new_user()
90
        USERS[uid] = email
97
        while True:
98
            result = new_user()
99
            if result is not None:
100
                uid, email = result
101
                USERS[uid] = email
102
                break
91 103

  
92 104

  
93 105
class SubmitApproveT(threading.Thread):
......
113 125
                        % (prefix, now, prec))
114 126
            app_id = submit(name, user_id, prec)
115 127
            prec = app_id
128
        except PermissionDenied as e:
129
            logger.info('Limit reached')
116 130
        except Exception as e:
117 131
            logger.exception(e)
132
            continue
118 133
        try:
119 134
            now = datetime.datetime.now()
120 135
            pid = get_chain_of_application_id(app_id)
......
152 167
            logger.info('%s%s: user %s joining project %s'
153 168
                        % (prefix, now, user_id, proj_id))
154 169
            join(proj_id, user_id)
170
        except PermissionDenied as e:
171
            logger.info('Membership already exists')
155 172
        except Exception as e:
156 173
            logger.exception(e)
157 174

  
......
160 177
            logger.info('%s%s: user %s leaving project %s'
161 178
                        % (prefix, now, user_id, proj_id))
162 179
            leave(proj_id, user_id)
180
        except IOError as e:
181
            logger.info('No such membership')
163 182
        except Exception as e:
164 183
            logger.exception(e)
165 184

  
b/snf-astakos-app/astakos/test/views.py
33 33

  
34 34
from datetime import datetime, timedelta
35 35

  
36
from astakos.im.models import AstakosUser
36
from django.core.exceptions import PermissionDenied
37
from astakos.im.models import AstakosUser, ProjectApplication
37 38
from astakos.im.functions import (join_project, leave_project,
38
                                  submit_application, approve_application)
39
                                  submit_application, approve_application,
40
                                  get_user_by_id, qh_add_pending_app)
39 41
from snf_django.lib.db.transaction import commit_on_success_strict
40 42

  
43

  
41 44
@commit_on_success_strict()
42
def join(proj_id, user_id, ctx=None):
43
    join_project(proj_id, user_id)
45
def join(proj_id, user_id):
46
    join_project(proj_id, get_user_by_id(user_id))
47

  
44 48

  
45 49
@commit_on_success_strict()
46
def leave(proj_id, user_id, ctx=None):
47
    leave_project(proj_id, user_id)
50
def leave(proj_id, user_id):
51
    leave_project(proj_id, get_user_by_id(user_id))
52

  
48 53

  
49 54
@commit_on_success_strict()
50
def submit(name, user_id, prec, ctx=None):
55
def submit(name, user_id, prec):
51 56
    try:
52 57
        owner = AstakosUser.objects.get(id=user_id)
53 58
    except AstakosUser.DoesNotExist:
54 59
        raise AttributeError('user does not exist')
55 60

  
56
    resource_policies = [{'service': 'cyclades',
57
                          'resource': 'network.private',
58
                          'uplimit': 5}]
61
    precursor = (ProjectApplication.objects.get(id=prec)
62
                 if prec is not None
63
                 else None)
64

  
65
    ok, limit = qh_add_pending_app(owner, precursor=precursor, dry_run=True)
66
    if not ok:
67
        raise PermissionDenied('Limit %s reached', limit)
68

  
69
    resource_policies = [('cyclades.network.private', 5)]
59 70
    data = {'owner': owner,
60 71
            'name': name,
61
            'precursor_application': prec,
72
            'precursor_id': prec,
62 73
            'end_date': datetime.now() + timedelta(days=1),
63 74
            'member_join_policy': 1,
64 75
            'member_leave_policy': 1,
65 76
            'resource_policies': resource_policies,
77
            'request_user': owner
66 78
            }
67 79

  
68
    app = submit_application(data, request_user=owner)
80
    app = submit_application(**data)
69 81
    return app.id
70 82

  
83

  
71 84
@commit_on_success_strict()
72
def approve(app_id, ctx=None):
85
def approve(app_id):
73 86
    approve_application(app_id)

Also available in: Unified diff