ldclt1
Load test program for ldap
Usage
ldclt [-qQvV]
[-E
<max
errors>]
[-b
<base
DN>]
[-h
<host>]
[-p
<port>]
[-t
<timeout>]
[-D
<bind
DN>]
[-w
<passwd>]
[-o
<SASL
option>]
[-e
<execParams>]
[-a
<max
pending>]
[-n
<nb
threads>]
[-i
<nb
times>]
[-N
<nb
samples>]
[-I
<err
number>]
[-T
<total>]
[-r
<low>
-R
<high>]
[-f
<filter>]
[-s
<scope>]
[-S
<consumer>]
[-P<supplier
port>]
[-W
<waitsec>]
[-Z
<certfile>]
Overview
This tool is a LDAP client targeted to validate the reliability of the product under a wide variety of stress conditions.
Options
The valid options are:
-
-a -
Asynchronous mode, with max pending operations.
-
-b -
Give the base DN to use. Default "dc=example,dc=com".
-
-D -
Bind DN. See
-w
-
-E -
Max errors allowed. Default 1000.
-
-f -
Filter for searches.
-
-h -
Host to connect. Default "localhost".
-
-H -
Ldap URL to connect to. Example, ldap://localhost:389. This takes precedence over -h and -p.
-
-i -
Number of times inactivity allowed. Default 3 (30 seconds)
-
-I -
Ignore errors (cf.
-E). Default none.
-
-n -
Number of threads. Default 10.
-
-N -
Number of samples (10 seconds each). Default infinite.
-
-o -
SASL Option.
-
-p -
Server port. Default 389.
-
-P -
Supplier port (to check replication). Default 16000.
-
-q -
Quiet mode. See option
-I.
-
-Q -
Super quiet mode.
-
-r -
Range's low value.
-
-R -
Range's high value.
-
-s -
Scope. May be base, subtree or one. Default subtree.
-
-S -
Consumer to check.
-
-t -
LDAP operations timeout. Default 30 seconds.
-
-T -
Total number of operations per thread. Default infinite.
-
-v -
Verbose.
-
-V -
Very verbose.
-
-w -
Bind passwd. See
-D.
-
-W -
Wait between two operations. Default 0 seconds.
-
-Z -
certfile. Turn on SSL and use certfile as the certificate DB
-
-e -
Execution parameters:
-
addldap_add() entries.
appendentries to the genldif file.
asciiuse ascii 7-bits strings.
attreplace=name:maskreplace attribute of existing entry.
attrlist=name:name:namespecify list of attribs to retrieve
attrsonly=0|1ldap_search() parameter. Set 0 to read values.
bindeachldap_bind() for each operation.
bindonlyonly bind/unbind, no other operation is performed.
closewill close() the fd, rather than ldap_unbind().
cltcertname=namename of the SSL client certificate
commoncounterall threads share the same counter.
counteachcount each operation not only successful ones.
deleteldap_delete() entries.
dontsleeponserverdownwill loop very fast if server down.
emailPersonobjectclass=emailPerson (-eadd only).
esearchexact search.
genldif=filenamegenerates a ldif file
imagesdir=pathspecify where are the images.
incrincremental values.
inetOrgPersonobjectclass=inetOrgPerson (-eadd only).
keydbfile=filefilename of the key database
keydbpin=passwordpassword for accessing the key database
noglobalstatsdon't print periodical global statistics
noloopdoes not loop the incremental numbers.
object=filenamebuild object from input file
personobjectclass=person (-eadd only).
randomrandom filters, etc...
randomattrlist=name:name:namerandom select attrib in the list
randombaserandom base DN.
randombaselow=valuelow value for random generator.
randombasehigh=valuehigh value for random generator.
randombinddnrandom bind DN.
randombinddnfromfile=fineretrieve bind DN & passwd from file
randombinddnlow=valuelow value for random generator.
randombinddnhigh=valuehigh value for random generator.
rdn=attrname:valuealternate for-f.
referral=on|off|rebindchange referral behaviour.
scalab01activates scalab01 scenario.
scalab01_cnxdurationmaximum connection duration.
scalab01_maxcnxnbmodem pool size.
scalab01_waitsleep() between 2 attempts to connect.
smoothshutdownmain thread waits till the worker threads exit.
stringcreate random strings rather than random numbers.
v2ldap v2.
withnewparentrename with newparent specified as argument.
randomauthidrandom SASL Authid.
randomauthidlow=valuelow value for random SASL Authid.
randomauthidhigh=valuehigh value for random SASL Authid.
Examples
To populate a database with 1000 user objects create a file template.ldif containing:
objectClass: top objectclass: person objectClass: organizationalPerson objectClass: inetorgperson objectClass: posixAccount objectClass: shadowAccount sn: user[A] cn: user[A] givenName: user[A] description: description[A] userPassword: password[A] mail: user[A]@example.com uidNumber: 1[A] gidNumber: 1[A] shadowMin: 0 shadowMax: 99999 shadowInactive: 30 shadowWarning: 7 homeDirectory: /home/uid[A]
This can now be loaded to the database using:
ldclt -h localhost -p 389 -D "cn=Directory Manager" -w password -b "ou=people,dc=example,dc=com" -I 68 -e add,commoncounter -e "object=/tmp/template.ldif,rdn=uid:user[A=INCRNNOLOOP(0;999;4)]"
Using these created users you can test binding to the accounts with:
ldclt -h localhost -p 389 -e bindeach,bindonly -D uid=user0XXX,dc=example,dc=com -w password0XXX -e randombinddn,randombinddnlow=0,randombinddnhigh=0999 -e esearch -f "(&(objectClass=posixAccount)(uid=user*)(uidNumber=*)(gidNumber=*))"
Releases
7 releases since Debian 8 (Jessie); the text changed 5 times.
-H since Debian 9 (Stretch).