| New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!-- |
| | | The contents of this file are subject to the terms of the Common Development and |
| | | Distribution License (the License). You may not use this file except in compliance with the |
| | | License. |
| | | |
| | | You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the |
| | | specific language governing permission and limitations under the License. |
| | | |
| | | When distributing Covered Software, include this CDDL Header Notice in each file and include |
| | | the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL |
| | | Header, with the fields enclosed by brackets [] replaced by your own identifying |
| | | information: "Portions copyright [year] [name of copyright owner]". |
| | | |
| | | Copyright 2026 3A Systems, LLC. |
| | | --> |
| | | <jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.3"> |
| | | <hashTree> |
| | | <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="OpenDJ vs OpenLDAP - LDAP benchmark" enabled="true"> |
| | | <stringProp name="TestPlan.comments">Parametrized LDAP benchmark. Admin bind is cached once per thread (Once Only Controller, labelled ADMIN_CONNECT, excluded from metrics). Data ops (ADD/SEARCH/COMPARE/MODIFY/DELETE/ADD WITHOUT DELETE) reuse the cached admin connection. The measured user authentication is a single bind/unbind (test=sbind, own connection) after MODIFY has set the userPassword.</stringProp> |
| | | <boolProp name="TestPlan.functional_mode">false</boolProp> |
| | | <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp> |
| | | <boolProp name="TestPlan.serialize_threadgroups">false</boolProp> |
| | | <elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> |
| | | <collectionProp name="Arguments.arguments"/> |
| | | </elementProp> |
| | | <stringProp name="TestPlan.user_define_classpath"></stringProp> |
| | | </TestPlan> |
| | | <hashTree> |
| | | <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="LDAP Thread Group" enabled="true"> |
| | | <stringProp name="ThreadGroup.on_sample_error">continue</stringProp> |
| | | <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true"> |
| | | <boolProp name="LoopController.continue_forever">false</boolProp> |
| | | <stringProp name="LoopController.loops">-1</stringProp> |
| | | </elementProp> |
| | | <stringProp name="ThreadGroup.num_threads">${__P(threads,256)}</stringProp> |
| | | <stringProp name="ThreadGroup.ramp_time">${__P(rampup,0)}</stringProp> |
| | | <boolProp name="ThreadGroup.scheduler">true</boolProp> |
| | | <stringProp name="ThreadGroup.duration">${__P(duration,600)}</stringProp> |
| | | <stringProp name="ThreadGroup.delay"></stringProp> |
| | | </ThreadGroup> |
| | | <hashTree> |
| | | <!-- Admin connection: bound once per thread, cached in ldapContexts[thread], reused by all |
| | | data operations. Labelled ADMIN_CONNECT and excluded from metrics. --> |
| | | <OnceOnlyController guiclass="OnceOnlyControllerGui" testclass="OnceOnlyController" testname="Once Only - admin connect" enabled="true"/> |
| | | <hashTree> |
| | | <LDAPExtSampler guiclass="LdapExtTestSamplerGui" testclass="LDAPExtSampler" testname="ADMIN_CONNECT" enabled="true"> |
| | | <stringProp name="servername">${__P(host,localhost)}</stringProp> |
| | | <stringProp name="port">${__P(port,1389)}</stringProp> |
| | | <stringProp name="rootdn">ou=People,${__P(basedn,dc=example,dc=com)}</stringProp> |
| | | <stringProp name="scope">2</stringProp> |
| | | <stringProp name="countlimit"></stringProp> |
| | | <stringProp name="timelimit"></stringProp> |
| | | <stringProp name="attributes"></stringProp> |
| | | <stringProp name="return_object">false</stringProp> |
| | | <stringProp name="deref_aliases">false</stringProp> |
| | | <stringProp name="connection_timeout">60000</stringProp> |
| | | <stringProp name="parseflag">false</stringProp> |
| | | <stringProp name="secure">false</stringProp> |
| | | <stringProp name="user_dn">${__P(adminbinddn,cn=Directory Manager)}</stringProp> |
| | | <stringProp name="user_pw">${__P(adminbindpw,password)}</stringProp> |
| | | <stringProp name="comparedn"></stringProp> |
| | | <stringProp name="comparefilt"></stringProp> |
| | | <stringProp name="modddn"></stringProp> |
| | | <stringProp name="newdn"></stringProp> |
| | | <stringProp name="test">bind</stringProp> |
| | | </LDAPExtSampler> |
| | | <hashTree/> |
| | | </hashTree> |
| | | |
| | | <!-- ADD (admin connection): create the per-thread user entry. --> |
| | | <LDAPExtSampler guiclass="LdapExtTestSamplerGui" testclass="LDAPExtSampler" testname="ADD" enabled="true"> |
| | | <stringProp name="servername"></stringProp> |
| | | <stringProp name="port"></stringProp> |
| | | <stringProp name="rootdn"></stringProp> |
| | | <stringProp name="scope">2</stringProp> |
| | | <stringProp name="countlimit"></stringProp> |
| | | <stringProp name="timelimit"></stringProp> |
| | | <stringProp name="attributes"></stringProp> |
| | | <stringProp name="return_object">false</stringProp> |
| | | <stringProp name="deref_aliases">false</stringProp> |
| | | <stringProp name="connection_timeout"></stringProp> |
| | | <stringProp name="parseflag">false</stringProp> |
| | | <stringProp name="secure">false</stringProp> |
| | | <stringProp name="user_dn"></stringProp> |
| | | <stringProp name="user_pw"></stringProp> |
| | | <stringProp name="comparedn"></stringProp> |
| | | <stringProp name="comparefilt"></stringProp> |
| | | <stringProp name="modddn"></stringProp> |
| | | <stringProp name="newdn"></stringProp> |
| | | <stringProp name="test">add</stringProp> |
| | | <stringProp name="base_entry_dn">cn=user_${__threadNum}</stringProp> |
| | | <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> |
| | | <collectionProp name="Arguments.arguments"> |
| | | <elementProp name="sn" elementType="Argument"> |
| | | <stringProp name="Argument.name">sn</stringProp> |
| | | <stringProp name="Argument.value">user_${__threadNum}</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="mail" elementType="Argument"> |
| | | <stringProp name="Argument.name">mail</stringProp> |
| | | <stringProp name="Argument.value">user_${__threadNum}@test.com</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="objectClass" elementType="Argument"> |
| | | <stringProp name="Argument.name">objectClass</stringProp> |
| | | <stringProp name="Argument.value">top</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="objectClass" elementType="Argument"> |
| | | <stringProp name="Argument.name">objectClass</stringProp> |
| | | <stringProp name="Argument.value">inetOrgPerson</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="objectClass" elementType="Argument"> |
| | | <stringProp name="Argument.name">objectClass</stringProp> |
| | | <stringProp name="Argument.value">organizationalPerson</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="objectClass" elementType="Argument"> |
| | | <stringProp name="Argument.name">objectClass</stringProp> |
| | | <stringProp name="Argument.value">person</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | </collectionProp> |
| | | </elementProp> |
| | | </LDAPExtSampler> |
| | | <hashTree/> |
| | | |
| | | <!-- SEARCH (admin connection). --> |
| | | <LDAPExtSampler guiclass="LdapExtTestSamplerGui" testclass="LDAPExtSampler" testname="SEARCH" enabled="true"> |
| | | <stringProp name="servername"></stringProp> |
| | | <stringProp name="port"></stringProp> |
| | | <stringProp name="rootdn"></stringProp> |
| | | <stringProp name="scope">2</stringProp> |
| | | <stringProp name="countlimit">0</stringProp> |
| | | <stringProp name="timelimit">0</stringProp> |
| | | <stringProp name="attributes">cn:dn:objectClass</stringProp> |
| | | <stringProp name="return_object">false</stringProp> |
| | | <stringProp name="deref_aliases">false</stringProp> |
| | | <stringProp name="connection_timeout"></stringProp> |
| | | <stringProp name="parseflag">false</stringProp> |
| | | <stringProp name="secure">false</stringProp> |
| | | <stringProp name="user_dn"></stringProp> |
| | | <stringProp name="user_pw"></stringProp> |
| | | <stringProp name="comparedn"></stringProp> |
| | | <stringProp name="comparefilt"></stringProp> |
| | | <stringProp name="modddn"></stringProp> |
| | | <stringProp name="newdn"></stringProp> |
| | | <stringProp name="test">search</stringProp> |
| | | <stringProp name="search"></stringProp> |
| | | <stringProp name="searchfilter">(sn=user_${__threadNum})</stringProp> |
| | | </LDAPExtSampler> |
| | | <hashTree/> |
| | | |
| | | <!-- COMPARE (admin connection). --> |
| | | <LDAPExtSampler guiclass="LdapExtTestSamplerGui" testclass="LDAPExtSampler" testname="COMPARE" enabled="true"> |
| | | <stringProp name="servername"></stringProp> |
| | | <stringProp name="port"></stringProp> |
| | | <stringProp name="rootdn"></stringProp> |
| | | <stringProp name="scope">2</stringProp> |
| | | <stringProp name="countlimit"></stringProp> |
| | | <stringProp name="timelimit"></stringProp> |
| | | <stringProp name="attributes"></stringProp> |
| | | <stringProp name="return_object">false</stringProp> |
| | | <stringProp name="deref_aliases">false</stringProp> |
| | | <stringProp name="connection_timeout"></stringProp> |
| | | <stringProp name="parseflag">false</stringProp> |
| | | <stringProp name="secure">false</stringProp> |
| | | <stringProp name="user_dn"></stringProp> |
| | | <stringProp name="user_pw"></stringProp> |
| | | <stringProp name="comparedn">cn=user_${__threadNum}</stringProp> |
| | | <stringProp name="comparefilt">mail=user_${__threadNum}@test.com</stringProp> |
| | | <stringProp name="modddn"></stringProp> |
| | | <stringProp name="newdn"></stringProp> |
| | | <stringProp name="test">compare</stringProp> |
| | | </LDAPExtSampler> |
| | | <hashTree/> |
| | | |
| | | <!-- MODIFY (admin connection): rename sn and set userPassword so the user can authenticate. --> |
| | | <LDAPExtSampler guiclass="LdapExtTestSamplerGui" testclass="LDAPExtSampler" testname="MODIFY" enabled="true"> |
| | | <stringProp name="servername"></stringProp> |
| | | <stringProp name="port"></stringProp> |
| | | <stringProp name="rootdn"></stringProp> |
| | | <stringProp name="scope">2</stringProp> |
| | | <stringProp name="countlimit"></stringProp> |
| | | <stringProp name="timelimit"></stringProp> |
| | | <stringProp name="attributes"></stringProp> |
| | | <stringProp name="return_object">false</stringProp> |
| | | <stringProp name="deref_aliases">false</stringProp> |
| | | <stringProp name="connection_timeout"></stringProp> |
| | | <stringProp name="parseflag">false</stringProp> |
| | | <stringProp name="secure">false</stringProp> |
| | | <stringProp name="user_dn"></stringProp> |
| | | <stringProp name="user_pw"></stringProp> |
| | | <stringProp name="comparedn"></stringProp> |
| | | <stringProp name="comparefilt"></stringProp> |
| | | <stringProp name="modddn"></stringProp> |
| | | <stringProp name="newdn"></stringProp> |
| | | <stringProp name="test">modify</stringProp> |
| | | <stringProp name="base_entry_dn">cn=user_${__threadNum}</stringProp> |
| | | <elementProp name="ldaparguments" elementType="LDAPArguments" guiclass="LDAPArgumentsPanel" testclass="LDAPArguments" testname="LDAP Extended Request Defaults" enabled="true"> |
| | | <collectionProp name="Arguments.arguments"> |
| | | <elementProp name="sn" elementType="LDAPArgument"> |
| | | <stringProp name="Argument.name">sn</stringProp> |
| | | <stringProp name="Argument.value">rename_${__threadNum}</stringProp> |
| | | <stringProp name="Argument.opcode">replace</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="userPassword" elementType="LDAPArgument"> |
| | | <stringProp name="Argument.name">userPassword</stringProp> |
| | | <stringProp name="Argument.value">${__P(benchpw,benchPass1)}</stringProp> |
| | | <stringProp name="Argument.opcode">replace</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | </collectionProp> |
| | | </elementProp> |
| | | </LDAPExtSampler> |
| | | <hashTree/> |
| | | |
| | | <!-- BIND (measured user authentication): single bind/unbind on its own connection, |
| | | does NOT disturb the cached admin connection. --> |
| | | <LDAPExtSampler guiclass="LdapExtTestSamplerGui" testclass="LDAPExtSampler" testname="BIND" enabled="true"> |
| | | <stringProp name="servername">${__P(host,localhost)}</stringProp> |
| | | <stringProp name="port">${__P(port,1389)}</stringProp> |
| | | <stringProp name="rootdn">ou=People,${__P(basedn,dc=example,dc=com)}</stringProp> |
| | | <stringProp name="scope">2</stringProp> |
| | | <stringProp name="countlimit"></stringProp> |
| | | <stringProp name="timelimit"></stringProp> |
| | | <stringProp name="attributes"></stringProp> |
| | | <stringProp name="return_object">false</stringProp> |
| | | <stringProp name="deref_aliases">false</stringProp> |
| | | <stringProp name="connection_timeout">60000</stringProp> |
| | | <stringProp name="parseflag">false</stringProp> |
| | | <stringProp name="secure">false</stringProp> |
| | | <stringProp name="user_dn">cn=user_${__threadNum},ou=People,${__P(basedn,dc=example,dc=com)}</stringProp> |
| | | <stringProp name="user_pw">${__P(benchpw,benchPass1)}</stringProp> |
| | | <stringProp name="comparedn"></stringProp> |
| | | <stringProp name="comparefilt"></stringProp> |
| | | <stringProp name="modddn"></stringProp> |
| | | <stringProp name="newdn"></stringProp> |
| | | <stringProp name="test">sbind</stringProp> |
| | | </LDAPExtSampler> |
| | | <hashTree/> |
| | | |
| | | <!-- DELETE (admin connection): remove the per-thread user entry. --> |
| | | <LDAPExtSampler guiclass="LdapExtTestSamplerGui" testclass="LDAPExtSampler" testname="DELETE" enabled="true"> |
| | | <stringProp name="servername"></stringProp> |
| | | <stringProp name="port"></stringProp> |
| | | <stringProp name="rootdn"></stringProp> |
| | | <stringProp name="scope">2</stringProp> |
| | | <stringProp name="countlimit"></stringProp> |
| | | <stringProp name="timelimit"></stringProp> |
| | | <stringProp name="attributes"></stringProp> |
| | | <stringProp name="return_object">false</stringProp> |
| | | <stringProp name="deref_aliases">false</stringProp> |
| | | <stringProp name="connection_timeout"></stringProp> |
| | | <stringProp name="parseflag">false</stringProp> |
| | | <stringProp name="secure">false</stringProp> |
| | | <stringProp name="user_dn"></stringProp> |
| | | <stringProp name="user_pw"></stringProp> |
| | | <stringProp name="comparedn"></stringProp> |
| | | <stringProp name="comparefilt"></stringProp> |
| | | <stringProp name="modddn"></stringProp> |
| | | <stringProp name="newdn"></stringProp> |
| | | <stringProp name="test">delete</stringProp> |
| | | <stringProp name="delete">cn=user_${__threadNum}</stringProp> |
| | | </LDAPExtSampler> |
| | | <hashTree/> |
| | | |
| | | <!-- ADD WITHOUT DELETE (admin connection): accumulation; unique RDN via __UUID. --> |
| | | <LDAPExtSampler guiclass="LdapExtTestSamplerGui" testclass="LDAPExtSampler" testname="ADD WITHOUT DELETE" enabled="true"> |
| | | <stringProp name="servername"></stringProp> |
| | | <stringProp name="port"></stringProp> |
| | | <stringProp name="rootdn"></stringProp> |
| | | <stringProp name="scope">2</stringProp> |
| | | <stringProp name="countlimit"></stringProp> |
| | | <stringProp name="timelimit"></stringProp> |
| | | <stringProp name="attributes"></stringProp> |
| | | <stringProp name="return_object">false</stringProp> |
| | | <stringProp name="deref_aliases">false</stringProp> |
| | | <stringProp name="connection_timeout"></stringProp> |
| | | <stringProp name="parseflag">false</stringProp> |
| | | <stringProp name="secure">false</stringProp> |
| | | <stringProp name="user_dn"></stringProp> |
| | | <stringProp name="user_pw"></stringProp> |
| | | <stringProp name="comparedn"></stringProp> |
| | | <stringProp name="comparefilt"></stringProp> |
| | | <stringProp name="modddn"></stringProp> |
| | | <stringProp name="newdn"></stringProp> |
| | | <stringProp name="test">add</stringProp> |
| | | <stringProp name="base_entry_dn">cn=user_${__threadNum}_${__UUID}</stringProp> |
| | | <elementProp name="arguments" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true"> |
| | | <collectionProp name="Arguments.arguments"> |
| | | <elementProp name="sn" elementType="Argument"> |
| | | <stringProp name="Argument.name">sn</stringProp> |
| | | <stringProp name="Argument.value">user_${__threadNum}</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="mail" elementType="Argument"> |
| | | <stringProp name="Argument.name">mail</stringProp> |
| | | <stringProp name="Argument.value">user_${__threadNum}@test.com</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="objectClass" elementType="Argument"> |
| | | <stringProp name="Argument.name">objectClass</stringProp> |
| | | <stringProp name="Argument.value">top</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="objectClass" elementType="Argument"> |
| | | <stringProp name="Argument.name">objectClass</stringProp> |
| | | <stringProp name="Argument.value">inetOrgPerson</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="objectClass" elementType="Argument"> |
| | | <stringProp name="Argument.name">objectClass</stringProp> |
| | | <stringProp name="Argument.value">organizationalPerson</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | <elementProp name="objectClass" elementType="Argument"> |
| | | <stringProp name="Argument.name">objectClass</stringProp> |
| | | <stringProp name="Argument.value">person</stringProp> |
| | | <stringProp name="Argument.metadata">=</stringProp> |
| | | </elementProp> |
| | | </collectionProp> |
| | | </elementProp> |
| | | </LDAPExtSampler> |
| | | <hashTree/> |
| | | </hashTree> |
| | | </hashTree> |
| | | </hashTree> |
| | | </jmeterTestPlan> |