stress_tests.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. '''
  2. Created on Dec 16, 2014
  3. @author: mreynolds
  4. '''
  5. import os
  6. import sys
  7. import time
  8. import ldap
  9. import logging
  10. import pytest
  11. import threading
  12. from lib389 import DirSrv, Entry, tools, tasks
  13. from lib389.tools import DirSrvTools
  14. from lib389._constants import *
  15. from lib389.properties import *
  16. log = logging.getLogger(__name__)
  17. NUM_USERS = 250
  18. GROUP_DN = 'cn=stress-group,' + DEFAULT_SUFFIX
  19. def openConnection(inst):
  20. # Open a new connection to our LDAP server
  21. server = DirSrv(verbose=False)
  22. args_instance[SER_HOST] = HOST_STANDALONE
  23. args_instance[SER_PORT] = PORT_STANDALONE
  24. args_instance[SER_SERVERID_PROP] = SERVERID_STANDALONE
  25. args_standalone = args_instance.copy()
  26. server.allocate(args_standalone)
  27. server.open()
  28. return server
  29. # Configure Referential Integrity Plugin for stress test
  30. def configureRI(inst):
  31. inst.plugins.enable(name=PLUGIN_REFER_INTEGRITY)
  32. PLUGIN_DN = 'cn=' + PLUGIN_REFER_INTEGRITY + ',cn=plugins,cn=config'
  33. try:
  34. inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'referint-membership-attr', 'uniquemember')])
  35. except ldap.LDAPError, e:
  36. log.error('configureRI: Failed to configure RI plugin: error ' + e.message['desc'])
  37. assert False
  38. # Configure MemberOf Plugin for stress test
  39. def configureMO(inst):
  40. inst.plugins.enable(name=PLUGIN_MEMBER_OF)
  41. PLUGIN_DN = 'cn=' + PLUGIN_MEMBER_OF + ',cn=plugins,cn=config'
  42. try:
  43. inst.modify_s(PLUGIN_DN, [(ldap.MOD_REPLACE, 'memberofgroupattr', 'uniquemember')])
  44. except ldap.LDAPError, e:
  45. log.error('configureMO: Failed to update config(uniquemember): error ' + e.message['desc'])
  46. assert False
  47. def cleanup(conn):
  48. try:
  49. conn.delete_s(GROUP_DN)
  50. except ldap.LDAPError, e:
  51. log.error('cleanup: failed to delete group (' + GROUP_DN + ') error: ' + e.message['desc'])
  52. assert False
  53. class DelUsers(threading.Thread):
  54. def __init__(self, inst, rdnval):
  55. threading.Thread.__init__(self)
  56. self.daemon = True
  57. self.inst = inst
  58. self.rdnval = rdnval
  59. def run(self):
  60. conn = openConnection(self.inst)
  61. idx = 0
  62. log.info('DelUsers - Deleting ' + str(NUM_USERS) + ' entries (' + self.rdnval + ')...')
  63. while idx < NUM_USERS:
  64. USER_DN = 'uid=' + self.rdnval + str(idx) + ',' + DEFAULT_SUFFIX
  65. try:
  66. conn.delete_s(USER_DN)
  67. except ldap.LDAPError, e:
  68. log.error('DeleteUsers: failed to delete (' + USER_DN + ') error: ' + e.message['desc'])
  69. assert False
  70. idx += 1
  71. conn.close()
  72. log.info('DelUsers - Finished deleting ' + str(NUM_USERS) + ' entries (' + self.rdnval + ').')
  73. class AddUsers(threading.Thread):
  74. def __init__(self, inst, rdnval, addToGroup):
  75. threading.Thread.__init__(self)
  76. self.daemon = True
  77. self.inst = inst
  78. self.addToGroup = addToGroup
  79. self.rdnval = rdnval
  80. def run(self):
  81. # Start adding users
  82. conn = openConnection(self.inst)
  83. idx = 0
  84. if self.addToGroup:
  85. try:
  86. conn.add_s(Entry((GROUP_DN,
  87. {'objectclass': 'top groupOfNames groupOfUniqueNames extensibleObject'.split(),
  88. 'uid': 'user' + str(idx)})))
  89. except ldap.ALREADY_EXISTS:
  90. pass
  91. except ldap.LDAPError, e:
  92. log.error('AddUsers: failed to add group (' + USER_DN + ') error: ' + e.message['desc'])
  93. assert False
  94. log.info('AddUsers - Adding ' + str(NUM_USERS) + ' entries (' + self.rdnval + ')...')
  95. while idx < NUM_USERS:
  96. USER_DN = 'uid=' + self.rdnval + str(idx) + ',' + DEFAULT_SUFFIX
  97. try:
  98. conn.add_s(Entry((USER_DN, {'objectclass': 'top extensibleObject'.split(),
  99. 'uid': 'user' + str(idx)})))
  100. except ldap.LDAPError, e:
  101. log.error('AddUsers: failed to add (' + USER_DN + ') error: ' + e.message['desc'])
  102. assert False
  103. if self.addToGroup:
  104. # Add the user to the group
  105. try:
  106. conn.modify_s(GROUP_DN, [(ldap.MOD_ADD, 'uniquemember', USER_DN)])
  107. except ldap.LDAPError, e:
  108. log.error('AddUsers: Failed to add user' + USER_DN + ' to group: error ' + e.message['desc'])
  109. assert False
  110. idx += 1
  111. conn.close()
  112. log.info('AddUsers - Finished adding ' + str(NUM_USERS) + ' entries (' + self.rdnval + ').')