stress_tests.py 4.3 KB

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