137
129
'__call__', fake_wsgi)
140
def stub_out_instance_quota(stubs, allowed):
132
def stub_out_instance_quota(stubs, allowed, quota, resource='instances'):
141
133
def fake_reserve(context, **deltas):
142
instances = deltas.pop('instances', 0)
143
if instances > allowed:
144
raise exc.OverQuota(overs=['instances'], quotas=dict(
149
instances=dict(in_use=0, reserved=0),
150
cores=dict(in_use=0, reserved=0),
151
ram=dict(in_use=0, reserved=0),
134
requested = deltas.pop(resource, 0)
135
if requested > allowed:
136
quotas = dict(instances=1, cores=1, ram=1)
137
quotas[resource] = quota
138
usages = dict(instances=dict(in_use=0, reserved=0),
139
cores=dict(in_use=0, reserved=0),
140
ram=dict(in_use=0, reserved=0))
141
usages[resource]['in_use'] = (quotas[resource] * 0.9 -
143
usages[resource]['reserved'] = quotas[resource] * 0.1
144
raise exc.OverQuota(overs=[resource], quotas=quotas,
153
146
stubs.Set(QUOTAS, 'reserve', fake_reserve)
255
def stub_out_glance_add_image(stubs, sent_to_glance):
248
def stub_out_glanceclient_create(stubs, sent_to_glance):
257
250
We return the metadata sent to glance by modifying the sent_to_glance dict
260
orig_add_image = glance_client.Client.add_image
253
orig_add_image = glanceclient.v1.images.ImageManager.create
262
def fake_add_image(context, metadata, data=None):
255
def fake_create(context, metadata, data=None):
263
256
sent_to_glance['metadata'] = metadata
264
257
sent_to_glance['data'] = data
265
258
return orig_add_image(metadata, data)
267
stubs.Set(glance_client.Client, 'add_image', fake_add_image)
260
stubs.Set(glanceclient.v1.images.ImageManager, 'create', fake_create)
270
263
def stub_out_glance(stubs):
271
264
def fake_get_remote_image_service():
272
265
client = glance_stubs.StubGlanceClient(_make_image_fixtures())
273
return nova.image.glance.GlanceImageService(client)
266
client_wrapper = nova.image.glance.GlanceClientWrapper()
267
client_wrapper.host = 'fake_host'
268
client_wrapper.port = 9292
269
client_wrapper.client = client
270
return nova.image.glance.GlanceImageService(client=client_wrapper)
274
271
stubs.Set(nova.image.glance,
275
272
'get_default_image_service',
276
273
fake_get_remote_image_service)
337
334
del FakeAuthDatabase.data['id_%i' % token_id]
340
class FakeAuthManager(object):
341
#NOTE(justinsb): Accessing static variables through instances is FUBAR
342
#NOTE(justinsb): This should also be private!
347
def clear_fakes(cls):
352
def reset_fake_data(cls):
353
u1 = auth_manager.User('id1', 'guy1', 'acc1', 'secret1', False)
355
cls.projects = dict(testacct=auth_manager.Project('testacct',
361
def add_user(self, user):
362
FakeAuthManager.auth_data.append(user)
365
return FakeAuthManager.auth_data
367
def get_user(self, uid):
368
for user in FakeAuthManager.auth_data:
373
def get_user_from_access_key(self, key):
374
for user in FakeAuthManager.auth_data:
375
if user.access == key:
379
def delete_user(self, uid):
380
for user in FakeAuthManager.auth_data:
382
FakeAuthManager.auth_data.remove(user)
385
def create_user(self, name, access=None, secret=None, admin=False):
386
u = auth_manager.User(name, name, access, secret, admin)
387
FakeAuthManager.auth_data.append(u)
390
def modify_user(self, user_id, access=None, secret=None, admin=None):
391
user = self.get_user(user_id)
395
if admin is not None:
398
def is_admin(self, user_id):
399
user = self.get_user(user_id)
402
def is_project_member(self, user_id, project):
403
if not isinstance(project, auth_manager.Project):
405
project = self.get_project(project)
407
raise webob.exc.HTTPUnauthorized()
408
return ((user_id in project.member_ids) or
409
(user_id == project.project_manager_id))
411
def create_project(self, name, manager_user, description=None,
413
member_ids = ([auto_manager.User.safe_id(m) for m in member_users]
414
if member_users else [])
415
p = auth_manager.Project(name, name,
416
auth_manager.User.safe_id(manager_user),
417
description, member_ids)
418
FakeAuthManager.projects[name] = p
421
def delete_project(self, pid):
422
if pid in FakeAuthManager.projects:
423
del FakeAuthManager.projects[pid]
425
def modify_project(self, project, manager_user=None, description=None):
426
p = FakeAuthManager.projects.get(project)
427
p.project_manager_id = auth_manager.User.safe_id(manager_user)
428
p.description = description
430
def get_project(self, pid):
431
p = FakeAuthManager.projects.get(pid)
437
def get_projects(self, user_id=None):
439
return FakeAuthManager.projects.values()
441
return [p for p in FakeAuthManager.projects.values()
442
if (user_id in p.member_ids) or
443
(user_id == p.project_manager_id)]
446
337
class FakeRateLimiter(object):
447
338
def __init__(self, application):
448
339
self.application = application
507
398
flavor_id="1", name=None, key_name='',
508
399
access_ipv4=None, access_ipv6=None, progress=0,
509
400
auto_disk_config=False, display_name=None,
510
include_fake_metadata=True,
401
include_fake_metadata=True, config_drive=None,
511
402
power_state=None, nw_cache=None, metadata=None,
512
403
security_groups=None):
608
499
'name': 'vol name',
609
500
'display_name': 'displayname',
610
501
'display_description': 'displaydesc',
611
'created_at': datetime.datetime(1, 1, 1, 1, 1, 1),
502
'created_at': datetime.datetime(1999, 1, 1, 1, 1, 1),
612
503
'snapshot_id': None,
613
504
'volume_type_id': 'fakevoltype',
614
505
'volume_metadata': [],
648
539
raise exc.NotFound
651
def stub_volume_get_all(self, context, search_opts=None):
542
def stub_volume_get_all(context, search_opts=None):
543
return [stub_volume(100, project_id='fake'),
544
stub_volume(101, project_id='superfake'),
545
stub_volume(102, project_id='superduperfake')]
548
def stub_volume_get_all_by_project(self, context, search_opts=None):
652
549
return [stub_volume_get(self, context, '1')]
552
def stub_snapshot(id, **kwargs):
556
'status': 'available',
559
'display_name': 'Default name',
560
'display_description': 'Default description',
564
snapshot.update(kwargs)
568
def stub_snapshot_get_all(self):
569
return [stub_snapshot(100, project_id='fake'),
570
stub_snapshot(101, project_id='superfake'),
571
stub_snapshot(102, project_id='superduperfake')]
574
def stub_snapshot_get_all_by_project(self, context):
575
return [stub_snapshot(1)]