From 930209c3f936dfaba98b2459f41d8ded1b96fbd7 Mon Sep 17 00:00:00 2001 From: Shawn McKinney <smckinney@apache.org> Date: Tue, 25 Feb 2025 08:18:30 -0600 Subject: [PATCH] these changes are an antipattern for how to handle connections. do not use in prod --- src/main/java/com/symas/LoadBase.java | 32 ++++++++++++ src/main/java/com/symas/RegisterUser.java | 63 ++++++++++++++--------- src/main/java/com/symas/UserImpl.java | 38 ++++++++++++++ 3 files changed, 110 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/symas/LoadBase.java b/src/main/java/com/symas/LoadBase.java index 75fcd2b..1d36e88 100644 --- a/src/main/java/com/symas/LoadBase.java +++ b/src/main/java/com/symas/LoadBase.java @@ -1,6 +1,7 @@ /* Copyright (c) 2024 by Symas Corporation. */ package com.symas; +import java.util.ArrayList; import org.apache.commons.lang.StringUtils; import org.apache.directory.fortress.core.*; import org.apache.directory.fortress.core.model.Group; @@ -13,7 +14,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import org.apache.directory.ldap.client.api.LdapConnection; import static org.junit.Assert.assertNotNull; /** @@ -57,6 +60,8 @@ public abstract class LoadBase extends AbstractJavaSamplerClient protected String filters[] = null; protected String attrs[] = null; protected Boolean attrsonly = false; + + //protected List<LdapConnection> connections = new ArrayList(); private static AtomicInteger count = new AtomicInteger(0); protected static AtomicInteger test_failures = new AtomicInteger(0); @@ -456,6 +461,33 @@ public abstract class LoadBase extends AbstractJavaSamplerClient public void teardownTest( JavaSamplerContext samplerContext ) { LOG.info( "JMETER TEARDOWN TID: {}, FAILED TESTS: {}", getThreadId(), test_failures.get() ); + try + { + LOG.info( "JMETER TEARDOWN TID: {}, SLEEP", getThreadId() ); + Thread.sleep( 1800001 ); + } + catch (Exception e) + { + // ignore + } + + /* + if( connections != null && connections.size() > 0 ) + { + LOG.info( "JMETER TEARDOWN CLOSE CONNECTIONS: {}", connections.size() ); + UserImpl userImpl = new UserImpl(); + for ( LdapConnection ld : connections ) + { + try + { + userImpl.closeConnectionUser( ld ); + } + catch ( RuntimeException e ) + { + } + } + } + */ System.exit(0); } diff --git a/src/main/java/com/symas/RegisterUser.java b/src/main/java/com/symas/RegisterUser.java index 655e7bf..4579d4e 100644 --- a/src/main/java/com/symas/RegisterUser.java +++ b/src/main/java/com/symas/RegisterUser.java @@ -35,7 +35,6 @@ public class RegisterUser extends LoadBase int count = getKey(); String userId = hostname + '-' + qualifier + '-' + count; SampleResult sampleResult = new SampleResult(); - boolean testDuplicate = false; // Service account: User bindUser = new User( @@ -56,26 +55,48 @@ public class RegisterUser extends LoadBase { sampleResult.sampleStart(); ld = userImpl.bind( bindUser ); + ConnImpl connImpl = new ConnImpl(); + //ld = connImpl.getConnection(); + //userImpl.bind( ld, bindUser ); + if ( ! verify ) + { + // Search User 1: + boolean result = verify( inUser, Op.DEL, ld ); + assertFalse( result ); + + connImpl.closeConnection( ld ); + ld = connImpl.getConnection(); + userImpl.bind( ld, bindUser ); - // Search User 1: - boolean result = verify( inUser, Op.DEL, ld ); - assertFalse( result ); - - // Add User: - User outUser = userImpl.create( inUser, ld ); - assertNotNull( outUser ); + // Add User: + User outUser = userImpl.create( inUser, ld ); + assertNotNull( outUser ); - // Mod Group: - Group inGroup = new Group( name ); - //String id = hostname + '-' + qualifier + '-' + count; - LOG.debug( "threadid: {}, groupName: {} userid: {}", getThreadId(), name, inUser.getUserId() ); - Group outGroup = groupImpl.assign( inGroup, inUser.getUserId(), ld ); - assertNotNull( outGroup ); + connImpl.closeConnection( ld ); + ld = connImpl.getConnection(); + userImpl.bind( ld, bindUser ); + + // Mod Group: + Group inGroup = new Group( name ); + //String id = hostname + '-' + qualifier + '-' + count; + LOG.debug( "threadid: {}, groupName: {} userid: {}", getThreadId(), name, inUser.getUserId() ); + Group outGroup = groupImpl.assign( inGroup, inUser.getUserId(), ld ); + assertNotNull( outGroup ); - // Search User 2: - result = verify( inUser, Op.ADD, ld ); - assertTrue( result ); + connImpl.closeConnection( ld ); + ld = connImpl.getConnection(); + userImpl.bind( ld, bindUser ); + + // Search User 2: + result = verify( inUser, Op.ADD, ld ); + //assertTrue( result ); + } + sampleResult.setSampleCount( 1 ); + sampleResult.sampleEnd(); + sampleResult.setBytes(1); + sampleResult.setResponseMessage("test completed TID: " + getThreadId() + " UID: " + userId); + sampleResult.setSuccessful(true); if( sleep > 0 ) { try @@ -87,11 +108,6 @@ public class RegisterUser extends LoadBase Thread.currentThread().interrupt(); } } - sampleResult.setSampleCount( 1 ); - sampleResult.sampleEnd(); - sampleResult.setBytes(1); - sampleResult.setResponseMessage("test completed TID: " + getThreadId() + " UID: " + userId); - sampleResult.setSuccessful(true); } catch ( org.apache.directory.fortress.core.CreateException ce ) { @@ -107,7 +123,8 @@ public class RegisterUser extends LoadBase } finally { - userImpl.closeConnectionUser( ld ); + //userImpl.closeConnectionUser( ld ); + //connections.add( ld ); } return sampleResult; diff --git a/src/main/java/com/symas/UserImpl.java b/src/main/java/com/symas/UserImpl.java index e0fe579..9fd372a 100755 --- a/src/main/java/com/symas/UserImpl.java +++ b/src/main/java/com/symas/UserImpl.java @@ -463,6 +463,11 @@ final class UserImpl extends LdapDataProvider closeUserConnection( ld ); } + void closeConnectionPools( LdapConnection ld ) + { + closeUserConnection( ld ); + } + /** * @param user * @return @@ -654,6 +659,39 @@ final class UserImpl extends LdapDataProvider } + void bind( LdapConnection ld, User user ) throws FinderException, PasswordException + { + Session session; + String userDn = user.getUserId(); + + try + { + session = new ObjectFactory().createSession(); + session.setAuthenticated( false ); + session.setUserId( user.getUserId() ); + BindResponse bindResponse = bind( ld, userDn, user.getPassword() ); + String info; + + if ( bindResponse.getLdapResult().getResultCode() != ResultCodeEnum.SUCCESS ) + { + info = "PASSWORD INVALID for userId [" + user.getUserId() + "], resultCode [" + + bindResponse.getLdapResult().getResultCode() + "]"; + session.setMsg( info ); + session.setErrorId( GlobalErrIds.USER_PW_INVLD ); + } + } + catch ( LdapAuthenticationException e ) + { + String info = "checkPassword INVALID PASSWORD for userId [" + user.getUserId() + "] LdapAuthenticationException [" + e + "]"; + throw new PasswordException( GlobalErrIds.USER_PW_INVLD, info ); + } + catch ( LdapException e ) + { + String error = "checkPassword userId [" + user.getUserId() + "] caught LDAPException=" + e; + throw new FinderException( GlobalErrIds.USER_READ_FAILED, error, e ); + } + } + boolean changePassword( User entity, String newPassword ) throws SecurityException { boolean rc = true; -- GitLab