Revision 9096ffbb

b/snf-astakos-app/astakos/im/functions.py
316 316
    return get_project_for_update(m.project_id)
317 317

  
318 318

  
319
def get_user_by_id(user_id):
320
    try:
321
        return AstakosUser.objects.get(id=user_id)
322
    except AstakosUser.DoesNotExist:
323
        m = _(astakos_messages.UNKNOWN_USER_ID) % user_id
324
        raise ProjectNotFound(m)
325

  
326

  
327 319
def get_user_by_uuid(uuid):
328 320
    try:
329 321
        return AstakosUser.objects.get(uuid=uuid)
b/snf-astakos-app/astakos/test/stress.py
47 47
os.environ['DJANGO_SETTINGS_MODULE'] = 'synnefo.settings'
48 48

  
49 49
from astakos.im.models import AstakosUser
50
from astakos.im.functions import get_related_project_id, ProjectError
50
from astakos.im.functions import ProjectError
51 51
from astakos.im import quotas
52 52
from views import submit, approve, join, leave
53 53
from snf_django.lib.db.transaction import commit_on_success_strict
......
86 86
        email=email, defaults=defaults)
87 87
    if created:
88 88
        quotas.qh_sync_user(u)
89
        return u.id, u.email
89
        return u
90 90
    return None
91 91

  
92 92

  
......
94 94
def new_users(count):
95 95
    for i in range(count):
96 96
        while True:
97
            result = new_user()
98
            if result is not None:
99
                uid, email = result
100
                USERS[uid] = email
97
            u = new_user()
98
            if u is not None:
99
                USERS[u.id] = u
101 100
                break
102 101

  
103 102

  
......
113 112
                           prefix=self.name)
114 113

  
115 114

  
116
def submit_and_approve(name, user_id, prec, repeat, prefix=""):
115
def submit_and_approve(name, user_id, project_id, repeat, prefix=""):
117 116
    if prefix:
118 117
        prefix += ' '
119 118

  
120 119
    for i in range(repeat):
121 120
        try:
122 121
            now = datetime.datetime.now()
123
            logger.info('%s%s: submitting with precursor %s'
124
                        % (prefix, now, prec))
125
            app_id = submit(name, user_id, prec)
126
            prec = app_id
122
            logger.info('%s%s: submitting for project %s'
123
                        % (prefix, now, project_id))
124
            app_id, project_id = submit(name, user_id, project_id)
127 125
        except ProjectError as e:
128
            logger.info('Limit reached')
126
            logger.info(e.message)
127
            continue
129 128
        except Exception as e:
130 129
            logger.exception(e)
131 130
            continue
132 131
        try:
133 132
            now = datetime.datetime.now()
134
            pid = get_related_project_id(app_id)
135 133
            logger.info('%s%s: approving application %s of project %s'
136
                        % (prefix, now, app_id, pid))
134
                        % (prefix, now, app_id, project_id))
137 135
            approve(app_id)
138
            PROJECTS[pid] = True
136
            PROJECTS[project_id] = True
139 137
        except Exception as e:
140 138
            logger.exception(e)
141 139

  
......
146 144
        threading.Thread.__init__(self, *args, **kwargs)
147 145

  
148 146
    def run(self):
149
        owner = choice(USERS.keys())
147
        user = choice(USERS.values())
150 148
        while True:
151 149
            projects = PROJECTS.keys()
152 150
            if projects:
153 151
                pid = choice(projects)
154 152
                break
155 153
            sleep(0.1)
156
        join_and_leave(pid, owner, self.repeat, prefix=self.name)
154
        join_and_leave(pid, user, self.repeat, prefix=self.name)
157 155

  
158 156

  
159
def join_and_leave(proj_id, user_id, repeat, prefix=""):
157
def join_and_leave(proj_id, user, repeat, prefix=""):
158
    user_id = user.id
160 159
    if prefix:
161 160
        prefix += ' '
162 161

  
......
165 164
            now = datetime.datetime.now()
166 165
            logger.info('%s%s: user %s joining project %s'
167 166
                        % (prefix, now, user_id, proj_id))
168
            join(proj_id, user_id)
167
            membership = join(proj_id, user)
169 168
        except ProjectError as e:
170
            logger.info('Membership already exists')
169
            logger.info(e.message)
170
            continue
171 171
        except Exception as e:
172 172
            logger.exception(e)
173

  
173
            continue
174 174
        try:
175 175
            now = datetime.datetime.now()
176 176
            logger.info('%s%s: user %s leaving project %s'
177 177
                        % (prefix, now, user_id, proj_id))
178
            leave(proj_id, user_id)
178
            leave(membership.id, user)
179 179
        except ProjectError as e:
180
            logger.info('No such membership')
180
            logger.info(e.message)
181 181
        except Exception as e:
182 182
            logger.exception(e)
183 183

  
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, ProjectApplication
36
from astakos.im.models import AstakosUser, Project
37 37
from astakos.im.functions import (join_project, leave_project,
38 38
                                  submit_application, approve_application,
39
                                  get_user_by_id, check_pending_app_quota,
39
                                  check_pending_app_quota,
40 40
                                  ProjectForbidden)
41 41
from snf_django.lib.db.transaction import commit_on_success_strict
42 42

  
43 43

  
44 44
@commit_on_success_strict()
45
def join(proj_id, user_id):
46
    join_project(proj_id, get_user_by_id(user_id))
45
def join(proj_id, user):
46
    return join_project(proj_id, user)
47 47

  
48 48

  
49 49
@commit_on_success_strict()
50
def leave(proj_id, user_id):
51
    leave_project(proj_id, get_user_by_id(user_id))
50
def leave(memb_id, request_user):
51
    return leave_project(memb_id, request_user)
52 52

  
53 53

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

  
61
    precursor = (ProjectApplication.objects.get(id=prec)
62
                 if prec is not None
63
                 else None)
64

  
65
    ok, limit = check_pending_app_quota(owner, precursor=precursor)
61
    project = (Project.objects.get(id=project_id) if project_id is not None
62
               else None)
63
    ok, limit = check_pending_app_quota(owner, project=project)
66 64
    if not ok:
67 65
        raise ProjectForbidden('Limit %s reached', limit)
68 66

  
69
    resource_policies = [('cyclades.network.private', 5)]
67
    resource_policies = {'cyclades.network.private': {'member_capacity': 5}}
70 68
    data = {'owner': owner,
71 69
            'name': name,
72
            'precursor_id': prec,
70
            'project_id': project_id,
73 71
            'end_date': datetime.now() + timedelta(days=1),
74 72
            'member_join_policy': 1,
75 73
            'member_leave_policy': 1,
76
            'resource_policies': resource_policies,
74
            'resources': resource_policies,
77 75
            'request_user': owner
78 76
            }
79 77

  
80 78
    app = submit_application(**data)
81
    return app.id
79
    return app.id, app.chain_id
82 80

  
83 81

  
84 82
@commit_on_success_strict()

Also available in: Unified diff