From 08610f3cd78a49db7c8633fc9aeb07729b4bc88f Mon Sep 17 00:00:00 2001
From: Valery Kharseko <vharseko@3a-systems.ru>
Date: Wed, 08 Jul 2026 16:03:08 +0000
Subject: [PATCH] Add CI smoke tests for the addrate/authrate/modrate/searchrate tools (#658)
---
opendj-ldap-toolkit/src/main/assembly/bat/authrate.bat | 6 ++-
opendj-ldap-toolkit/src/main/assembly/bat/addrate.bat | 5 ++
.github/workflows/build.yml | 56 ++++++++++++++++++++++++++++
opendj-ldap-toolkit/src/main/assembly/bat/modrate.bat | 5 ++
opendj-ldap-toolkit/src/main/assembly/bat/searchrate.bat | 5 ++
5 files changed, 72 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 041c6b6..ec8d21f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -99,6 +99,32 @@
opendj-server-legacy/target/package/opendj/bin/status --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --trustAll
opendj-server-legacy/target/package/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "dc=example,dc=com" --searchScope base "(objectClass=*)" 1.1
opendj-server-legacy/target/package/opendj/bin/ldapsearch --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "ou=people,dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | grep ^dn: | wc -l | grep -q 5000
+ # --- Load-testing tools smoke tests (server online, 5000 sample users) ---
+ echo "===== searchrate ====="
+ opendj-server-legacy/target/package/opendj/bin/searchrate --hostname localhost --port 1636 --useSSL --trustAll --bindDN "cn=Directory Manager" --bindPassword password --baseDN "ou=people,dc=example,dc=com" --searchScope sub -c 4 -t 1 -m 2000 -i 1 -g "rand(0,4999)" "(uid=user.%d)" 1.1
+ echo "===== authrate ====="
+ opendj-server-legacy/target/package/opendj/bin/authrate --hostname localhost --port 1636 --useSSL --trustAll -D "uid=user.%d,ou=people,dc=example,dc=com" -w password -c 4 -m 2000 -i 1 -g "rand(0,4999)"
+ echo "===== modrate ====="
+ opendj-server-legacy/target/package/opendj/bin/modrate --hostname localhost --port 1636 --useSSL --trustAll --bindDN "cn=Directory Manager" --bindPassword password -b "uid=user.%d,ou=people,dc=example,dc=com" -c 4 -t 1 -m 2000 -i 1 -g "rand(0,4999)" "description:modrate-load-test"
+ echo "===== addrate ====="
+ cat > /tmp/addrate.template <<'EOF'
+ define suffix=dc=example,dc=com
+
+ branch: ou=People,[suffix]
+ subordinateTemplate: person
+
+ template: person
+ rdnAttr: uid
+ objectClass: top
+ objectClass: person
+ objectClass: organizationalPerson
+ objectClass: inetOrgPerson
+ uid: addrate.<sequential:0>
+ cn: AddRate {uid}
+ sn: AddRate
+ userPassword: password
+ EOF
+ opendj-server-legacy/target/package/opendj/bin/addrate --hostname localhost --port 1636 --useSSL --trustAll --bindDN "cn=Directory Manager" --bindPassword password -c 4 -t 1 -m 2000 -i 1 -C fifo -s 100 /tmp/addrate.template
opendj-server-legacy/target/package/opendj/bin/dsconfig create-backend --hostname localhost --port 4444 --bindDN "cn=Directory Manager" --bindPassword password --backend-name=example2 --type je --set=base-dn:dc=example2,dc=com --set=enabled:true --no-prompt --trustAll
opendj-server-legacy/target/package/opendj/bin/makeldif -o /tmp/test.ldif -c suffix=dc=example2,dc=com opendj-server-legacy/target/package/opendj/config/MakeLDIF/example.template
opendj-server-legacy/target/package/opendj/bin/stop-ds
@@ -262,6 +288,36 @@
opendj-server-legacy\target\package\opendj\bat\status.bat --hostname localhost --bindDN "cn=Directory Manager" --bindPassword password --trustAll
opendj-server-legacy\target\package\opendj\bat\ldapsearch.bat --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "dc=example,dc=com" --searchScope base "(objectClass=*)" 1.1
opendj-server-legacy\target\package\opendj\bat\ldapsearch.bat --hostname localhost --port 1636 --bindDN "cn=Directory Manager" --bindPassword password --useSsl --trustAll --baseDN "dc=example,dc=com" --searchScope sub "(uid=user.*)" dn | find /c '"dn:"' | findstr "5000"
+ # --- Load-testing tools smoke tests (server online, 5000 sample users) ---
+ Write-Host "===== searchrate ====="
+ opendj-server-legacy\target\package\opendj\bat\searchrate.bat --hostname localhost --port 1636 --useSSL --trustAll --bindDN "cn=Directory Manager" --bindPassword password --baseDN "ou=people,dc=example,dc=com" --searchScope sub -c 4 -t 1 -m 2000 -i 1 -g "rand(0,4999)" "(uid=user.%d)" 1.1
+ if ($LASTEXITCODE -ne 0) { throw "searchrate failed with exit code $LASTEXITCODE" }
+ Write-Host "===== authrate ====="
+ opendj-server-legacy\target\package\opendj\bat\authrate.bat --hostname localhost --port 1636 --useSSL --trustAll -D "uid=user.%d,ou=people,dc=example,dc=com" -w password -c 4 -m 2000 -i 1 -g "rand(0,4999)"
+ if ($LASTEXITCODE -ne 0) { throw "authrate failed with exit code $LASTEXITCODE" }
+ Write-Host "===== modrate ====="
+ opendj-server-legacy\target\package\opendj\bat\modrate.bat --hostname localhost --port 1636 --useSSL --trustAll --bindDN "cn=Directory Manager" --bindPassword password -b "uid=user.%d,ou=people,dc=example,dc=com" -c 4 -t 1 -m 2000 -i 1 -g "rand(0,4999)" "description:modrate-load-test"
+ if ($LASTEXITCODE -ne 0) { throw "modrate failed with exit code $LASTEXITCODE" }
+ Write-Host "===== addrate ====="
+ @'
+ define suffix=dc=example,dc=com
+
+ branch: ou=People,[suffix]
+ subordinateTemplate: person
+
+ template: person
+ rdnAttr: uid
+ objectClass: top
+ objectClass: person
+ objectClass: organizationalPerson
+ objectClass: inetOrgPerson
+ uid: addrate.<sequential:0>
+ cn: AddRate {uid}
+ sn: AddRate
+ userPassword: password
+ '@ | Set-Content -Encoding ascii addrate.template
+ opendj-server-legacy\target\package\opendj\bat\addrate.bat --hostname localhost --port 1636 --useSSL --trustAll --bindDN "cn=Directory Manager" --bindPassword password -c 4 -t 1 -m 2000 -i 1 -C fifo -s 100 addrate.template
+ if ($LASTEXITCODE -ne 0) { throw "addrate failed with exit code $LASTEXITCODE" }
opendj-server-legacy\target\package\opendj\bat\dsconfig.bat create-backend --hostname localhost --port 4444 --bindDN "cn=Directory Manager" --bindPassword password --backend-name=example2 --type je --set=base-dn:dc=example2,dc=com --set=enabled:true --no-prompt --trustAll
opendj-server-legacy\target\package\opendj\bat\makeldif.bat -o test.ldif -c suffix=dc=example2,dc=com opendj-server-legacy\target\package\opendj\config\MakeLDIF\example.template
opendj-server-legacy\target\package\opendj\bat\stop-ds.bat
diff --git a/opendj-ldap-toolkit/src/main/assembly/bat/addrate.bat b/opendj-ldap-toolkit/src/main/assembly/bat/addrate.bat
index 5d557fe..02081de 100644
--- a/opendj-ldap-toolkit/src/main/assembly/bat/addrate.bat
+++ b/opendj-ldap-toolkit/src/main/assembly/bat/addrate.bat
@@ -13,10 +13,13 @@
rem information: "Portions Copyright [year] [name of copyright owner]".
rem
rem Copyright 2014 ForgeRock AS.
+rem Portions Copyright 2026 3A Systems, LLC
setlocal
set OPENDJ_INVOKE_CLASS="com.forgerock.opendj.ldap.tools.AddRate"
set SCRIPT_NAME=addrate
-call "%~dp0\..\lib\_client-script.bat" %*
+rem Chain (no CALL) so a literal '%' in arguments (e.g. the "%d" of a Java
+rem format string used by -g) is not stripped by CALL's extra expansion pass.
+"%~dp0\..\lib\_client-script.bat" %*
diff --git a/opendj-ldap-toolkit/src/main/assembly/bat/authrate.bat b/opendj-ldap-toolkit/src/main/assembly/bat/authrate.bat
index a111923..a7db138 100644
--- a/opendj-ldap-toolkit/src/main/assembly/bat/authrate.bat
+++ b/opendj-ldap-toolkit/src/main/assembly/bat/authrate.bat
@@ -13,10 +13,12 @@
rem information: "Portions Copyright [year] [name of copyright owner]".
rem
rem Copyright 2010 Sun Microsystems, Inc.
-
+rem Portions Copyright 2026 3A Systems, LLC
setlocal
set OPENDJ_INVOKE_CLASS="com.forgerock.opendj.ldap.tools.AuthRate"
set SCRIPT_NAME=authrate
-call "%~dp0\..\lib\_client-script.bat" %*
+rem Chain (no CALL) so a literal '%' in arguments (e.g. the "%d" of a Java
+rem format string used by -g) is not stripped by CALL's extra expansion pass.
+"%~dp0\..\lib\_client-script.bat" %*
diff --git a/opendj-ldap-toolkit/src/main/assembly/bat/modrate.bat b/opendj-ldap-toolkit/src/main/assembly/bat/modrate.bat
index cc4c18e..c3e2fc6 100644
--- a/opendj-ldap-toolkit/src/main/assembly/bat/modrate.bat
+++ b/opendj-ldap-toolkit/src/main/assembly/bat/modrate.bat
@@ -13,10 +13,13 @@
rem information: "Portions Copyright [year] [name of copyright owner]".
rem
rem Copyright 2009 Sun Microsystems, Inc.
+rem Portions Copyright 2026 3A Systems, LLC
setlocal
set OPENDJ_INVOKE_CLASS="com.forgerock.opendj.ldap.tools.ModRate"
set SCRIPT_NAME=modrate
-call "%~dp0\..\lib\_client-script.bat" %*
+rem Chain (no CALL) so a literal '%' in arguments (e.g. the "%d" of a Java
+rem format string used by -g) is not stripped by CALL's extra expansion pass.
+"%~dp0\..\lib\_client-script.bat" %*
diff --git a/opendj-ldap-toolkit/src/main/assembly/bat/searchrate.bat b/opendj-ldap-toolkit/src/main/assembly/bat/searchrate.bat
index ffc9203..e400fc2 100644
--- a/opendj-ldap-toolkit/src/main/assembly/bat/searchrate.bat
+++ b/opendj-ldap-toolkit/src/main/assembly/bat/searchrate.bat
@@ -13,10 +13,13 @@
rem information: "Portions Copyright [year] [name of copyright owner]".
rem
rem Copyright 2009 Sun Microsystems, Inc.
+rem Portions Copyright 2026 3A Systems, LLC
setlocal
set OPENDJ_INVOKE_CLASS="com.forgerock.opendj.ldap.tools.SearchRate"
set SCRIPT_NAME=searchrate
-call "%~dp0\..\lib\_client-script.bat" %*
+rem Chain (no CALL) so a literal '%' in arguments (e.g. the "%d" of a Java
+rem format string used by -g) is not stripped by CALL's extra expansion pass.
+"%~dp0\..\lib\_client-script.bat" %*
--
Gitblit v1.10.0